Was ist HAProxy?
HAProxy (High Availability Proxy) ist ein Open-Source-Load-Balancer, der jeden TCP-Dienst laden kann. HAProxy ist eine kostenlose, sehr schnelle und zuverlässige Lösung, die Lastenausgleich, Hochverfügbarkeit und Proxying für TCP- und HTTP-basierte Anwendungen bietet. Es eignet sich besonders gut für Websites mit sehr hohem Datenverkehr und betreibt viele der meistbesuchten der Welt.
Seit seiner Existenz ist es der De-facto-Standard für Open-Source-Load-Balancer geworden. Es wirbt zwar nicht für sich selbst, ist aber weit verbreitet. Unten ist ein grundlegendes Diagramm, wie das Setup aussieht:
Installation von HAProxy
Ich verwende Ubuntu 14.04 und installiere es per:
apt-get install haproxy
Sie können die Version folgendermaßen überprüfen:
haproxy -v
Wir müssen HAProxy aktivieren, damit es durch das Init-Skript /etc/default/haproxy gestartet werden kann. Setzen Sie die Option ENABLED auf 1 als:
ENABLED=1
Um zu überprüfen, ob diese Änderung korrekt durchgeführt wurde, führen Sie das Init-Skript von HAProxy ohne Parameter aus. Sie sollten Folgendes sehen:
$ service haproxy <press_tab_key>
reload restart start status stop
HAProxy ist jetzt installiert. Lassen Sie uns nun ein Setup erstellen, in dem wir 2 (zwei) Apache Web Server-Instanzen und 1 (eine) HAProxy-Instanz haben. Nachfolgend finden Sie die Einrichtungsinformationen:
Wir werden drei Systeme verwenden, die virtuell durch VirtualBox erzeugt werden:
Instanz 1 – Load Balancer
Hostname:haproxy
Betriebssystem:Ubuntu
Private IP:192.168.205.15
Instanz 2 – Webserver 1
Hostname:webser01
Betriebssystem:Ubuntu mit LAMP
Private IP:192.168.205.16
Instanz 2 – Webserver 2
Hostname:webserver02
Betriebssystem:Ubuntu mit LAMP
Private IP:192.168.205.17
Hier ist das Diagramm, wie das Setup aussieht:
Lassen Sie uns nun HAProxy konfigurieren.
Konfigurieren von HAProxy
Sichern Sie die Originaldatei, indem Sie sie umbenennen:
mv /etc/haproxy/haproxy.cfg{,.original}
Wir erstellen unsere eigene haproxy.cfg-Datei. Erstellen Sie mit Ihrem bevorzugten Texteditor die Datei /etc/haproxy/haproxy.cfg als:
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 Log-Meldungen gesendet werden.
Die maxconn-Direktive gibt die Anzahl gleichzeitiger Verbindungen auf dem Frontend an. Der Standardwert ist 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 ermöglicht die Sitzungsumverteilung bei Verbindungsabbrüchen. Die Session-Stickness wird also außer Kraft gesetzt, wenn eine Webserverinstanz ausfällt.
Die Anweisung retries legt die Anzahl der Wiederholungen fest, die auf einer Webserverinstanz nach einem Verbindungsfehler durchgeführt werden sollen.
Die zu ändernden Werte sind die verschiedenen Timeout-Direktiven. Die Option contimeout gibt die maximale Zeit an, die auf einen erfolgreichen Verbindungsversuch zu einer Webserverinstanz gewartet werden soll.
Clitimeout und srvtimeout gelten, wenn erwartet wird, dass der Client oder Server während des TCP-Prozesses Daten bestätigt oder sendet. HAProxy empfiehlt, die Client- und Server-Timeouts auf denselben Wert einzustellen.
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 Konfigurationen sowohl für das Frontend als auch für das Backend. Wir konfigurieren HAProxy so, dass es auf Port 80 nach Webfarm lauscht, was nur ein Name zur Identifizierung einer Anwendung ist.
Die stats-Direktiven aktivieren die Seite mit den Verbindungsstatistiken. Diese Seite kann mit der in stats uri genannten URL angezeigt werden, in diesem Fall also http://192.168.205.15/haproxy?stats eine Demo dieser Seite kann hier angezeigt werden.
Die balance-Anweisung spezifiziert den Lastenausgleich Algorithmus zu verwenden. Verfügbare Algorithmusoptionen sind:
- Round Robin (Roundrobin),
- Statischer Round Robin (statisch-rr),
- Geringste Verbindungen (leastconn),
- Quelle (Quelle),
- URI (uri) und
- URL-Parameter (url_param).
Informationen zu jedem Algorithmus können der offiziellen Dokumentation entnommen werden.
Die server-Direktive deklariert einen Backend-Server, die Syntax ist:
server <server_name> <server_address>[:port] [param*]
Der Name, den wir hier erwähnen, wird in Protokollen und Warnungen angezeigt. Es gibt einige weitere Parameter, die von dieser Anweisung unterstützt werden, und wir verwenden in diesem Artikel den Prüfparameter. Die Check-Option aktiviert Zustandsprüfungen auf 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 Load-Balancing und Failover
Wir werden den Servernamen sowohl in der Standarddatei index.html anhängen, die sich standardmäßig unter /var/www/index.html
befindetFügen Sie auf Instanz 2 – Webserver 1 (webserver01 mit IP-192.168.205.16) die folgende Zeile an:
sudo sh -c "echo \<h1\>Hostname: webserver01 \(192.168.205.16\)\<\/h1\> >> /var/www/index.html"
Fügen Sie auf Instanz 3 – Webserver 2 (webserver02 mit IP-192.168.205.17) die folgende Zeile an:
sudo sh -c "echo \<h1\>Hostname: webserver02 \(192.168.205.17\)\<\/h1\> >> /var/www/index.html"
Öffnen Sie nun den Webbrowser auf dem lokalen Computer und durchsuchen Sie die Haproxy-IP, dh http://192.168.205.15
Jedes Mal, wenn Sie die Registerkarte aktualisieren, sehen Sie, dass die Last auf jeden Webserver verteilt wird. Unten ist ein Screenshot meines Browsers:
Wenn ich zum ersten Mal http://192.168.205.15 besuche, erhalte ich:
Und zum zweiten Mal, d.h. wenn ich die Seite aktualisiere, bekomme ich:
Sie können die Haproxy-Statistiken auch überprüfen, indem Sie http://192.168.205.15/haproxy?stats
besuchenEs gibt noch mehr, was Sie mit diesem Setup tun können. Einige Ideen beinhalten:
- Schalten 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 Webschnittstelle, damit Sie die HAProxy-Statistiken visuell überwachen können
- Ändern Sie den Planer auf etwas anderes als Round-Robin
- Priorisierung/Gewichtung für bestimmte Server konfigurieren
Das ist alles!