Website-Suche

So richten Sie HAProxy als Load Balancer für Nginx unter CentOS 8 ein


Um maximale Verfügbarkeit, Skalierbarkeit und hohe Leistung von Webanwendungen zu gewährleisten, ist es mittlerweile üblich, Technologien zu implementieren, die Redundanz einführen, wie z. B. Server-Clustering und Lastausgleich. Richten Sie beispielsweise einen Cluster von Servern ein, auf denen alle dieselbe(n) Anwendung(en) ausführen, und stellen Sie dann einen oder mehrere Load Balancer vor ihnen bereit, um den Datenverkehr zu verteilen.

HAProxy ist ein Open-Source-, leistungsstarker, leistungsstarker, zuverlässiger, sicherer und weit verbreiteter hochverfügbarer TCP/HTTP-Load-Balancer, Proxy-Server und SSL/TLS-Terminator, der für entwickelt wurde sehr stark frequentierte Websites. Es läuft zuverlässig und gut auf den Betriebssystemen Linux, Solaris, FreeBSD, OpenBSD sowie AIX.

In dieser Anleitung wird gezeigt, wie Sie einen dedizierten Hochverfügbarkeits-Load-Balancer mit HAProxy unter CentOS 8 einrichten, um den Datenverkehr in einem Cluster von NGINX-Webservern zu steuern. Außerdem wird gezeigt, wie die SSL/TLS-Beendigung in HAProxy konfiguriert wird.

Voraussetzungen:

Insgesamt 4 Server mit minimaler CentOS 8-Installation.

Einrichtung der Testumgebung

----------- HAProxy Server Setup ----------- 
HA Proxy Server - hostname: haproxy-server.tecmint.lan; IP: 10.42.0.247
Test Site Domain: www.tecmint.lan


----------- Client Web Servers Setup ----------- 
Web Server #1 - hostname: websrv1.tecmint.lan; IP: 10.42.0.200
Web Server #2 - hostname: websrv2.tecmint.lan; IP: 10.42.0.21
Web Server #3 - hostname: websrv3.tecmint.lan; IP: 10.42.0.34

Schritt 1: Einrichten des Nginx-HTTP-Servers auf den Client-Computern

1. Melden Sie sich bei allen Ihren CentOS 8-Clientcomputern an und installieren Sie den Nginx-Webserver mit dem dnf-Paketmanager wie gezeigt.

dnf install Nginx

2. Starten Sie als Nächstes den Nginx-Dienst. Aktivieren Sie zunächst den automatischen Start beim Systemstart und bestätigen Sie, dass er aktiv ist, indem Sie seinen Status mithilfe von systemctl überprüfen Befehle (tun Sie dies auf allen Client-Rechnern).

systemctl start nginx
systemctl enable nginx
systemctl status nginx

3. Wenn der Firewalld-Dienst außerdem auf allen Client-Computern ausgeführt wird (was Sie überprüfen können, indem Sie systemctl start firewalld ausführen), müssen Sie HTTP und hinzufügen HTTPS-Dienste in der Firewall-Konfiguration, um Anfragen vom Load Balancer durch die Firewall an die Nginx-Webserver weiterzuleiten. Laden Sie dann den firewalld-Dienst neu, um die neuen Änderungen zu übernehmen (tun Sie dies auf allen Client-Rechnern).

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

4. Öffnen Sie als Nächstes einen Webbrowser auf Ihren lokalen Computern und testen Sie, ob die Nginx-Installation einwandfrei funktioniert. Navigieren Sie mithilfe der Client-IPs. Sobald Sie die Nginx-Testseite sehen, bedeutet dies, dass der auf dem Client-Computer installierte Webserver ordnungsgemäß funktioniert.

5. Als nächstes müssen wir Testseiten auf den Client-Rechnern erstellen, die wir später zum Testen des HAProxy-Setups verwenden werden.

----------- Web Server #1 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv1.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #2 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv2.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #3 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv3.tecmint.lan"> /usr/share/nginx/html/index.html

Schritt 2: Installieren und Konfigurieren des HAProxy-Servers unter CentOS 8

