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.

Articles Connexes