Die Übersetzung des Artikels wurde im Vorfeld des Starts des Kurses vorbereitet

Lastverteilung ist eine gängige Lösung für das horizontale Skalieren von Webanwendungen über mehrere Hosts, die den Nutzern einen einzigen Zugangspunkt zum Dienst bietet. ist eines der beliebtesten Lastverteilungsprogramme mit Open-Source-Code, das auch hohe Verfügbarkeit und Proxy-Funktionalität bietet.
HAProxy zielt darauf ab, die Ressourcennutzung zu optimieren, die Bandbreite zu maximieren, die Reaktionszeiten zu minimieren und eine Überlastung jeder einzelnen Ressource zu vermeiden. Es kann auf vielen Linux-Distributionen, wie CentOS 8, installiert werden, auf die wir in diesem Handbuch eingehen werden, sowie in Systemen und .

HAProxy eignet sich besonders gut für Websites mit sehr hohem Verkehrsaufkommen und wird daher häufig zur Steigerung der Zuverlässigkeit und Leistung von Webdienstkonfigurationen mit mehreren Servern eingesetzt. In diesem Handbuch werden die Schritte beschrieben, um HAProxy als Lastverteiler auf einem Cloud-Host CentOS 8 einzurichten, der den Verkehr dann an Ihre Webserver weiterleitet.
Um die besten Ergebnisse zu erzielen, sollten Sie mindestens zwei Webserver und einen Lastverteilungsserver haben. Auf den Webservern sollte mindestens ein grundlegender Webdienst, wie nginx oder httpd, ausgeführt werden, um die Lastverteilung zwischen ihnen zu überprüfen.
Installation von HAProxy auf CentOS 8
Da HAProxy eine schnell wachsende Open-Source-Anwendung ist, könnte die Version, die Ihnen in den Standardrepositories von CentOS zur Verfügung steht, nicht die aktuellste sein. Um die aktuelle Version zu erfahren, führen Sie den folgenden Befehl aus:
sudo yum info haproxyHAProxy bietet immer drei stabile Versionen zur Auswahl: die zwei neuesten unterstützten Versionen und eine dritte, ältere Version, die immer noch kritische Updates erhält. Sie können jederzeit die neueste stabile Version auf der HAProxy-Website überprüfen und dann entscheiden, mit welcher Version Sie arbeiten möchten.
In diesem Handbuch werden wir die neueste stabile Version 2.0 installieren, die zum Zeitpunkt der Erstellung des Handbuchs noch nicht in den Standard-Repositories verfügbar war. Sie müssen sie aus der Quelle installieren. Überprüfen Sie zunächst, ob Sie die erforderlichen Voraussetzungen für den Download und die Kompilierung des Programms erfüllt haben.
sudo yum install gcc pcre-devel tar make -yLaden Sie den Quellcode mit dem folgenden Befehl herunter. Sie können prüfen, ob eine neuere Version verfügbar ist auf .
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gzNachdem der Download abgeschlossen ist, entpacken Sie die Dateien mit dem folgenden Befehl:
tar xzvf ~/haproxy.tar.gz -C ~/Wechseln Sie in das entpackte Verzeichnis mit den Quellen:
cd ~/haproxy-2.0.7Kompilieren Sie dann das Programm für Ihr System:
make TARGET=linux-glibcUnd schließlich installieren Sie HAProxy selbst:
sudo make installJetzt ist HAProxy installiert, aber es sind einige zusätzliche Schritte erforderlich, um es zum Laufen zu bringen. Lassen Sie uns die Software und Dienste weiter konfigurieren.
Konfiguration von HAProxy für Ihren Server
Fügen Sie nun die folgenden Verzeichnisse und die Statistikdatei für die HAProxy-Protokolle hinzu:
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/statsErstellen Sie einen symbolischen Link für die Binärdateien, damit Sie HAProxy-Befehle als normaler Benutzer ausführen können:
sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxyWenn Sie den Proxy-Dienst im System als Dienst hinzufügen möchten, kopieren Sie die Datei haproxy.init aus examples in Ihr Verzeichnis /etc/init.d. Bearbeiten Sie die Datei, damit das Skript ausführbar wird, und laden Sie dann den systemd-Daemon neu:
sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reloadSie müssen auch der Dienstkonfiguration erlauben, beim Systemstart automatisch neu zu starten:
sudo chkconfig haproxy onZur weiteren Erleichterung wird auch empfohlen, einen neuen Benutzer für die Ausführung von HAProxy hinzuzufügen:
sudo useradd -r haproxyNach diesem Schritt können Sie die Nummer der installierten Version mit dem folgenden Befehl erneut überprüfen:
haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/In unserem Fall sollte die Version 2.0.7 sein, wie im obigen Beispielauszug gezeigt.
Schließlich ist die Firewall in CentOS 8 standardmäßig ziemlich restriktiv für dieses Projekt. Verwenden Sie die folgenden Befehle, um die erforderlichen Dienste zuzulassen und die Firewall neu zu laden:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reloadEinrichtung des Load Balancers
Die Konfiguration von HAProxy ist ein ziemlich einfacher Prozess. Im Wesentlichen müssen Sie HAProxy lediglich mitteilen, welche Verbindungen es abhören soll und wo diese weitergeleitet werden sollen.
Dies erfolgt durch die Erstellung einer Konfigurationsdatei /etc/haproxy/haproxy.cfg mit den definierten Einstellungen. Sie können die Optionen für die HAProxy-Konfiguration , wenn Sie mehr darüber erfahren möchten.
Lastverteilung auf der Transportebene (Schicht 4)
Lassen Sie uns mit der grundlegenden Konfiguration beginnen. Erstellen Sie eine neue Konfigurationsdatei, indem Sie vi den folgenden Befehl verwenden:
sudo vi /etc/haproxy/haproxy.cfgFügen Sie die folgenden Abschnitte in die Datei ein. Ersetzen Sie server_name durch das, was Ihre Server auf der Statistikseite ansprechen soll, und private_ip durch die privaten IP-Adressen der Server, an die Sie den Webverkehr weiterleiten möchten. Sie können die privaten IP-Adressen und im Tab Privatnetzwerk im Menü Netzwerk.
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
backend http_back
balance roundrobin
server server_name1 private_ip1:80 check
server server_name2 private_ip2:80 checkDies definiert den Lastenausgleich auf der Transportebene (Schicht 4) mit dem externen Namen http_front, der Port 80 abhört und den Verkehr dann an den Standard-Backend mit dem Namen http_back weiterleitet. Zusätzliche Statistiken /haproxy?stats verbinden die Statistikseite unter der angegebenen Adresse.
Verschiedene Lastverteilungsalgorithmen.
Die Angabe von Servern im Backend-Bereich ermöglicht es HAProxy, diese Server zur Lastverteilung gemäß dem Round-Robin-Algorithmus zu verwenden, wenn dies möglich ist.
Lastverteilungsalgorithmen werden verwendet, um zu bestimmen, an welchen Server im Backend jede Verbindung übergeben wird. Hier sind einige nützliche Optionen:
- Roundrobin: jeder Server wird abwechselnd entsprechend seinem Gewicht genutzt. Dies ist der gleichmäßigste und fairste Algorithmus, wenn die Bearbeitungszeiten der Server gleichmäßig verteilt sind. Dieser Algorithmus ist dynamisch, was es ermöglicht, das Gewicht des Servers zur Laufzeit anzupassen.
- Leastconn: Der Server mit der niedrigsten Anzahl an Verbindungen wird ausgewählt. Eine zyklische Durchmusterung erfolgt zwischen Servern mit gleicher Last. Die Verwendung dieses Algorithmus wird für lange Sessions, wie LDAP, SQL, TSE usw., empfohlen, ist jedoch nicht sehr geeignet für kurze Sessions wie HTTP.
- Zuerst: Der erste Server mit verfügbaren Slots für Verbindungen erhält die Verbindung. Die Server werden vom niedrigsten numerischen Bezeichner bis zum höchsten ausgewählt, was standardmäßig der Position des Servers in der Farm entspricht. Sobald ein Server den Wert maxconn erreicht, wird der nächste Server verwendet.
- Quelle: Die IP-Adresse des Clients wird gehasht und durch das Gesamgewicht der aktiven Server geteilt, um zu bestimmen, welcher Server die Anfrage erhält. Somit wird die gleiche IP-Adresse des Clients immer demselben Server zugewiesen, während die Server unverändert bleiben.
Einstellungen zur Lastverteilung auf Anwendungsebene (Layer 7)
Eine weitere verfügbare Möglichkeit besteht darin, den Lastenausgleich so zu konfigurieren, dass er auf Anwendungsebene (Layer 7) arbeitet, was nützlich ist, wenn Teile Ihrer Webanwendung auf verschiedenen Hosts gehostet sind. Dies kann erreicht werden, indem die Übertragung von Verbindungen, beispielsweise nach URL, angepasst wird.
Öffnen Sie die HAProxy-Konfigurationsdatei mit einem Texteditor:
sudo vi /etc/haproxy/haproxy.cfgRichten Sie dann die Frontend- und Backend-Segmente gemäß dem folgenden Beispiel ein:
frontend http_front
bind *:80
stats uri /haproxy?stats
acl url_blog path_beg /blog
use_backend blog_back if url_blog
default_backend http_back
backend http_back
balance roundrobin
server server_name1 private_ip1:80 check
server server_name2 private_ip2:80 check
backend blog_back
server server_name3 private_ip3:80 checkDas Frontend erklärt eine ACL-Regel namens url_blog, die auf alle Verbindungen mit Pfaden anwendbar ist, die mit /blog beginnen. Use_backend legt fest, dass Verbindungen, die der Bedingung url_blog entsprechen, vom Backend mit dem Namen blog_back bedient werden sollen, während alle anderen Anfragen vom Standard-Backend bearbeitet werden.
Auf der Backend-Seite legt die Konfiguration zwei Gruppen von Servern fest: http_back, wie zuvor, und eine neue, die blog_back genannt wird, die Verbindungen zu example.com/blog bedient.
Nach der Änderung der Einstellungen speichern Sie die Datei und starten Sie HAProxy mit dem folgenden Befehl neu:
sudo systemctl restart haproxyWenn Sie beim Starten Warnungen oder Fehlermeldungen erhalten haben, überprüfen Sie die Konfiguration auf deren Vorhandensein und stellen Sie sicher, dass Sie alle erforderlichen Dateien und Ordner erstellt haben, und versuchen Sie es dann erneut mit dem Neustart.
Test der Konfiguration
Wenn HAProxy konfiguriert und gestartet ist, öffnen Sie die öffentliche IP-Adresse des Load-Balancers im Browser und überprüfen Sie, ob Sie korrekt mit dem Backend verbunden sind. Die Option stats uri in der Konfiguration erstellt eine Statistikseite unter der angegebenen Adresse.
http://load_balancer_public_ip/haproxy?statsWenn Sie die Statistikseite laden, und alle Ihre Server grün angezeigt werden, war die Konfiguration erfolgreich!

