This article is available in French.
1. Persistance par Cookie #
La méthode la plus fiable pour les applications HTTP.
Insertion de Cookie #
HAProxy insère un cookie dans la réponse du serveur. Au retour, il lit ce cookie pour savoir vers quel serveur diriger la requête.
backend app_servers
balance roundrobin
cookie SERVERID insert indirect nocache
server s1 10.0.0.1:80 check cookie s1
server s2 10.0.0.2:80 check cookie s22. Persistance par IP Source #
Utilisée quand l'application ne gère pas les cookies ou pour du trafic non-HTTP.
L'algorithme source #
L'IP de l'utilisateur est hachée pour désigner un serveur. Simple, mais problématique si beaucoup d'utilisateurs partagent la même IP (ex: entreprise via un proxy).
backend app_servers
balance source
server s1 10.0.0.1:80 check3. Les Stick-Tables #
La mémoire interne de HAProxy pour une persistance avancée.
Stockage en mémoire #
Les stick-tables permettent de stocker des informations (IP, ID de session) et de les partager entre plusieurs nœuds HAProxy via Peers.
backend myapp
stick-table type ip size 100k expire 30m
stick on srcConclusion #
Maintenir l'état utilisateur.
Choisir la bonne méthode #
Le cookie est privilégié pour le Web, tandis que l'IP source ou les stick-tables sont indispensables pour les flux persistants complexes (TCP, RDP, etc.).
Mise en pratique : configurer la persistance #
Cookies, stick-tables et tests.
Persistance par cookie #
backend app
balance roundrobin
cookie SRV insert indirect nocache httponly secure
server web1 10.0.0.11:8080 check cookie s1
server web2 10.0.0.12:8080 check cookie s2curl -sI https://app.exemple.fr | grep -i set-cookie # Set-Cookie: SRV=s1; ...
for i in 1 2 3 4; do curl -s -b "SRV=s2" https://app.exemple.fr/hostname; done # toujours web2Persistance par adresse IP avec stick-table #
backend app
balance roundrobin
stick-table type ip size 200k expire 30m
stick on src
server web1 10.0.0.11:8080 check
server web2 10.0.0.12:8080 checkecho "show table app" | sudo socat stdio /var/run/haproxy.sock # entrées de la table
echo "clear table app key 203.0.113.7" | sudo socat stdio /var/run/haproxy.sockErreur Courante : Derrière un CDN ou un proxy,srcest l'adresse du proxy : utilisezstick on req.hdr_ip(X-Forwarded-For,-1)ou un cookie applicatif pour éviter de tout envoyer sur le même serveur.
My progress
Sign in to track your progress and take notes. Sign in