Balancement de la charge TCP : HAProxy et deux serveurs Varnish
Une seule adresse d'entrée, deux caches derrière : HAProxy
reçoit tout le trafic et le distribue en Round-Robin aux serveurs
Varnish, avec un traitement particulier pour l'administration de
WordPress.
La topologie de la semaine : HAProxy → deux Varnish → Apache.
HA-Proxy version 1.6.3 2015/12/25
Copyright 2000-2015 Willy Tarreau <willy@haproxy.org>
Contexte Client Cornucopia
Cornucopia · Application Pratique sur le Terrain
Ce laboratoire technique s'inscrit directement dans l'infrastructure de la ferme maraîchère de Flora et Hazel pour garantir la réactivité et la stabilité de leurs services bio en ligne.
Cas d'Usage Concret
Appliquer les configurations optimisées pour soutenir les pics de consultation des abonnés de la ferme.
2 · Configuration de HAProxy
Éditer le fichier de configuration :
$ sudo nano /etc/haproxy/haproxy.cfg
Le fichier de configuration se lit dans cet ordre, et
il faut le respecter (mélanger frontend et backend produit une
erreur) :
D'abord les options générales (global, defaults);
puis les frontends : les ports sur lesquels on
écoute, associés à un backend;
enfin les backends : les groupes de serveurs
balancés.
La configuration complète (la partie
en rouge est
l'ajout au fichier livré par défaut) :
192.168.56.40 est l'adresse de VOTRE serveur HAProxy;
192.168.56.30 et .31 sont vos deux serveurs Varnish; 192.168.56.10
est le serveur Apache. Adapter à vos machines.
Vérifier la configuration
Les erreurs éventuelles sont affichées pour qu'on
puisse les réparer :
$ haproxy -f /etc/haproxy/haproxy.cfg -c
Appliquer la nouvelle configuration
$ sudo service haproxy restart
3 · Que fait-on dans le cas de WordPress ?
WordPress est parfait pour mettre en évidence les
particularités des applications web modernes : une interface publique
(le blogue) et un panneau d'administration sécurisé. Le balancement
concerne surtout la partie publique - le panneau d'administration
peut exiger qu'UN SEUL serveur le traite en tout temps, pour la
cohésion des chemins sauvés en session.
Informer WordPress de son URL d'accès
Mettre l'adresse IP de HAProxy (ou le nom de domaine
qui pointe sur HAProxy) dans les réglages :
WordPress doit générer ses liens avec l'adresse d'entrée.
Traiter certains URL différemment
Éditer /etc/haproxy/haproxy.cfg et ajouter à la partie
frontend site_http :
acl has_admin path_beg /wp-admin
acl has_login path_beg /wp-login.php
use_backend admin_servers if has_admin or has_login
Puis ajouter à la suite du backend site_http_varnish :
backend admin_servers
mode http
balance source
server ssh1 192.168.56.10:80 check inter 10s
option httpchk
Et appliquer :
$ sudo service haproxy restart
Résultat : le public est balancé entre les deux Varnish,
mais /wp-admin et /wp-login.php filent toujours vers le même serveur
(balance source) - l'administration reste cohérente.