Installation des Lastenausgleichs HAProxy auf CentOS

Der Artikel wurde im Vorfeld des Kurses erstellt Linux-Administrator. Virtualisierung und Clusterbildung

Installation des Lastenausgleichs HAProxy auf CentOS

Lastverteilung ist eine gängige Lösung für die horizontale Skalierung von Webanwendungen über mehrere Hosts, die den Benutzern einen einheitlichen Zugangspunkt zum Dienst bietet. HAProxy ist eines der beliebtesten Open-Source-Programme zur Lastverteilung, das zudem hohe Verfügbarkeit und Proxy-Funktionalität gewährleistet.

HAProxy zielt darauf ab, die Ressourcennutzung zu optimieren, die Bandbreite zu maximieren, die Antwortzeiten zu minimieren und eine Überlastung jeder einzelnen Ressource zu vermeiden. Es kann auf vielen Linux-Distributionen installiert werden, wie zum Beispiel CentOS 8, auf dem wir in diesem Leitfaden eingehen werden, sowie auf Systemen von Debian 8 und Ubuntu 16.

Installation des Lastenausgleichs HAProxy auf CentOS

HAProxy eignet sich besonders gut für Websites mit extrem hohem Traffic und wird daher häufig eingesetzt, um die Zuverlässigkeit und Leistung von Webdienstkonfigurationen mit mehreren Servern zu erhöhen. In diesem Leitfaden werden die Schritte zur Einrichtung von HAProxy als Lastverteiler auf einem Cloud-Host mit CentOS 8 beschrieben, der anschließend den Traffic an Ihre Webserver weiterleitet.

Um die besten Ergebnisse zu erzielen, benötigen Sie mindestens zwei Webserver und einen Load-Balancer-Server. Auf den Webservern sollte mindestens ein grundlegender Webdienst wie nginx oder httpd laufen, um die Lastverteilung zwischen ihnen überprüfen zu können.

Installation von HAProxy auf CentOS 8

Da HAProxy eine schnell wachsende Open-Source-Anwendung ist, kann die in den Standard-Repositorys von CentOS verfügbare Distribution möglicherweise nicht die aktuellste Version sein. Um die aktuelle Version zu ermitteln, führen Sie den folgenden Befehl aus:

sudo yum info haproxy

HAProxy bietet stets drei stabile Versionen zur Auswahl: zwei der neuesten unterstützten Versionen und eine dritte, ältere, die weiterhin kritische Updates erhält. Sie können immer die neueste stabile Version, die auf der HAProxy-Website angegeben ist, ü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 der Erstellung des Handbuchs noch nicht in den Standard-Repositories verfügbar war. Sie müssen sie aus der Quelle installieren. Überprüfen Sie zuerst die erforderlichen Bedingungen für den Download und die Kompilierung der Software.

sudo yum install gcc pcre-devel tar make -y

Laden Sie den Quellcode mit dem folgenden Befehl herunter. Sie können überprüfen, ob eine neuere Version verfügbar ist auf der Downloadseite von HAProxy.

wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz

Nachdem 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 Quellcodes:

cd ~/haproxy-2.0.7

Kompilieren Sie dann die Software für Ihr System:

make TARGET=linux-glibc

Und schließlich installieren Sie HAProxy:

sudo make install

Jetzt ist HAProxy installiert, aber es sind einige zusätzliche Schritte erforderlich, um es in Betrieb zu nehmen. Fahren wir mit der Konfiguration der Software und Dienste fort.

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/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 HAProxy als Dienst in das System einfügen möchten, kopieren Sie die Datei haproxy.init aus examples in Ihr Verzeichnis /etc/init.d. Ändern Sie die Dateiberechtigungen, damit das Skript ausgeführt werden kann, und starten 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 der Dienstkonfiguration erlauben, beim Systemstart automatisch neu zu starten:

sudo chkconfig haproxy on

Zum Komfort wird auch empfohlen, einen neuen Benutzer für die Ausführung von HAProxy hinzuzufügen:

sudo useradd -r haproxy

Danach können Sie die installierte Version erneut 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 im obigen Beispielausgabe angezeigt.

Schließlich ist die Firewall in CentOS 8 standardmäßig für dieses Projekt recht restriktiv. Verwenden Sie die folgenden Befehle, um die erforderlichen Dienste zuzulassen und die Firewall neu zu starten:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload

Einrichtung des Lastenausgleichs

