Server Verwaltung · 4 min read · Nov 12, 2025

Lastverteilung von Webservern mit HAProxy auf Ubuntu 14.04

Was ist HAProxy?

HAProxy (High Availability Proxy) ist ein Open-Source-Lastenausgleich, der jeden TCP-Dienst ausbalancieren kann. HAProxy ist eine kostenlose, sehr schnelle und zuverlässige Lösung, die Lastenausgleich, hohe Verfügbarkeit und Proxy-Dienste für TCP- und HTTP-basierte Anwendungen bietet. Es eignet sich besonders gut für Websites mit sehr hohem Traffic und betreibt viele der meistbesuchten Websites der Welt.

Seit seiner Existenz ist es zum De-facto-Standard für Open-Source-Lastenausgleich geworden. Obwohl es sich nicht selbst bewirbt, wird es weit verbreitet genutzt. Unten ist ein einfaches Diagramm, wie die Einrichtung aussieht:

Installation von HAProxy

Ich benutze Ubuntu 14.04 und installiere es mit:

apt-get install haproxy

Sie können die Version überprüfen mit:

haproxy -v

Wir müssen HAProxy aktivieren, damit es durch das Init-Skript /etc/default/haproxy gestartet wird. Setzen Sie die ENABLED-Option auf 1 wie folgt:

ENABLED=1

Um zu überprüfen, ob diese Änderung korrekt vorgenommen wurde, führen Sie das Init-Skript von HAProxy ohne Parameter aus. Sie sollten Folgendes sehen:

$ service haproxy 
 reload   restart  start    status   stop

HAProxy ist jetzt installiert. Lassen Sie uns nun eine Einrichtung erstellen, in der wir 2 (zwei) Apache-Webserver-Instanzen und 1 (eine) HAProxy-Instanz haben. Unten sind die Einrichtungsinformationen:

Wir werden drei Systeme verwenden, die virtuell über VirtualBox erstellt wurden: Instanz 1 - Lastenausgleich Hostname: haproxy OS: Ubuntu Private IP: 192.168.205.15 Instanz 2 - Webserver 1 Hostname: webser01 OS: Ubuntu mit LAMP Private IP: 192.168.205.16 ** Instanz 2 - Webserver 2 Hostname: webserver02 OS: Ubuntu mit LAMP Private IP: 192.168.205.17

Hier ist das Diagramm, wie die Einrichtung aussieht: Lassen Sie uns nun HAProxy konfigurieren.

Konfiguration von HAProxy

Sichern Sie die Originaldatei, indem Sie sie umbenennen:

mv /etc/haproxy/haproxy.cfg{,.original}

Wir erstellen unsere eigene haproxy.cfg-Datei. Verwenden Sie Ihren bevorzugten Texteditor, um die Datei /etc/haproxy/haproxy.cfg wie folgt zu erstellen:

global
        log /dev/log   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout     5000
        clitimeout     50000
        srvtimeout     50000

listen webfarm 0.0.0.0:80
    mode http
    stats enable
    stats uri /haproxy?stats
    balance roundrobin
    option httpclose
    option forwardfor
    server webserver01 192.168.205.16:80 check
    server webserver02 192.168.205.17:80 check

Erklärung:

global
        log /dev/log   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

Die Log-Direktive erwähnt einen Syslog-Server, an den Protokollnachrichten gesendet werden.
Die maxconn-Direktive gibt die Anzahl der gleichzeitigen Verbindungen an der Front-End an. Der Standardwert beträgt 2000 und sollte entsprechend der Konfiguration Ihres Systems angepasst werden.
Die Benutzer- und Gruppendirektiven ändern den HAProxy-Prozess auf den angegebenen Benutzer/die angegebene Gruppe. Diese sollten nicht geändert werden.

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout     5000
        clitimeout     50000
        srvtimeout     50000

Der obige Abschnitt enthält die Standardwerte. Die Option redispatch aktiviert die Sitzungsumverteilung im Falle von Verbindungsfehlern. Die Sitzungsbindung wird also überschrieben, wenn eine Webserver-Instanz ausfällt.
Die retries-Direktive legt die Anzahl der Wiederholungen fest, die bei einer Webserver-Instanz nach einem Verbindungsfehler durchgeführt werden sollen.
Die Werte, die geändert werden müssen, sind die verschiedenen Timeout-Direktiven. Die contimeout-Option gibt die maximale Zeit an, die gewartet werden soll, damit ein Verbindungsversuch zu einer Webserver-Instanz erfolgreich ist.
Die clitimeout- und srvtimeout-Direktiven gelten, wenn der Client oder Server erwartet wird, Daten während des TCP-Prozesses zu bestätigen oder zu senden. HAProxy empfiehlt, die Client- und Server-Timeouts auf denselben Wert zu setzen.


