HAProxy Load Balancer: Konfiguration für Hochverfügbarkeit

HAProxy ist der branchenführende Open-Source Load Balancer für TCP- und HTTP-basierte Anwendungen. In dieser Anleitung konfigurieren Sie HAProxy für Produktionsumgebungen mit SSL-Terminierung, Health Checks, Sticky Sessions und Hochverfügbarkeit.

Installation und Grundkonfiguration

Installieren Sie HAProxy aus dem offiziellen PPA für die neueste stabile Version:

sudo apt update
sudo apt install haproxy
sudo systemctl enable haproxy
haproxy -v

Erstellen Sie die Hauptkonfiguration in /etc/haproxy/haproxy.cfg:

global
    log /dev/log local0
    maxconn 4096
    user haproxy
    group haproxy
    daemon
    ssl-default-bind-options ssl-min-ver TLSv1.2

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    timeout connect 5000ms
    timeout client  50000ms
    timeout server  50000ms
    retries 3

Diese globalen Einstellungen begrenzen die maximale Anzahl gleichzeitiger Verbindungen und legen sichere TLS-Standards fest. Die Timeout-Werte sind für typische Webanwendungen optimiert.

Backend-Server und Health Checks

Definieren Sie Frontend und Backend mit HTTP-Health-Checks:

frontend web_front
    bind *:80
    bind *:443 ssl crt /etc/haproxy/certs/domain.pem
    redirect scheme https if !{ 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:8080 check cookie web1 inter 3s fall 3 rise 2
    server web2 192.168.1.11:8080 check cookie web2 inter 3s fall 3 rise 2
    server web3 192.168.1.12:8080 check cookie web3 inter 3s fall 3 rise 2

Der Parameter inter 3s definiert das Health-Check-Intervall, fall 3 markiert einen Server nach drei fehlgeschlagenen Checks als offline und rise 2 bringt ihn nach zwei erfolgreichen Checks wieder online. Die Cookie-basierte Session-Affinität stellt sicher, dass Benutzer beim gleichen Backend-Server bleiben.

Rate Limiting und Sicherheit

Schützen Sie Ihre Anwendung vor übermäßigem Datenverkehr mit Rate Limiting:

frontend web_front
    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 100 }

Fügen Sie Security-Header für zusätzlichen Schutz hinzu:

    http-response set-header X-Frame-Options SAMEORIGIN
    http-response set-header X-Content-Type-Options nosniff
    http-response set-header Strict-Transport-Security "max-age=31536000; includeSubDomains"

Überprüfen Sie die Konfiguration vor dem Neustart mit haproxy -c -f /etc/haproxy/haproxy.cfg und aktivieren Sie die HAProxy-Statistikseite für die Überwachung.

Hochverfügbarkeit mit Keepalived

Für einen ausfallsicheren Betrieb konfigurieren Sie Keepalived mit einer virtuellen IP:

sudo apt install keepalived

Erstellen Sie /etc/keepalived/keepalived.conf auf dem primären Server:

vrrp_script check_haproxy {
    script "/usr/bin/systemctl is-active haproxy"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    virtual_ipaddress {
        192.168.1.100/24
    }
    track_script {
        check_haproxy
    }
}

Auf dem sekundären Server ändern Sie state auf BACKUP und priority auf 90. Das Health-Check-Skript überwacht den HAProxy-Dienst und senkt die Priorität, wenn HAProxy ausfällt, sodass der Backup-Server die virtuelle IP übernimmt.