Einführung
In diesem Lab lernen Sie die Grundlagen der Lastverteilung mit HAProxy kennen.
Stellen Sie sich eine Bank mit nur einem Schalter vor. Die Warteschlange wird sehr lang, und die Kunden werden ungeduldig. Um das Problem zu lösen, eröffnet die Bank mehrere Schalter. Nun brauchen Sie jedoch eine Person am Eingang, die jeden Kunden zum nächsten verfügbaren Schalter weiterleitet.
In diesem Szenario gilt:
- Der Bankmanager ist der Load Balancer (HAProxy).
- Die Schalter sind die Backend-Server (simulierte Webserver).
- Die Kunden sind der Webdatenverkehr.
Sie erstellen diese Umgebung unter Linux. Dazu richten Sie zwei simulierte Webserver ein und konfigurieren HAProxy so, dass der Datenverkehr mithilfe von Round Robin zwischen ihnen aufgeteilt wird. Round Robin ist einer der einfachsten Algorithmen zur Lastverteilung.
Round Robin eignet sich als grundlegendes Denkmodell, weil damit der Zweck eines Load Balancers deutlich wird: Aufeinanderfolgende Anfragen werden auf mehrere funktionierende Backends verteilt, anstatt alle Anfragen an einen einzigen Rechner zu senden.
Am Ende dieses Labs können Sie:
- Einfache Python-Webserver starten.
- HAProxy so konfigurieren, dass es Datenverkehr annimmt (Frontend) und an Server weiterleitet (Backend).
- Lastverteilung in der Praxis beobachten.
Terminals vorbereiten
Um einen Load Balancer zu testen, benötigen wir zunächst etwas, dessen Last verteilt werden kann. Dazu müssen zwei getrennte Webserver gleichzeitig laufen. Ein laufender Server belegt das Terminal, weil er weiterläuft, bis Sie ihn stoppen. Deshalb können Sie im selben Fenster keine neuen Befehle eingeben.
Öffnen Sie daher zusätzliche Terminal-Tabs. Stellen Sie sich das so vor, als würden Sie in Ihrem Webbrowser mehrere Tabs öffnen, um gleichzeitig verschiedene Websites anzusehen.
Dieser Schritt trennt die Rollen im System. Die Python-Server simulieren die Anwendungsebene, während das Hauptterminal Ihre Steuerungsebene für den Load Balancer bleibt.
Derzeit ist ein Terminal geöffnet (Terminal). Öffnen Sie zwei weitere:
- Suchen Sie in der Terminaloberfläche das Symbol + (Pluszeichen).
- Klicken Sie zweimal darauf, um Terminal 1 und Terminal 2 zu öffnen.
Verwenden Sie die Terminals folgendermaßen:
- Terminal: Ihre Steuerzentrale zum Konfigurieren von HAProxy.
- Terminal 1: Hier läuft Server 1.
- Terminal 2: Hier läuft Server 2.
Server 1 starten
Starten Sie nun den ersten „Schalter“ (Server 1). Statt umfangreiche Webserver-Software zu installieren, verwenden Sie ein praktisches, in Python integriertes Werkzeug, das jeden Ordner in eine Website umwandelt.
Wechseln Sie zu Terminal 1.
Wechseln Sie zuerst in den für Server 1 vorbereiteten Ordner.
cd ~/project/server1
Starten Sie jetzt den Server. Lassen Sie ihn auf Port 8001 hören. Stellen Sie sich einen Port wie eine Wohnungsnummer vor: Der Computer ist das Gebäude, und Port 8001 ist die bestimmte Tür, hinter der Server 1 erreichbar ist.
python3 -m http.server 8001
Sie sehen die Meldung Serving HTTP on 0.0.0.0 port 8001. Das bedeutet, dass der Server läuft und auf Besucher wartet. Dieses Terminal ist nun „belegt“. Geben Sie hier keine weiteren Befehle ein.
Server 2 starten
Starten Sie nun den zweiten „Schalter“ (Server 2), damit die Arbeit verteilt werden kann.
Wechseln Sie zu Terminal 2.
Wechseln Sie in den Ordner für Server 2.
cd ~/project/server2
Starten Sie diesen Server auf einem anderen Port, nämlich 8002. Port 8001 können Sie nicht verwenden, weil Server 1 ihn bereits verwendet. Zwei Familien können nicht in derselben Wohnung 8001 wohnen.
python3 -m http.server 8002
Jetzt laufen zwei unabhängige Webserver. Einer gibt „Response from Server 1“ zurück (auf Port 8001), der andere „Response from Server 2“ (auf Port 8002).
Frontend konfigurieren
Da die Server bereit sind, konfigurieren Sie nun den „Bankmanager“ (HAProxy), damit er den Datenverkehr an sie weiterleitet.
Hier beginnt die Trennung zwischen Frontend und Backend. Ein Frontend beschreibt, wie Clients bei HAProxy ankommen. Ein Backend beschreibt den Server-Pool, der die Anfragen tatsächlich verarbeitet.
Wechseln Sie zurück zu Terminal.
Beginnen Sie mit einer neuen Konfiguration, indem Sie die alte Konfiguration sichern und eine neue Datei erstellen.
sudo mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
sudo nano /etc/haproxy/haproxy.cfg
Kopieren Sie den folgenden Text und fügen Sie ihn im Editor ein. Damit definieren Sie das Frontend. Das Frontend ist die öffentliche Schnittstelle des Load Balancers – hier kommen die Kunden (Benutzer) an.
global
log /dev/log local0
log /dev/log local1 notice
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend http_front
bind *:80
default_backend http_back
Wichtige Teile:
bind *:80: Damit weist HAProxy an, auf Port 80 zu lauschen. Port 80 ist der Standardport für Webdatenverkehr (HTTP). Wenn Sie in Ihrem Browser einen Websitenamen ohne Port eingeben, verwendet der Browser Port 80.default_backend http_back: Damit weisen Sie HAProxy an: „Wenn hier jemand ankommt, leite die Anfrage an die Gruppehttp_backweiter.“
Diese Bezeichnung ist wichtig, weil eine HAProxy-Konfiguration im Wesentlichen eine Karte für den Datenverkehr ist. Frontends nehmen Verbindungen entgegen, und Backends stellen die möglichen Ziele für diese Verbindungen dar.
Speichern Sie die Datei (Ctrl+O, Enter). Sie können sie geöffnet lassen, wenn Sie möchten. Besser ist jedoch, die Datei zu speichern und den Editor mit (Ctrl+X) zu beenden, damit Sie Ihren Fortschritt Schritt für Schritt überprüfen können.
Backend konfigurieren
Jetzt definieren Sie die Gruppe der Worker, das Backend.
Wenn Sie die Konfigurationsdatei geschlossen haben, öffnen Sie sie erneut:
sudo nano /etc/haproxy/haproxy.cfg
Fügen Sie die folgenden Zeilen am Ende der Datei ein:
backend http_back
server server1 127.0.0.1:8001 check
server server2 127.0.0.1:8002 check
Was haben Sie gerade getan?
backend http_back: Sie haben die Gruppe mit dem Namenhttp_backerstellt.server server1 ...: Sie haben den ersten Worker (Server 1) unter der Adresse127.0.0.1:8001registriert (localhost, Port 8001).server server2 ...: Sie haben den zweiten Worker (Server 2) unter127.0.0.1:8002registriert.check: Diese Option ist entscheidend. Sie weist den Manager an, regelmäßig zu prüfen, ob der Worker tatsächlich erreichbar und funktionsfähig ist. Wenn ein Server ausfällt, sendet HAProxy keine Anfragen mehr an ihn.
Speichern Sie die Datei (Ctrl+O, Enter) und beenden Sie den Editor (Ctrl+X).
Lastverteilung überprüfen
Wie soll der Manager entscheiden, wer den nächsten Kunden erhält? Die häufigste Methode ist Round Robin. Dabei wird einfach der Reihe nach gewechselt.
- Kunde 1 -> Server 1
- Kunde 2 -> Server 2
- Kunde 3 -> Server 1
- ... und so weiter.
Machen Sie dieses Verhalten in der Konfiguration ausdrücklich fest. Öffnen Sie die Konfigurationsdatei ein letztes Mal:
sudo nano /etc/haproxy/haproxy.cfg
Suchen Sie den Abschnitt backend http_back, den Sie gerade hinzugefügt haben, und fügen Sie die Direktive balance ein. Der Abschnitt sollte anschließend so aussehen:
backend http_back
balance roundrobin
server server1 127.0.0.1:8001 check
server server2 127.0.0.1:8002 check
Hinweis: Die Einrückung (Leerzeichen am Zeilenanfang) ist zwar hauptsächlich für die Lesbarkeit wichtig, HAProxy ist in diesem Punkt jedoch tolerant. Halten Sie die Konfiguration trotzdem übersichtlich.
Speichern Sie die Datei (Ctrl+O, Enter) und beenden Sie den Editor (Ctrl+X).
HAProxy neu laden und testen
Die Konfiguration ist fertig, aber HAProxy verwendet sie noch nicht. Laden Sie den Dienst neu, damit die Änderungen angewendet werden.
sudo service haproxy restart
Jetzt kommt der entscheidende Moment. Verwenden Sie den Befehl curl. Stellen Sie sich curl als Webbrowser ohne grafische Oberfläche vor: Der Befehl ruft eine Webseite ab und zeigt deren Text auf dem Bildschirm an.
Stellen Sie eine Verbindung zu localhost (Ihrem Rechner) über den Standardport 80 her, auf dem HAProxy lauscht.
Führen Sie den folgenden Befehl mehrmals aus:
curl localhost
Sie sollten „Response from Server 1“ sehen. Führen Sie den Befehl erneut aus:
curl localhost
Jetzt sollten Sie „Response from Server 2“ sehen.
Wenn Sie die Abfolge schnell beobachten möchten, können Sie diese Schleife ausführen. Sie sendet vier Anfragen direkt hintereinander an den Server:
for i in {1..4}; do
curl localhost
echo
done
Die Ausgaben sollten sich gleichmäßig abwechseln: 1, 2, 1, 2.
Damit ist bewiesen, dass Ihr Load Balancer funktioniert. Er nimmt Ihre Anfragen auf Port 80 entgegen und verteilt die Arbeit gleichmäßig zwischen Port 8001 und Port 8002.
Zusammenfassung
In diesem Lab haben Sie erfolgreich einen Webcluster mit Lastverteilung aufgebaut.
Das haben Sie erreicht:
- Simulierte Backends: Sie haben mit Python zwei funktionierende Webserver auf unterschiedlichen Ports (8001, 8002) erstellt.
- Frontend konfiguriert: Sie haben HAProxy angewiesen, auf dem standardmäßigen Webport (80) zu lauschen.
- Backend konfiguriert: Sie haben Ihre beiden Server als Worker registriert.
- Round Robin: Sie haben eine faire Richtlinie eingerichtet, die den Datenverkehr abwechselnd verteilt.
Dies ist dieselbe Architektur, die auch große Websites verwenden, um Millionen von Benutzern zu bedienen – hier lediglich in kleinerem Maßstab.