6. Installieren Sie nun das HAProxy-Paket auf dem HAProxy-Server, indem Sie den folgenden Befehl ausführen.

dnf install haproxy

7. Als nächstes starten Sie den HAProxy-Dienst, aktivieren ihn für den automatischen Start beim Systemstart und überprüfen seinen Status.

systemctl start haproxy
systemctl enable haproxy
systemctl status haproxy

8. Jetzt konfigurieren wir den HAProxy mithilfe der folgenden Konfigurationsdatei.

vi /etc/haproxy/haproxy.cfg

Die Konfigurationsdatei ist in vier Hauptabschnitte unterteilt.

  • Globale Einstellungen – legt prozessweite Parameter fest.
  • defaults – dieser Abschnitt legt Standardparameter für alle anderen Abschnitte fest, die auf seine Deklaration folgen.
  • Frontend – In diesem Abschnitt wird eine Reihe von Listening-Sockets beschrieben, die Client-Verbindungen akzeptieren.
  • Backend – dieser Abschnitt beschreibt eine Reihe von Servern, mit denen der Proxy eine Verbindung herstellt, um eingehende Verbindungen weiterzuleiten.

Um die Optionen unter globale Einstellungen und Standardeinstellungen zu verstehen, lesen Sie die HAProxy-Dokumentation (Link am Ende des Artikels). Für diese Anleitung verwenden wir die Standardeinstellungen.

Einrichten der HAProxy-Protokollierung

9. HAProxy spielt nach seiner Bereitstellung eine wichtige Rolle in Ihrer IT-Infrastruktur. Daher ist die Konfiguration der Protokollierung eine Grundvoraussetzung. Auf diese Weise erhalten Sie Einblicke in jede Verbindung zu Ihren Backend-Webservern.

Der Log-Parameter (im folgenden Screenshot hervorgehoben) deklariert einen globalen Syslog-Server (z. B. rsyslog, die Standardeinstellung in CentOS), der Protokollnachrichten empfängt. Hier können mehrere Server deklariert werden.

Die Standardkonfiguration verweist auf localhost (127.0.0.1) und local2 ist der standardmäßige Einrichtungscode, der zur Identifizierung von HAProxy-Protokollmeldungen unter verwendet wird rsyslog.

10. Als Nächstes müssen Sie dem rsyslog-Server mitteilen, wie er HAProxy-Protokollnachrichten empfangen und verarbeiten soll. Öffnen Sie die rsyslog-Konfigurationsdatei unter /etc/rsyslog.conf oder erstellen Sie eine neue Datei im Verzeichnis /etc/rsyslog.d, zum Beispiel /etc/rsyslog .d/haproxy.conf.

vi /etc/rsyslog.d/haproxy.conf

Kopieren Sie die folgende Konfiguration und fügen Sie sie ein, um Protokolle mit UDP am Standardport 514 zu erfassen.

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

Fügen Sie diese Zeilen außerdem hinzu, um rsyslog anzuweisen, je nach Schweregrad in zwei separate Protokolldateien zu schreiben, wobei local2 der in der HAProxy-Konfiguration oben definierte Einrichtungscode ist.

local2.* 	/var/log/haproxy-traffic.log 
local2.notice 	/var/log/haproxy-admin.log

11. Speichern Sie die Datei und schließen Sie sie. Starten Sie dann den rsyslog-Dienst neu, um die letzten Änderungen zu übernehmen.

systemctl restart rsyslog

Konfigurieren von HAProxy Front-End und Back-Ends

12. In diesem Abschnitt zeigen wir, wie die Front-End- und Back-End-Proxys konfiguriert werden. Gehen Sie zurück zur HAProxy-Konfigurationsdatei und ändern Sie die Standard-Front-End- und Backend-Abschnitte wie folgt. Wir werden nicht auf eine detaillierte Erläuterung der einzelnen Parameter eingehen, Sie können jederzeit auf die offizielle Dokumentation zurückgreifen.

Die folgende Konfiguration definiert einen Abschnitt listen, der zum Bereitstellen der Seite HAProxy Stats verwendet wird. Der bind-Parameter weist einen Listener einer bestimmten IP-Adresse (in diesem Fall * für alle) und einem Port (9000) zu >).