Die Konfiguration von HAProxy ist ein relativ einfacher Prozess. Im Grunde müssen Sie HAProxy lediglich mitteilen, welche Verbindungen er überwachen und wohin sie weitergeleitet werden sollen.

Dies geschieht durch die Erstellung einer Konfigurationsdatei /etc/haproxy/haproxy.cfg mit den erforderlichen Einstellungen. Sie können mehr über die Konfigurationsparameter von HAProxy auf der Dokumentationsseite, wenn Sie mehr darüber erfahren möchten.

Lastenausgleich auf der Transportebene (Layer 4)

Lassen Sie uns mit der grundlegenden Konfiguration beginnen. Erstellen Sie eine neue Konfigurationsdatei, indem Sie beispielsweise vi mit dem folgenden Befehl:

sudo vi /etc/haproxy/haproxy.cfg

Fügen Sie in die Datei die folgenden Abschnitte ein. Ersetzen Sie server_name mit dem, was Ihre Server auf der Statistikseite ansprechen sollte, und private_ip — den privaten IP-Adressen der Server, an die Sie den Web-Traffic weiterleiten möchten. Sie können die privaten IP-Adressen im UpCloud Control Panel und auf dem Tab Private Netzwerk 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 check

Dies definiert einen Lastenausgleich auf Transportschicht (Layer 4) mit dem externen Namen http_front, der Port 80 abhört und dann den Verkehr zum Standard-Backend mit dem Namen http_back leitet. Zusätzliche Statistiken erreichen Sie über /haproxy?stats.

Verschiedene Lastenausgleichsalgorithmen.

Die Angabe von Servern im Backend-Bereich ermöglicht es HAProxy, diese Server gemäß dem Round-Robin-Algorithmus für den Lastenausgleich zu verwenden, wann immer dies möglich ist.

Lastenausgleichsalgorithmen werden verwendet, um zu bestimmen, an welchen Server im Backend jede Verbindung übergeben wird. Hier sind einige nützliche Optionen:

  • Roundrobin: Jeder Server wird entsprechend seinem Gewicht abwechselnd genutzt. Dies ist der flüssigste und fairste Algorithmus, bei dem die Bearbeitungszeit der Server gleichmäßig verteilt bleibt. Dieser Algorithmus ist dynamisch, was es ermöglicht, das Gewicht des Servers in Echtzeit anzupassen.
  • Leastconn: Es wird der Server mit der geringsten Anzahl an Verbindungen ausgewählt. Die Verbindung erfolgt im Wechsel zwischen Servern mit gleicher Last. Die Nutzung dieses Algorithmus wird für lange Sitzungen wie LDAP, SQL, TSE usw. empfohlen, ist jedoch weniger geeignet für kurze Sitzungen wie HTTP.
  • First: Der erste Server mit verfügbaren Verbindungs-Slots erhält die Verbindung. Die Server werden von der niedrigsten zur höchsten numerischen ID ausgewählt, was standardmäßig der Position des Servers im Farm entspricht. Sobald der Server den Wert maxconn erreicht, wird der nächste Server verwendet.
  • Quelle: Die IP-Adresse des Quellservers wird gehasht und auf das Gesamtgewicht der laufenden Server verteilt, um zu bestimmen, welcher Server die Anfrage erhalten wird. So wird sichergestellt, dass die gleiche IP-Adresse des Clients immer an denselben Server geleitet wird, während die Server unverändert bleiben.

Lastenausgleich auf Anwendungsebene (Layer 7) konfigurieren

Eine weitere verfügbare Option ist die Einrichtung eines Lastenausgleichs für die Anwendungsebene (Layer 7), was nützlich ist, wenn Teile Ihrer Webanwendung auf verschiedenen Hosts liegen. Dies kann durch die Regelung der Verbindungstransfer erfolgen, z. B. durch die URL.

Öffnen Sie die Konfigurationsdatei von HAProxy mit einem Texteditor:

sudo vi /etc/haproxy/haproxy.cfg

Konfigurieren Sie dann die Frontend- und Backend-Segmente wie im folgenden Beispiel:

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 definiert eine ACL-Regel mit dem Namen url_blog, die auf alle Verbindungen mit Pfaden angewendet wird, die mit /blog beginnen. Use_backend legt fest, dass Verbindungen, die die Bedingung url_blog erfüllen, vom Backend mit dem Namen blog_back bedient werden, während alle anderen Anfragen vom Standard-Backend verarbeitet werden.