listen webfarm 0.0.0.0:80
    mode http
    stats enable
    stats uri /haproxy?stats
    balance roundrobin
    option httpclose
    option forwardfor
    server webserver01 192.168.205.16:80 check
    server webserver02 192.168.205.17:80 check

Der obige Block enthält die Konfiguration für sowohl das Frontend als auch das Backend. Wir konfigurieren HAProxy, um auf Port 80 für webfarm zu hören, was nur ein Name zur Identifizierung einer Anwendung ist.
Die stats-Direktiven aktivieren die Verbindungsstatistikseite. Diese Seite kann mit der im stats uri genannten URL aufgerufen werden, in diesem Fall ist es http://192.168.205.15/haproxy?stats, eine Demo dieser Seite kann hier angesehen werden.
Die balance-Direktive gibt den zu verwendenden Lastenausgleichsalgorithmus an. Verfügbare Algorithmusoptionen sind:

  • Round Robin (roundrobin),
  • Statischer Round Robin (static-rr),
  • Wenigste Verbindungen (leastconn),
  • Quelle (source),
  • URI (uri) und
  • URL-Parameter (url_param).

Informationen zu jedem Algorithmus können aus der offiziellen Dokumentation abgerufen werden.

Die server-Direktive erklärt einen Backend-Server, die Syntax lautet:

server  [:port] [param*]

Der Name, den wir hier angeben, erscheint in Protokollen und Warnungen. Es gibt einige weitere Parameter, die von dieser Direktive unterstützt werden, und wir werden den check-Parameter in diesem Artikel verwenden. Die check-Option aktiviert die Gesundheitsprüfungen der Webserver-Instanz, andernfalls wird die Webserver-Instanz immer als verfügbar betrachtet.

Sobald Sie mit der Konfiguration fertig sind, starten Sie den HAProxy-Dienst:

sudo service haproxy start

Testen von Lastenausgleich und Failover

Wir werden den Servernamen in die Standarddatei index.html einfügen, die standardmäßig unter /var/www/index.html zu finden ist.

Auf der Instanz 2 - Webserver 1 (webserver01 mit IP- 192.168.205.16) fügen Sie die folgende Zeile hinzu:

sudo sh -c "echo 

Hostname: webserver01 (192.168.205.16)

>> /var/www/index.html"

Auf der Instanz 3 - Webserver 2 (webserver02 mit IP- 192.168.205.17) fügen Sie die folgende Zeile hinzu:

sudo sh -c "echo 

Hostname: webserver02 (192.168.205.17)

>> /var/www/index.html"

Öffnen Sie nun den Webbrowser auf dem lokalen Computer und rufen Sie die HAProxy-IP auf, d.h. http://192.168.205.15

Jedes Mal, wenn Sie den Tab aktualisieren, sehen Sie, dass die Last auf jeden Webserver verteilt wird. Unten ist ein Screenshot meines Browsers:

Beim ersten Besuch von http://192.168.205.15 erhalte ich:

Und beim zweiten Mal, d.h. wenn ich die Seite aktualisiere, erhalte ich:

Sie können auch die HAProxy-Statistiken überprüfen, indem Sie http://192.168.205.15/haproxy?stats besuchen.

Es gibt noch mehr, was Sie mit dieser Einrichtung tun können. Einige Ideen sind:

  • Nehmen Sie einen oder beide Webserver offline, um zu testen, was passiert, wenn Sie auf HAProxy zugreifen.
  • Konfigurieren Sie HAProxy, um eine benutzerdefinierte Wartungsseite bereitzustellen.
  • Konfigurieren Sie die Weboberfläche, damit Sie die HAProxy-Statistiken visuell überwachen können.
  • Ändern Sie den Scheduler in etwas anderes als Round-Robin.
  • Konfigurieren Sie Priorisierungen/Gewichte für bestimmte Server.

Das ist alles!

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.