Voici un petit article pour vous présenter la procédure permettant de recharger ou charger une nouvelle configuration de Varnish à chaud. La solution consiste à utiliser le CLI Varnish pour charger et compiler la nouvelle version du fichier de configuration en lui ayant attribué un nom pour enfin l’activer. L’avantage est de ne pas interrompre le service et de se garder la possibilité de revenir rapidement, si besoin, à la configuration précédente.

varnishadm

Connectez vous au CLI Varnish via varnishadm. C’est équivalent à faire un telnet localhost sur le port défini dans votre configuration Varnish :

# Telnet admin interface listen address and port
VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1
VARNISH_ADMIN_LISTEN_PORT=2000

Avec varnishadm on obtient quelque chose comme :

root@varnish3:~# varnishadm
CLI connected to 127.0.0.1 2000
200
-----------------------------
Varnish Cache CLI 1.0
-----------------------------
Linux,2.6.32,x86_64,-smalloc,-smalloc,-hcritbit

Type 'help' for command list.
Type 'quit' to close CLI session.

Charger la nouvelle configuration

Après avoir modifié votre configuration VCL, vous pouvez la recharger via vcl.load :

vcl.load default_141011 /etc/varnish/default.vcl
200
VCL compiled.

Dans cet exemple, pas de problème, la configuration est compilée sans erreurs. A ce stade, la nouvelle configuration n’est pas encore appliquée. Que se passe-t-il si je charge une configuration avec une erreur ?

vcl.load default_141011_error /etc/varnish/default.vcl
106
Message from VCC-compiler:
Expected ';' got '.'
(program line 464), at
('input' Line 3 Pos 9)
        .port = "80";
--------#--------------


In backend specification starting at:
('input' Line 1 Pos 1)
backend default {
#######----------

Running VCC-compiler failed, exit 1
VCL compilation failed

J’ai ici volontairement oublié un “;”. Clairement : pas de risque de charger une configuration avec des erreurs de syntaxe. C’est un point important.

Activer la nouvelle configuration

La nouvelle configuration est compilée et disponible pour Varnish : il faut maintenant l’activer. Avec vcl.list, je liste les configurations disponibles :

vcl.list
200
active          0 boot
available       0 default_141011

Je souhaite donc activer la configuration default_141011 :

vcl.use default_141011
200

La nouvelle configuration est active : je vérifie avec vcl.list :

vcl.list
200
available       0 boot
active          0 default_141011

La configuration chargée au démarrage de Varnish est toujours présente sous l’identifiant “boot”. Vous pouvez y revenir en utilisant vcl.use boot.

Il est possible d’utiliser les commandes précédentes en les passants directement à varnishadm ce qui vous permettra de réaliser un script facilement. Par exemple :

root@varnish3:~# varnishadm vcl.load d_`date +%j` /etc/varnish/default.vcl
CLI connected to 127.0.0.1 2000
VCL compiled.

et :

root@varnish3:~#  varnishadm vcl.list
CLI connected to 127.0.0.1 2000
active          0 boot
available       0 d_287