Forgot your password?

Forgot your username?

All about IT, Web and Development.
By users for users.

HAProxy Load Balancer mit Ubuntu / Debian



Mit einem Load Balancer lassen sich Anfragen an eine Adresse beispielsweise an mehrere Webserver verteilen. Hierdurch lassen sich Anwendungen horizontal skalieren bzw. für mehr Sicherheit durch Redundanz sorgen.



HAProxy ist eines der bekanntesten Vertreter. Hiermit lassen sich TCP Verbindungen verteilen, steuern und absichern.


Infrastruktur


Um die Konfiguration anschaulicher zu beschreiben findet sich hier ein Schema der Demoumgebung.



Installation


Unter Debian / Ubuntu erfolgt die Installation über Apt.

sudo apt-get install haproxy


Konfiguration


Zunächst wird eingestellt, dass HAProxy per Initskript gestartet wird. Dies vereinfacht die Verwaltung und Kontrolle.

Hierzu die Datei /etc/default/haproxy editieren.

# Set ENABLED to 1 if you want the init script to start haproxy.
ENABLED=1



Grundeinstellungen


Die eigentliche Konfigurationsdatei /etc/haproxy/haproxy.cfg steuert das Verhalten von HAProxy unter Debian bzw. Ubuntu. Hier lassen sich die einzelnen Cluster und Hosts eintragen.
In der Standardeinstellung sollte der Kopf der Datei wie folgt aussehen.

global
        maxconn 4096
        user haproxy
        group haproxy
        daemon
 
defaults
        log     global
        mode    tcp
        retries 3
        option  redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

        stats enable
        stats auth admin:admin


Hierbei sind die zwei stats Optionen interessant. Damit können später über ein integriertes Webinterface Daten zur Lastverteilung auf dem Load Balancer eingesehen werden.


Cluster anlegen


Nun legen wir gemäß des oben abgebildeten Schemas eine Definition in der Datei an.

listen Cluster *:80
     balance roundrobin
     server Webserver1 192.168.1.11:80 check rise 3 fall 5
     server Webserver2 192.168.1.12:80 check rise 3 fall 5
     server Webserver3 192.168.1.13:80 check rise 3 fall 5


Somit lauscht HAProxy auf Port 80 auf eingehende Verbindungen.

Hier eine kurze Erklärung der verwendeten Optionen.

  • check - Server wird überwacht

  • rise 3 - Server wird nach 3 erfolgreichen Healthchecks als up deklariert

  • fall 5 - Server wird nach 5 fehlgeschlagenen Healthchecks als down deklariert



Backup / Standby Server


Mit HAProxy besteht auch die Möglichkeit einen Server als Backup zu deklarieren. Dieser wird aktiv, wenn der Healthcheck eines anderen Hosts fehlschlägt.

Nehmen wir an der Host Webserver 3 wird als Backup verwendet. Die Konfiguration würde dann wie folgt aussehen.

listen Cluster *:80
     balance roundrobin
     server Webserver1 192.168.1.11:80 check rise 3 fall 5
     server Webserver2 192.168.1.12:80 check rise 3 fall 5
     server Webserver3 192.168.1.13:80 check rise 3 fall 5 backup



Konfiguration übernehmen


Die Konfiguration wird durch ein Neustart des Dienstes übernommen.

sudo service haproxy restart

Damit HAProxy nun bei jedem Systemstart ausgeführt wird, verwenden wir den Befehl update-rc.d.

sudo update-rc.d haproxy defaults


Statistik einsehen


Die Statistiken von HAProxy lassen sich unter der IP-Adresse des Loadbalancers einsehen.

http://192.168.1.120/haproxy?stats

Wie in der Konfigurationsdatei angegeben erfolgt die Authentifizierung über den Benutzer "admin" mit dem Passwort "admin".



Möchte man die Statistik z.B. über Nagios auswerten, besteht auch die Option die Logdaten von HAProxy manuell abzufragen.


Lasttests


Um die Lastverteilung zu prüfen kann man das Tool siege verwenden. In unserem Setup können wir den Loadbalancer mit nachfolgendem Befehl mit 200 gleichzeitigen Sessions befeuern.

siege -c200 http://192.168.1.120

Über das Webinterface von HAProxy sieht man dann sehr gut die Verteilung der Anfragen bzw. Sessions.


Hochverfügbarkeit / Redundanz


Mit nur einem Loadbalancer entsteht ein Single-Point-of-Failure. Daher werden diese in der Regel doppelt ausgelegt.
Um dieses Problem zu Umgehen kann man die Loadbalancer mit Keepalived in ein Cluster schalten.


Fazit


HAProxy ist ein sehr flexibler Dienst zur Realisierung eines Loadbalancers. Die Konfiguration gestaltet sich recht einfach und ist gut strukturiert bzw. dokumentiert.

Michael Kostka

Fachinformatiker / Systemintegration
Ich schreibe hier regelmäßig zu den Themen Android, Web, Linux und Hardware.

Raspberry Pi Starter Kit
DataCloud

Leave a comment

I have read the privacy policy and agree to electronically store and process my input data to answer the request.