Die Übersetzung des Artikels wurde am Vorabend des Kursbeginns erstellt
Lastausgleich ist eine gängige Lösung zum Skalieren von Webanwendungen über mehrere Hosts hinweg und bietet Benutzern gleichzeitig einen einzigen Zugriffspunkt auf einen Dienst.
HAProxy zielt darauf ab, die Ressourcennutzung zu optimieren, den Durchsatz zu maximieren, die Antwortzeit zu minimieren und die Überlastung einzelner Ressourcen zu vermeiden. Es kann auf einer Vielzahl von Linux-Distributionen installiert werden, beispielsweise auf CentOS 8, auf das wir uns in diesem Handbuch konzentrieren werden, sowie auf Systemen
HAProxy eignet sich besonders für sehr stark frequentierte Websites und wird daher häufig zur Verbesserung der Zuverlässigkeit und Leistung von Webservice-Konfigurationen mit mehreren Servern eingesetzt. In dieser Anleitung werden die Schritte zum Einrichten von HAProxy als Load Balancer auf einem CentOS 8-Cloud-Host beschrieben, der dann den Datenverkehr an Ihre Webserver weiterleitet.
Als Voraussetzung für beste Ergebnisse sollten Sie über mindestens zwei Webserver und einen Lastausgleichsserver verfügen. Auf Webservern muss mindestens ein grundlegender Webdienst wie Nginx oder httpd ausgeführt werden, um den Lastausgleich zwischen ihnen zu überprüfen.
Installation von HAProxy unter CentOS 8
Da es sich bei HAProxy um eine sich schnell entwickelnde Open-Source-Anwendung handelt, handelt es sich bei der in den Standard-CentOS-Repositorys verfügbaren Distribution möglicherweise nicht um die neueste Version. Um die neueste Version herauszufinden, führen Sie den folgenden Befehl aus:
sudo yum info haproxy
HAProxy stellt immer drei stabile Versionen zur Auswahl: die beiden aktuellsten unterstützten Versionen und die dritte, ältere Version, die noch wichtige 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 installieren wir die neueste stabile Version 2.0, die zum Zeitpunkt des Schreibens noch nicht in den Standard-Repositorys verfügbar war. Sie müssen es von der Originalquelle installieren. Prüfen Sie jedoch zunächst, ob Sie die notwendigen Voraussetzungen zum Herunterladen und Kompilieren des Programms erfüllt haben.
sudo yum install gcc pcre-devel tar make -y
Laden Sie den Quellcode mit dem folgenden Befehl herunter. Sie können unter überprüfen, ob eine neuere Version verfügbar ist
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz
Sobald der Download abgeschlossen ist, extrahieren Sie die Dateien mit dem folgenden Befehl:
tar xzvf ~/haproxy.tar.gz -C ~/
Wechseln Sie in das entpackte Quellverzeichnis:
cd ~/haproxy-2.0.7
Kompilieren Sie dann das Programm für Ihr System:
make TARGET=linux-glibc
Und schließlich HAProxy selbst installieren:
sudo make install
Jetzt ist HAProxy installiert, es sind jedoch einige zusätzliche Manipulationen erforderlich, damit es funktioniert. Fahren wir mit der Einrichtung der unten aufgeführten Software und Dienste fort.
Einrichten von HAProxy für Ihren Server
Fügen Sie nun die folgenden Verzeichnisse und Statistikdateien für HAProxy-Einträge hinzu:
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/stats
Erstellen 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/haproxy
Wenn Sie den Proxy als Dienst zu Ihrem System hinzufügen möchten, kopieren Sie die Datei haproxy.init aus den Beispielen in Ihr Verzeichnis /etc/init.d. Bearbeiten Sie die Berechtigungen der Datei, damit das Skript ausgeführt 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-reload
Sie müssen außerdem zulassen, dass der Dienst beim Systemstart automatisch neu gestartet wird:
sudo chkconfig haproxy on
Der Einfachheit halber wird außerdem empfohlen, einen neuen Benutzer hinzuzufügen, um HAProxy auszuführen:
sudo useradd -r haproxy
Anschließend können Sie die installierte Versionsnummer noch einmal mit dem folgenden Befehl ü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 in der Beispielausgabe oben gezeigt.
Schließlich ist die Standard-Firewall in CentOS 8 für dieses Projekt recht restriktiv. Verwenden Sie die folgenden Befehle, um die erforderlichen Dienste zu aktivieren und die Firewall zurückzusetzen:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload
Einrichten eines Load Balancers
Das Einrichten von HAProxy ist ein ziemlich einfacher Vorgang. Im Wesentlichen müssen Sie HAProxy lediglich mitteilen, welche Verbindungen es abhören und wohin es diese weiterleiten soll.
Dies geschieht durch die Erstellung einer Konfigurationsdatei /etc/haproxy/haproxy.cfg mit definierenden Einstellungen. Sie können sich über HAProxy-Konfigurationsoptionen informieren
Lastausgleich auf der Transportschicht (Schicht 4)
Beginnen wir mit der Grundeinrichtung. Erstellen Sie eine neue Konfigurationsdatei, zum Beispiel mit vi mit folgendem Befehl:
sudo vi /etc/haproxy/haproxy.cfg
Fügen Sie der Datei die folgenden Abschnitte hinzu. Ersetzen Servername derjenige, der Ihre Server auf der Statistikseite aufrufen soll, und private_ip - private IP-Adressen der Server, an die Sie den Webverkehr leiten möchten. Sie können private IP-Adressen überprüfen
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 check
Dies definiert einen Transportschicht-Lastausgleichsdienst (Schicht 4) mit dem externen Namen http_front, der Port 80 überwacht und den Datenverkehr dann an das Standard-Backend mit dem Namen http_back weiterleitet. Zusätzliche Statistiken /haproxy?stats verbindet die Statistikseite mit der angegebenen Adresse.
Verschiedene Lastausgleichsalgorithmen.
Durch die Angabe von Servern im Backend-Abschnitt kann HAProxy diese Server nach Möglichkeit für den Lastausgleich gemäß dem Round-Robin-Algorithmus verwenden.
Mithilfe von Ausgleichsalgorithmen wird bestimmt, an welchen Server im Backend jede Verbindung gesendet wird. Hier sind einige der nützlichen Optionen:
- Roundrobin: Jeder Server wird der Reihe nach entsprechend seinem Gewicht verwendet. Dies ist der reibungsloseste und fairste Algorithmus, wenn die Verarbeitungszeit der Server gleichmäßig verteilt bleibt. Dieser Algorithmus ist dynamisch, sodass Sie das Gewicht des Servers im laufenden Betrieb anpassen können.
- Mindestverbindung: Es wird der Server mit den wenigsten Verbindungen ausgewählt. Round-Robin wird zwischen Servern mit derselben Auslastung durchgeführt. Die Verwendung dieses Algorithmus wird für lange Sitzungen wie LDAP, SQL, TSE usw. empfohlen, ist jedoch für kurze Sitzungen wie HTTP nicht sehr geeignet.
- Zuerst: Der erste Server mit verfügbaren Verbindungssteckplätzen empfängt die Verbindung. Server werden von der niedrigsten bis zur höchsten numerischen ID ausgewählt, was standardmäßig der Position des Servers in der Farm entspricht. Sobald der Server den maxconn-Wert erreicht, wird der nächste Server verwendet.
- Quelle: Die Quell-IP-Adresse wird gehasht und durch die Gesamtgewichtung der laufenden Server dividiert, um zu bestimmen, welcher Server die Anfrage empfängt. Somit wird dieselbe Client-IP-Adresse immer an denselben Server gesendet, während die Server unverändert bleiben.
Konfigurieren des Lastausgleichs auf der Anwendungsschicht (Schicht 7)
Eine weitere verfügbare Option besteht darin, den Load Balancer so zu konfigurieren, dass er auf der Anwendungsschicht (Schicht 7) arbeitet. Dies ist nützlich, wenn sich Teile Ihrer Webanwendung auf verschiedenen Hosts befinden. Dies lässt sich erreichen, indem die Übertragung der Verbindung, beispielsweise per URL, gedrosselt wird.
Öffnen Sie die HAProxy-Konfigurationsdatei mit einem Texteditor:
sudo vi /etc/haproxy/haproxy.cfg
Anschließend richten Sie 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 check
Das Frontend deklariert eine ACL-Regel namens url_blog, die für alle Verbindungen gilt, deren Pfade mit /blog beginnen. Use_backend gibt an, dass Verbindungen, die der Bedingung url_blog entsprechen, vom Backend namens blog_back bedient werden sollen und alle anderen Anfragen vom Standard-Backend verarbeitet werden.
Im Backend richtet die Konfiguration zwei Servergruppen ein: http_back wie zuvor und eine neue namens blog_back, die Verbindungen zu example.com/blog verwaltet.
Nachdem Sie die Einstellungen geändert haben, speichern Sie die Datei und starten Sie HAProxy mit dem folgenden Befehl neu:
sudo systemctl restart haproxy
Wenn Sie beim Start Warnungen oder Fehlermeldungen erhalten, überprüfen Sie die Konfiguration auf eventuelle Warnungen und stellen Sie sicher, dass Sie alle erforderlichen Dateien und Ordner erstellt haben. Versuchen Sie dann erneut, neu zu starten.
Testen des Setups
Sobald HAProxy konfiguriert ist und ausgeführt wird, öffnen Sie die öffentliche IP-Adresse des Load Balancer-Servers in einem Browser und prüfen Sie, ob Sie sich korrekt mit dem Backend verbunden haben. Der Stats-URI-Parameter in der Konfiguration erstellt eine Statistikseite an der angegebenen Adresse.
http://load_balancer_public_ip/haproxy?stats
Wenn beim Laden der Statistikseite alle Ihre Server grün sind, war die Einrichtung erfolgreich!
Die Statistikseite enthält einige nützliche Informationen zum Verfolgen Ihrer Webhosts, einschließlich Betriebs-/Ausfallzeiten und Anzahl der Sitzungen. Wenn der Server rot markiert ist, stellen Sie sicher, dass der Server aktiv ist und dass Sie ihn vom Load Balancer aus anpingen können.
Wenn Ihr Load Balancer nicht reagiert, stellen Sie sicher, dass HTTP-Verbindungen nicht durch eine Firewall blockiert werden. Stellen Sie außerdem sicher, dass HAProxy mit dem folgenden Befehl funktioniert:
sudo systemctl status haproxy
Schutz der Statistikseite mit einem Passwort
Wenn die Statistikseite jedoch nur im Frontend aufgeführt ist, ist sie für die Öffentlichkeit zugänglich, was möglicherweise keine gute Idee ist. Stattdessen können Sie ihm Ihre eigene Portnummer zuweisen, indem Sie das folgende Beispiel am Ende Ihrer haproxy.cfg-Datei hinzufügen. Ersetzen Benutzername и Passwort zu etwas Sicherem:
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:password
Entfernen Sie nach dem Hinzufügen der neuen Listener-Gruppe die alte Statistik-URI-Referenz aus der Frontend-Gruppe. Wenn Sie fertig sind, speichern Sie die Datei und starten Sie HAProxy neu.
sudo systemctl restart haproxy
Anschließend öffnen Sie den Load Balancer erneut mit der neuen Portnummer und melden sich mit dem Benutzernamen und Passwort an, die Sie in der Konfigurationsdatei angegeben haben.
http://load_balancer_public_ip:8181
Stellen Sie sicher, dass alle Ihre Server noch grün sind, und öffnen Sie dann nur die Load-Balancer-IP ohne Portnummern in Ihrem Browser.
http://load_balancer_public_ip/
Wenn Sie auf Ihren internen Servern zumindest einige verschiedene Landingpages haben, werden Sie feststellen, dass Sie jedes Mal, wenn Sie die Seite neu laden, eine Antwort von einem anderen Host erhalten. Sie können verschiedene Ausgleichsalgorithmen im Konfigurationsabschnitt ausprobieren oder sehen
Fazit: HAProxy Load Balancer
Herzlichen Glückwunsch zur erfolgreichen Einrichtung Ihres HAProxy Load Balancers! Selbst mit einem einfachen Load-Balancing-Setup können Sie die Leistung und Verfügbarkeit Ihrer Webanwendung erheblich verbessern. Diese Anleitung ist lediglich eine Einführung in den Lastausgleich mit HAProxy, der viel mehr kann, als in einer Kurzanleitung zur Einrichtung beschrieben werden kann. Wir empfehlen, mit verschiedenen Konfigurationen zu experimentieren
Durch die Verwendung mehrerer Hosts zum Schutz Ihres Webservices mit Spielraum kann der Load Balancer selbst immer noch eine Fehlerquelle darstellen. Sie können die Hochverfügbarkeit weiter verbessern, indem Sie eine Floating-IP zwischen mehreren Load Balancern einrichten. Mehr dazu erfahren Sie in unserem
Mehr zum Kurs
Source: habr.com