Installieren des Lastenausgleichs HAProxy auf CentOS

Die Übersetzung des Artikels wurde im Vorfeld des Starts des Kurses vorbereitet „Linux-Administrator. Virtualisierung und Clusterbildung“

Installieren des Lastenausgleichs HAProxy auf CentOS

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. HAProxy 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 Debian 8 und Ubuntu 16.

Installieren des Lastenausgleichs HAProxy auf CentOS

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 haproxy

HAProxy 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 -y

Laden Sie den Quellcode mit dem folgenden Befehl herunter. Sie können prüfen, ob eine neuere Version verfügbar ist auf der Download-Seite 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 Quellen:

cd ~/haproxy-2.0.7

Kompilieren Sie dann das Programm für Ihr System:

make TARGET=linux-glibc

Und schließlich installieren Sie HAProxy selbst:

sudo make install

Jetzt 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/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-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-reload

Sie müssen auch der Dienstkonfiguration erlauben, beim Systemstart automatisch neu zu starten:

sudo chkconfig haproxy on

Zur weiteren Erleichterung wird auch empfohlen, einen neuen Benutzer für die Ausführung von HAProxy hinzuzufügen:

sudo useradd -r haproxy

Nach 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 --reload

Einrichtung 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 auf der Dokumentationsseite, 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.cfg

Fü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 im UpCloud-Dashboard 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 check

Dies 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.cfg

Richten 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 check

Das 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 haproxy

Wenn 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?stats

Wenn Sie die Statistikseite laden, und alle Ihre Server grün angezeigt werden, war die Konfiguration erfolgreich!

Installieren des Lastenausgleichs HAProxy auf CentOS

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 haproxy

Schutz 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:passwort

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

Stellen 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 die vollständige Dokumentation.

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 der umfangreichen Dokumentation, 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 Artikel über schwebende IP-Adressen auf UpCloud.

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

Quelle: habr.com

60GB SSD 8Gb DDR4