Die Statistikseite enthält nützliche Informationen zur Überwachung Ihrer Web-Hosts, einschließlich Betriebs-/Stillstandszeiten und der Anzahl der Sitzungen. Wenn ein Server rot gekennzeichnet ist, stellen Sie sicher, dass der Server eingeschaltet ist und dass Sie ihn von der Load-Balancer-Maschine aus anpingen können.
Wenn Ihr Load-Balancer nicht erreichbar ist, stellen Sie sicher, dass HTTP-Verbindungen nicht von einer Firewall blockiert werden. Überprüfen Sie auch, ob HAProxy mit dem folgenden Befehl läuft:
sudo systemctl status haproxySchutz der Statistikseite mit einem Passwort
Wenn die Statistikseite jedoch einfach im Frontend angegeben ist, ist sie für die Allgemeinheit zugänglich, was keine gute Idee sein könnte. Stattdessen können Sie ihr eine eigene Portnummer zuweisen, indem Sie das folgende Beispiel am Ende Ihrer Datei haproxy.cfg hinzufügen. Ersetzen Sie username und passwort durch etwas Sicheres:
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth benutzername:passwortNachdem Sie die neue Listen-Gruppe hinzugefügt haben, entfernen Sie den alten Link zur stats uri aus der Frontend-Gruppe. Wenn Sie fertig sind, speichern Sie die Datei und starten Sie HAProxy neu.
sudo systemctl restart haproxyÖffnen Sie dann den Load-Balancer erneut mit der neuen Portnummer und melden Sie sich mit dem Benutzernamen und Passwort an, die Sie in der Konfigurationsdatei angegeben haben.
http://load_balancer_public_ip:8181Stellen Sie sicher, dass alle Ihre Server weiterhin grün angezeigt werden, und öffnen Sie dann nur die IP des Load-Balancers ohne Portnummern in Ihrem Browser.
http://load_balancer_public_ip/Wenn auf Ihren internen Servern mindestens eine Art von Zielseiten vorhanden ist, werden Sie feststellen, dass Sie jedes Mal, wenn Sie die Seite neu laden, eine Antwort von einem anderen Host erhalten. Sie können verschiedene Lastenausgleichsalgorithmen im Konfigurationsbereich ausprobieren oder sich über .
Fazit: Lastenausgleichs-Worker HAProxy
Gratulation zur erfolgreichen Einrichtung des Lastenausgleichs-Workers HAProxy! Sogar mit einer Basiseinstellung für den Lastenausgleich können Sie die Leistung und Verfügbarkeit Ihrer Webanwendung erheblich steigern. Diese Anleitung ist nur eine Einführung in den Lastenausgleich mit HAProxy, der weit mehr leisten kann, als in einer kurzen Installationsanleitung beschrieben werden kann. Wir empfehlen, mit verschiedenen Konfigurationen unter , die für HAProxy verfügbar ist, zu experimentieren und dann die Planung des Lastenausgleichs für Ihre Produktionsumgebung zu beginnen.
Auch wenn mehrere Hosts Ihren Webservice mit zusätzlicher Kapazität absichern, kann der Lastenausgleichs-Worker selbst einen Single Point of Failure darstellen. Sie können die hohe Verfügbarkeit weiter steigern, indem Sie eine schwebende IP-Adresse zwischen mehreren Lastenausgleichs-Workern einrichten. Mehr dazu finden Sie in unserem .
Weitere Informationen zum Kurs ***
Quelle: habr.com