Die Einstellung „stats enable aktiviert die Statistikseite, auf die über den URI /stats (d. h. http://server_ip:9000/stats) zugegriffen wird. .

Die auth-Einstellung von stats wird verwendet, um beim Zugriff auf die Seite eine Basisauthentifizierung hinzuzufügen (ersetzen Sie haproxy und Lostp@1ss durch einen Benutzernamen und ein Passwort von Ihnen). Auswahl).

listen stats
    bind *:9000
    stats enable
    stats hide-version
    stats uri /stats
    stats admin if LOCALHOST
    stats auth haproxy:Lostp@1ss

13. Die nächste Konfiguration definiert einen Frontend-Abschnitt namens TL (Sie können einen Namen nach Ihren Wünschen vergeben). Der Parameter mode definiert den Modus, in dem HAProxy arbeitet.

Der Parameter acl (Access Control List) wird verwendet, um eine Entscheidung basierend auf dem aus der Anfrage extrahierten Inhalt zu treffen. In diesem Beispiel wird die Anfrage als reines HTTP betrachtet, wenn sie nicht über SSL erfolgt.

Anschließend wird die Einstellung http-request set-header verwendet, um der Anfrage einen HTTP-Header hinzuzufügen. Dadurch wird Nginx darüber informiert, dass die ursprüngliche Anfrage über HTTP (oder über Port 80) gestellt wurde.

Die default_backend- oder use_backend-Direktive definiert die Backend-Server, in diesem Fall referenziert durch TL_web_servers.

Beachten Sie, dass HAProxy den Fehler „503 Service Unavailable error“ zurückgibt, wenn eine Anfrage nicht von einem use_backend oder default_backend weitergeleitet wird > Richtlinie.

frontend TL
    bind *:80
    mode http
    acl http  ssl_fc,not
    http-request set-header X-Forwarded-Protocol http if http
    default_backend TL_web_servers

14. Dann müssen wir einen Backend-Abschnitt definieren, in dem die Einstellung Balance definiert, wie HAProxy die Back-End-Server auswählt, um eine Anfrage zu verarbeiten, wenn nein Die Persistenzmethode überschreibt diese Auswahl.

Die Cookie-Direktive ermöglicht Cookie-basierte Persistenz, sie weist HAProxy an, ein Cookie mit dem Namen SERVERID an den Client zu senden und um es mit der ID des Servers zu verknüpfen, der die erste Antwort gegeben hat.

Die server-Direktive wird verwendet, um die Upstream-Server im Format sever_name (z. B. websrv1), server_IP:port zu definieren und Optionen.

Eine wichtige Option ist check, die HAProxy anweist, weiterhin die Verfügbarkeit eines Servers zu überprüfen und auf der Statistikseite einen Bericht zu erstellen.

backend TL_web_servers
    mode http
    balance roundrobin
    option  httpchk HEAD /
    cookie SERVERUID insert indirect nocache
    server  websrv1 10.42.0.200:80 cookie websrv1 check
    server  websrv2 10.42.0.21:80  cookie websrv2 check
    server  websrv3 10.42.0.34:80  cookie websrv3 check

Kommentieren Sie alle anderen Frontend- und Backend-Abschnitte aus, wie im folgenden Screenshot gezeigt. Speichern Sie die Datei und schließen Sie sie.

15. Starten Sie nun den HAProxy-Dienst neu, um die neuen Änderungen zu übernehmen.

systemctl restart haproxy

16. Stellen Sie als Nächstes sicher, dass HTTP (Port 80) und HTTPS (Port 433))-Dienste werden in der Firewall geöffnet, um Client-Anfragen wie folgt zu akzeptieren. Öffnen Sie außerdem Port 9000 in der Firewall, um auf die Statistikseite zuzugreifen, und laden Sie die Firewall-Einstellungen neu.

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent –add-service=https
firewall-cmd --zone=public --permanent --add-port=9000/tcp
firewall-cmd --reload

Schritt 3: Testen des HAProxy-Setups und Anzeigen von Statistiken