Auf der Backendseite wird die Konfiguration in zwei Servergruppen unterteilt: http_back, wie zuvor, und eine neue, die blog_back genannt wird, die Verbindungen zu example.com/blog bedient.

Nachdem Sie die Einstellungen geändert haben, speichern Sie die Datei und starten Sie HAProxy mit folgendem Befehl neu:

sudo systemctl restart haproxy

Wenn bei der Ausführung Warnungen oder Fehlermeldungen angezeigt wurden, überprüfen Sie die Konfiguration auf deren Vorhandensein und stellen Sie sicher, dass Sie alle erforderlichen Dateien und Ordner erstellt haben, und versuchen Sie dann erneut, neu zu starten.

Testen der Konfiguration

Nachdem HAProxy konfiguriert und gestartet wurde, öffnen Sie die öffentliche IP-Adresse des Lastenausgleichsservers im Browser und überprüfen Sie, ob Sie richtig mit dem Backend verbunden sind. Der Parameter stats uri in der Konfiguration erstellt eine Statistikseite unter der angegebenen Adresse.

http://load_balancer_public_ip/haproxy?stats

Wenn alle Ihre Server auf der Statistikseite grün angezeigt werden, war die Konfiguration erfolgreich!

Installation des Lastenausgleichs HAProxy auf CentOS

Die Statistikseite bietet nützliche Informationen zur Überwachung Ihrer Web-Hosts, einschließlich Uptime/Downtime und Anzahl der Sitzungen. Wenn der Server rot markiert ist, stellen Sie sicher, dass der Server eingeschaltet ist und Sie ihn vom Lastenausgleich aus anpingen können.

Wenn Ihr Lastenausgleich nicht reagiert, 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 haproxy

Passwortschutz für die Statistikseite

Wenn die Statistikseite jedoch nur im Frontend angezeigt wird, ist sie für jedermann zugänglich, was möglicherweise keine gute Idee ist. Stattdessen können Sie ihr eine eigene Portnummer zuweisen, indem Sie das folgende Beispiel am Ende Ihrer Datei haproxy.cfg hinzufügen. Ersetzen Sie Benutzername und password durch etwas Sicheres:

listen stats
   bind *:8181
   stats enable
   stats uri /
   stats realm Haproxy Statistics
   stats auth username:password

Nachdem Sie eine neue Gruppe von Zuhörern hinzugefügt haben, entfernen Sie den alten Link zur stats URI aus der Frontend-Gruppe. Speichern Sie die Datei und starten Sie HAProxy neu.

sudo systemctl restart haproxy

Öffnen Sie dann den Lastenausgleich 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:8181

Stellen Sie sicher, dass alle Ihre Server weiterhin grün angezeigt werden, und öffnen Sie dann nur die IP des Lastenausgleichs ohne irgendwelche Portnummern in Ihrem Browser.

http://load_balancer_public_ip/

Wenn es auf Ihren internen Servern eine gewisse Vielfalt an Zielseiten gibt, werden Sie feststellen, dass Sie bei jedem Neuladen der Seite eine Antwort von einem anderen Host erhalten. Sie können verschiedene Lastenausgleichs-Algorithmen im Konfigurationsabschnitt ausprobieren oder sich die vollständige Dokumentation.

Zusammenfassung: HAProxy Lastenausgleich

Herzlichen Glückwunsch zur erfolgreichen Einrichtung des HAProxy Load Balancers! Selbst mit einer grundlegenden Lastenausgleichs-Konfiguration können Sie die Leistung und Verfügbarkeit Ihrer Webanwendung erheblich steigern. Dieses Handbuch ist nur eine Einführung in den Lastenausgleich mit HAProxy, das weit mehr kann, als in einer kurzen Installationsanleitung beschrieben werden kann. Wir empfehlen, mit verschiedenen Konfigurationen zu experimentieren, basierend auf umfassender Dokumentation, die für HAProxy verfügbar ist, bevor Sie mit der Planung des Lastenausgleichs für Ihre Produktionsumgebung beginnen.

Wenn Sie mehrere Hosts verwenden, um Ihren Webservice durch Redundanz zu schützen, kann der Lastenverteiler dennoch einen Single Point of Failure darstellen. Sie können die Hochverfügbarkeit weiter erhöhen, indem Sie eine Floating IP zwischen mehreren Load Balancern einrichten. Mehr dazu finden Sie in unserem Artikel über Floating IPs auf UpCloud.

Weitere Informationen zum Kurs Linux-Administrator. Virtualisierung und Clusterbildung***

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster