Varnish
Installation
Aktuelle Versionen von Varnish benötigen die folgenden Pakete auf Debian/Ubuntu:
$ sudo apt-get install autotools-dev automake1.9 libtool autoconf libncurses-dev xsltproc groff-base libpcre3-dev pkg-config
Anschließend kann Varnish mit Buildout heruntergeladen, kompiliert und konfiguriert werden. Hierzu tragen Sie folgendes in Ihre deploy.cfg-Datei ein:
[buildout]
parts =
...
varnish-build
varnish-config
varnish-instance
…
[varnish-build]
recipe = zc.recipe.cmmi
url = ${varnish-instance:download-url}
[varnish-config]
recipe = collective.recipe.template
input = templates/plone.vcl.in
output = ${buildout:directory}/etc/plone.vcl
backend-host = 127.0.0.1
backend-port = 8010
[varnish-instance]
recipe = plone.recipe.varnish
daemon = ${buildout:parts-directory}/varnish-build/sbin/varnishd
config = ${buildout:directory}/etc/plone.vcl
bind = 127.0.0.1:8000
cache-size = 1G
runtime-parameters =
thread_pool_max=100
- daemon
- ${buildout:parts-directory}/varnish-build/sbin/varnishd
- bind
Hostname und Port, an dem Varnish auf Anfragen lauscht.
Der Standardwert ist 127.0.0.1:8000.
- cache-size
Die Größe des Caches. Beachten Sie bitte, dass die Größe bei 32bit-Systemen auf 2G begrenzt ist.
Der Standardwert ist 256M.
- config
- Pfad zur Varnish-Konfigurationsdatei, in unserem Fall ${buildout:directory}/etc/plone.vcl
- runtime-parameters
Parameter, die zur Laufzeit angegeben werden, z.B.:
- thread_pool_max
- Maximale Anzahl der Threads, in unserem Fall 100.
Die vollständige Liste der Parameter finden Sie beim Aufruf der Manpages für varnishd:
$ man varnishd
Weitere Konfigurationsmöglichkeiten erhalten Sie in plone.recipe.varnish.
Anmerkung 1: Wird Varnish auf Mac OS X mit plone.recipe.varnish installiert, wird automatisch ein Patch mitinstalliert. Weitere Informationen erhalten Sie unter http://varnish.projects.linpro.no/ticket/118.
Anmerkung 2: Falls Sie als Caching Reverse Proxy lieber Squid verwenden möchten, steht auch hierfür ein Rezept bereit: plone.recipe.squid
Anmerkung 3: Wenn Varnish zusammen mit dem Apache-Webserver verwendet wird, muss die CacheFu-Konfiguration auf Squid/Varnish behind Apache gesetzt werden.
Konfiguration
Eine examplarische Varnish-Konfigurationsdatei finden Sie hier: plone.vcl.in. In ihr wird das Backend spezifiziert, das auf localhost an Port 8080 läuft und erlaubt Anfragen via HTTP-Basic Authentication oder Cookie-basierte Authentifizierung.
Weitere Informationen zur Varnish-Konfiguration erhalten Sie in Varnish Configuration Language - VCL.
Starten und Statistiken
Anschließend können Sie Varnish mit dieser Konfigurationsdatei und 1 GB Cache am Port 8100 starten mit:
$ ./bin/varnish-instance
Dies startet den Varnish-Daemon in {buildout:directory}/parts/varnish-build/sbin/varnishd unter Verwendung der Konfigurationsdatei {buildout:directory}/etc/plone.vcl.
Um zu überprüfen, ob der Varnish auch tatsächlich die gewünschten Dateien cached, stehen Ihnen diverse Werkzeuge in {buildout:directory}parts/varnish-build/bin zur Verfügung:
- varnishtop
- gibt die Memory-Log-Dateien in einer regelmäßig aktualisierten Liste der häufigsten Log-Einträge aus.
- varnishhist
- gibt die Memory-Log-Dateien als regelmäßig aktualisierte Histogramme der Lastverteilung der letzten N Anfragen aus.
- varnishsizes
- macht dasselbe wie varnishhist, zeigt jedoch die Größe der Objekte und nicht die Zeit zum Abarbeiten der Anfragen. Dies gibt Ihnen einen guten Überblick über die Größe der ausgelieferten Objekte.
- varnishstat
- gibt Ihnen eine detaillierte Angabe über die Anzahl der misses, hits, den verwendeten Storage, erstellte Threads und gelöschte Objekte.
Weitere Informationen zu den statistischen Auswertungsmöglichkeiten von Varnish erhalten Sie in Statistics.
Load Balancing
Varnish erlaubt auch Load Balancing zwischen verschiedenen Instanzen. Hierzu wird statt der Angaben zu backend default folgendes angegeben:
backend instance {
.host = "127.0.0.1";
.port = "8081";
.probe = {
.url = "/";
.interval = 5s;
.timeout = 1 s;
.window = 5;
.threshold = 3;
}
}
backend instance2 {
.host = "127.0.0.1";
.port = "8082";
.probe = {
.url = "/";
.interval = 5s;
.timeout = 1 s;
.window = 5;
.threshold = 3;
}
}
backend sorryserver {
.host = "localhost";
.port = "80";
}
director zeo round-robin {
{
.backend = instance;
}
{
.backend = instance2;
}
}
…
sub vcl_recv {
set req.backend = zeo;
…
if (! req.backend.healthy) {
set req.backend = sorryserver;
return(pass);
}
…
}
- probe
- gibt in unserem Fall an, dass Varnish das /-Objekt alle 5 Sekunden aufruft. Falls die Antwort länger als eine Sekunde ausbleibt, nimmt Varnish an, dass das Backend nicht erreichbar ist. Umgekehrt nimmt Varnish an, dass das Backend erreichbar ist wenn drei der letzten fünf Verbindungsversuche erfolgreich waren. Weitere Informationen hierzu erhalten sie in backend health polling.
- round-robin
- zeigt an, dass die Anfragen zufällig an die Backends weitergegeben werden.
Allgemeine Informationen zum Load-Balancing mit Varnish erhalten Sie unter LoadBalancing.