17. Jetzt ist es an der Zeit, das HAProxoy-Setup zu testen. Fügen Sie auf dem lokalen Desktop-Computer, von dem aus Sie auf alle Server zugreifen, die folgende Zeile in die Datei /etc/hosts ein, damit wir die Dummy-Site-Domäne verwenden können.

10.42.0.247  www.tecmint.lan

18. Öffnen Sie dann einen Browser und navigieren Sie entweder mit der Serveradresse oder der Site-Domain.

http://10.42.0.247/
OR
http://www.tecmint.lan/

19. Um auf die HAProxy-Statistikseite zuzugreifen, verwenden Sie die folgende Adresse.

http://10.42.0.247:9000/stats

Verwenden Sie dann den Benutzernamen und das Passwort, die Sie in der HAProxy-Konfigurationsdatei definiert haben (siehe Parameter stats auth).

Nach einer erfolgreichen Anmeldung landen Sie auf der HAProxy-Statistikseite, die Ihnen Kennzahlen zum Zustand Ihrer Server, aktuelle Anfrageraten, Antwortzeiten und vieles mehr anzeigt.

Um zu demonstrieren, wie der Statusbericht bezüglich der Farbcodes funktioniert, haben wir einen der Back-End-Server eingerichtet.

Schritt 4: Konfigurieren von HTTPS in HAProxy mithilfe eines selbstsignierten SSL-Zertifikats

20. In diesem letzten Abschnitt zeigen wir, wie Sie SSL/TLS konfigurieren, um die gesamte Kommunikation zwischen dem HAProxy-Server und dem Client zu sichern. HAProxy unterstützt vier wichtige HTTPS-Konfigurationsmodi, aber für diese Anleitung verwenden wir SSL/TLS-Offloading.

Im SSL/TLS-Offloading-Modus entschlüsselt HAProxy den Datenverkehr auf der Clientseite und stellt eine Verbindung in klarem Datenverkehr zu den Backend-Servern her.

Wir beginnen mit der Erstellung des Zertifikats und des Schlüssels wie gezeigt (beantworten Sie die Fragen entsprechend basierend auf Ihren Unternehmensdetails während der Zertifikatserstellung, wie im Screenshot hervorgehoben).

mkdir /etc/ssl/tecmint.lan
cd /etc/ssl/tecmint.lan/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/tecmint.lan.key -out /etc/ssl/tecmint.lan.crt
cd /etc/ssl/tecmint.lan/
cat tecmint.crt tecmint.key >tecmint.pem
ls -l

21. Öffnen Sie als Nächstes die HAProxy-Konfigurationsdatei (/etc/haproxy/haproxy.cfg) und bearbeiten Sie den Front-End-Abschnitt.

frontend TL
    bind *:80
    bind *:443 ssl crt /etc/ssl/tecmint.lan/tecmint.pem
    redirect  scheme  https  if  !{ ssl_fc }
    mode http
    acl http  ssl_fc,not
    acl https ssl_fc
    http-request set-header X-Forwarded-Protocol http if http
    http-request set-header X-Forwarded-Protocol https if https
    default_backend TL_web_servers

Speichern Sie die Datei und schließen Sie sie.

22. Starten Sie dann den HAProxy-Dienst neu, um die neuen Änderungen zu übernehmen.

systemctl restart haproxy.service

23. Öffnen Sie als Nächstes einen Webbrowser und versuchen Sie erneut, auf die Website zuzugreifen. Der Browser zeigt aufgrund des selbstsignierten Zertifikats eine Fehlermeldung an. Klicken Sie auf Erweitert, um fortzufahren.

Das ist alles für jetzt! Jede Webanwendung hat ihre eigenen Anforderungen. Sie müssen den Lastausgleich entsprechend Ihrer IT-Infrastruktur und den Anforderungen Ihrer Anwendung entwerfen und konfigurieren.

Weitere Informationen zu einigen der in diesem Handbuch verwendeten Konfigurationsoptionen und zur allgemeinen Verwendung von HAProxy finden Sie in der offiziellen Dokumentation zur HAProxy Community Edition oder zur HAProxy Enterprise-Version. Sie können Fragen oder Gedanken über das unten stehende Feedback-Formular posten.