Recharger la configuration de Varnish à chaud



  • 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
    

    A savoir : au redémarrage de Varnish, les configurations précédemment compilées sont effacées !