HAProxy Load Balancer : Configuration Haute Disponibilité
HAProxy est le répartiteur de charge open source le plus utilisé en production. Il offre des performances exceptionnelles, une fiabilité éprouvée et des fonctionnalités avancées de routage Layer 4 et Layer 7. Ce guide couvre l’installation, la configuration complète, la terminaison SSL et la mise en place d’une architecture haute disponibilité avec Keepalived.
Installation et Configuration de Base
Installez HAProxy depuis le PPA officiel pour obtenir la dernière version stable avec les correctifs de sécurité les plus récents :
sudo apt update
sudo add-apt-repository ppa:vbernat/haproxy-2.8
sudo apt install haproxy
sudo systemctl enable haproxy
haproxy -v
La configuration principale se trouve dans /etc/haproxy/haproxy.cfg. La structure se divise en quatre sections principales : global (paramètres du processus), defaults (valeurs par défaut), frontend (points d’entrée) et backend (serveurs de destination) :
global
log /dev/log local0
maxconn 50000
user haproxy
group haproxy
daemon
stats socket /run/haproxy/admin.sock mode 660 level admin
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
errorfile 400 /etc/haproxy/errors/400.http
errorfile 503 /etc/haproxy/errors/503.http
frontend http_front
bind *:80
bind *:443 ssl crt /etc/haproxy/certs/site.pem
http-request redirect scheme https unless { ssl_fc }
default_backend web_servers
backend web_servers
balance roundrobin
option httpchk GET /health
http-check expect status 200
cookie SERVERID insert indirect nocache
server web1 192.168.1.10:80 check cookie web1
server web2 192.168.1.11:80 check cookie web2
server web3 192.168.1.12:80 check cookie web3
Validez toujours la configuration avant de redémarrer le service :
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl reload haproxy
Terminaison SSL et Sécurité
La terminaison SSL décharge le traitement cryptographique des serveurs backend vers HAProxy. Créez le fichier PEM combiné et configurez les paramètres de sécurité :
# Combiner le certificat et la clé privée
cat /etc/letsencrypt/live/exemple.com/fullchain.pem /etc/letsencrypt/live/exemple.com/privkey.pem > /etc/haproxy/certs/exemple.pem
chmod 600 /etc/haproxy/certs/exemple.pem
Ajoutez les paramètres de sécurité SSL dans la section global pour désactiver les protocoles obsolètes et appliquer les en-têtes de sécurité :
global
ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
tune.ssl.default-dh-param 2048
frontend http_front
http-response set-header Strict-Transport-Security "max-age=31536000; includeSubDomains"
http-response set-header X-Content-Type-Options nosniff
http-response set-header X-Frame-Options DENY
Équilibrage de Charge Avancé et Limitation de Débit
HAProxy offre plusieurs algorithmes d’équilibrage adaptés à différents scénarios. Le roundrobin distribue les requêtes de manière équitable, leastconn envoie le trafic au serveur le moins chargé et source assure l’affinité par IP :
backend api_servers
balance leastconn
option httpchk GET /api/health
http-check expect status 200
# Limitation de débit : 50 requêtes par seconde par IP
stick-table type ip size 100k expire 30s store http_req_rate(10s)
http-request track-sc0 src
http-request deny deny_status 429 if { sc_http_req_rate(0) gt 500 }
server api1 192.168.1.20:8080 check weight 100
server api2 192.168.1.21:8080 check weight 100
server api3 192.168.1.22:8080 check weight 50 backup
Activez la page de statistiques pour surveiller les performances en temps réel :
listen stats
bind *:8404
stats enable
stats uri /stats
stats refresh 10s
stats admin if LOCALHOST
Haute Disponibilité avec Keepalived
Pour éliminer le point unique de défaillance de HAProxy, déployez Keepalived sur deux nœuds avec une IP virtuelle partagée (VIP). Installez et configurez Keepalived sur les deux serveurs :
sudo apt install keepalived
Configuration du nœud primaire (/etc/keepalived/keepalived.conf) :
vrrp_script chk_haproxy {
script "/usr/bin/killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass secret_password
}
virtual_ipaddress {
192.168.1.100/24
}
track_script {
chk_haproxy
}
}
Sur le nœud secondaire, changez state en BACKUP et priority en 100. Lorsque HAProxy s’arrête sur le nœud primaire, Keepalived détecte la défaillance et bascule la VIP vers le nœud secondaire en quelques secondes, assurant la continuité du service.