Load Balancing mit HAProxy
HAProxy ist ein kostenloses Software-Tool, das als Load Balancer und Reverse-Proxy-Server für TCP- und HTTP-basierte Anwendungen fungiert. Das Tool verteilt Verbindungsanfragen auf mehrere Serverknoten. Mit sehr wenig Ressourcenverbrauch ermöglicht es die Handhabung großer Mengen von HTTP- und HTTPS-Verkehr. Darüber hinaus führt HAProxy Server-Gesundheitschecks durch und leitet Benutzer im Falle eines Serverausfalls zu einem funktionierenden Knoten weiter, was es zu einer hilfreichen Failover-Lösung macht.
Angesichts der zuvor genannten Vorteile haben wir HAProxy konfiguriert, um Verbindungen für MySQL RDBMS und unsere Benutzeroberfläche zu verteilen.
In diesem Artikel behandeln wir die Schritte zum Load Balancing für drei DataSunrise-Proxies im Hochverfügbarkeitsmodus an den folgenden Adressen: 192.168.1.100, 192.168.1.101, 192.168.1.102.
Voraussetzungen
Es gibt mehrere Schritte, die vor der Arbeit mit HAProxy durchgeführt werden müssen.
Bevor Sie das Load Balancing konfigurieren, müssen Sie DataSunrise im Hochverfügbarkeitsmodus auf mehreren Servern installieren. Um den Hochverfügbarkeitsmodus auf DataSunrise zu implementieren, führen Sie Folgendes aus:
- Der DataSunrise-Installationsassistent ermöglicht es Ihnen, einen lokalen oder entfernten Speicherort für eine Konfigurationsregisterkarte auszuwählen. Wählen Sie Remote.
- Geben Sie auf der Registerkarte DataSunrise Server Details die Details der aktuellen DataSunrise-Instanz an: Servername, Hostname, auf dem die DataSunrise-Instanz installiert ist, und die Portnummer der Web-UI der Instanz (standardmäßig 11000).
- Geben Sie auf der Registerkarte Dictionary location die Datenbank an, die zur Speicherung der DataSunrise-Konfiguration (Dictionary) verwendet wird. Alle Server, die so konfiguriert sind, dass sie diese Datenbank verwenden, teilen sich gemeinsame Konfigurationseinstellungen (einschließlich gemeinsamer Anmeldeinformationen für den Zugriff auf Web-UIs).
Weitere detaillierte Anweisungen zum Hochverfügbarkeitsmodus von DataSunrise finden Sie im DataSunrise Administration Guide. Stellen Sie außerdem sicher, dass auf allen Servern dieselbe Version des Produkts installiert ist.
Instanz erstellen
Als Nächstes müssen wir eine DataSunrise-Instanz auf dem virtuellen Host erstellen, auf dem MySQL installiert ist, und Proxies auf Maschinen öffnen, die eine Verbindung zur MySQL-Datenbank herstellen.
Um eine Instanz zu erstellen, führen Sie auf dem Master-Server Folgendes aus:
- Öffnen Sie die DataSunrise GUI und gehen Sie zum Unterabschnitt Databases im Abschnitt Configurations.
- Klicken Sie auf die Schaltfläche Database +.
- Geben Sie den Hostnamen, die Portnummer und andere erforderliche Informationen ein.
- Sobald die Instanz erstellt ist, wählen Sie die neu erstellte Instanz aus der Liste aus und klicken Sie auf Edit.
- Ein Fenster mit den Instanzkonfigurationen wird geöffnet. Klicken Sie auf die Schaltfläche Proxy +.
- Geben Sie den Server, den Hostnamen und die Portnummer (mysql0, 192.168.1.100, 3306 entsprechend) an und klicken Sie auf Save.
- Öffnen Sie Proxies auf den Slave-Maschinen in derselben Instanz und geben Sie den entsprechenden Servernamen und Hostnamen für jeden Proxy an.
Am Ende sieht die Instanzkonfiguration wie folgt aus:
Konfigurieren von HAProxy für MySQL
Die Konfiguration von HAProxy für Datenbankverwaltungssysteme ist ziemlich einfach. Unten werden wir HAProxy so konfigurieren, dass es als Verbindungsvermittler für DataSunrise-Proxies fungiert (192.168.1.100:3306, 192.101.1.101:3306, 192.168.1.102:3306).
Nach der Installation von HAProxy öffnen Sie die oben erwähnte Datei /etc/haproxy/haproxy.cfg und bearbeiten Sie den ‘listen’-Konfigurationsblock wie folgt:
listen af_mysql_balancer
mode tcp
bind *:3306
balance leastconn
server mysql0 192.168.1.100:3306 check
server mysql1 192.168.1.101:3306 check
server mysql2 192.168.1.102:3306 check
HAProxy führt Gesundheitschecks durch und verteilt Verbindungen entsprechend der Anzahl der Verbindungen am Serverknoten. Es leitet den Benutzer an den Server mit der geringsten Anzahl an Verbindungen weiter.
balance <algorithm> dient zur Auswahl der Balancing-Algorithmen.
roundrobin | Round Robin ist der Standardalgorithmus, er wählt die Server der Reihe nach aus. |
leastconn | Mit diesem Algorithmus leitet HAProxy jeden neuen Benutzer an den Server mit der geringsten Anzahl von Verbindungen weiter. |
source | Der Algorithmus zur Weiterleitung von Benutzern an Server basierend auf einem Hash der IP-Adresse des Benutzers. |
Im Falle eines Serverausfalls wird die Verbindung geschlossen. Der Benutzer muss sich erneut verbinden und HAProxy wird eine neue Datenbankverbindung zu dem verfügbaren Server mit der geringsten Anzahl von Verbindungen herstellen.
Alle anderen Datenbankverwaltungssysteme können auf die gleiche Weise konfiguriert werden, nur die Ports müssen geändert werden.
Konfigurieren von HAProxy als Load Balancer für DataSunrise-Backend-Service (GUI)
In diesem Abschnitt werden wir die Schritte zum Load Balancing für drei DataSunrise-Proxies im Hochverfügbarkeitsmodus an den folgenden Adressen betrachten: 192.168.1.100, 192.168.1.101, 192.168.1.102.
Installieren Sie HAProxy auf einem separaten Server und öffnen Sie /etc/haproxy/haproxy.cfg mit einem beliebigen Texteditor. Geben Sie die Listener-Konfiguration wie folgt an:
listen af_gui_balancer
timeout client 50000
timeout server 50000
mode http
bind *:11000 ssl crt /home/anon/proxy.pem
redirect scheme https if !{ ssl_fc }
cookie HA_BACKEND_ID insert
balance leastconn
server node0 192.168.1.100:11000 ssl verify none check cookie 0
server node1 192.168.1.101:11000 ssl verify none check cookie 1
server node2 192.168.1.102:11000 ssl verify none check cookie 2
Konfigurationsübersicht
Inaktivitätszeit des Benutzers
timeout client <timeout> – legt die maximale Inaktivitätszeit des Benutzers fest, nach der die Verbindung geschlossen wird (Millisekunden).timeout server <timeout> – legt die maximale Inaktivitätszeit des Servers fest, nach der die Verbindung geschlossen wird (Millisekunden).
Protokoll der Instanz
mode { tcp|http } – definiert das Protokoll der Instanz. In unserem Fall wird das Balancing auf HTTP-Protokollebene durchgeführt. Die Client-Anfrage wird vor dem Verbinden mit einem Server eingehend analysiert. Jede Anfrage, die nicht RFC-konform ist, wird abgelehnt. Schicht-7-Filterung, -Verarbeitung und -Umschaltung sind möglich. HAProxy kann auch auf TCP-Ebene balancieren, aber die Besonderheiten von Webanwendungen, die eine Benutzersitzungsbedingung haben, machen es schwierig, ein richtiges Load Balancing durchzuführen, ohne die Möglichkeit zu haben, bestimmte Teile von HTTP-Anfragen zu analysieren oder zu modifizieren. Wir verwenden den HTTP-Modus, weil wir HAProxy benötigen, um ein Persistenz-Cookie zuzuweisen und zu lesen, das HAProxy ermöglicht zu bestimmen, zu welchem Server der Benutzer geleitet werden muss. Somit wird der Webserver korrekt mit der Benutzersitzung arbeiten.
Abhöradresse und -port
bind [<address>]:<port_range> – Die Bind-Option definiert eine oder mehrere Abhöradressen und -ports in einem Frontend. <address> kann ein Hostname, eine IPv4-Adresse, eine IPv6-Adresse oder ‘*’ sein. ‘*’ bedeutet, dass der Port in allen verfügbaren IP-Adressen geöffnet wird.ssl crt /home/anon/proxy.pem – Die ssl-Option aktiviert die SSL-Entschlüsselung, die Zertifikate erfordert. Zertifikate und Schlüssel werden aus der Datei /home/anon/proxy.pem entnommen. Systembenutzer müssen Lesezugriff auf die Datei haben. Der Inhalt der PEM-Datei sollte folgendes Format haben:
-----BEGIN CERTIFICATE----- HLDXjCDSAkY... -----END CERTIFICATE----- -----BEGIN RSA PRIVATE KEY----- HLDEpgIBDSKC.... -----END RSA PRIVATE KEY-----
Weiterleitung
redirect scheme https if !{ ssl_fc } Die folgende Konfiguration leitet alle unverschlüsselten HTTP-Verbindungen auf Port 11000 zum HTTPS-Schema weiter. Benutzer können den Administrationsdienst somit nicht ohne Verschlüsselung nutzen.
Persistentes Cookie
cookie HA_BACKEND_ID insert. Die gegebene Option definiert das persistente Cookie. Nach der ersten Anfrage sendet HAProxy ein Cookie an den Benutzer. Entsprechend dem Cookie-Wert bestimmt HAProxy, welcher Serverknoten für nachfolgende Anfragen des Benutzers verwendet werden muss. HA_BACKEND_ID ist der Cookie-Name. Die Option insert definiert, dass HAProxy diese Cookie-Werte nach der ersten Anfrage zuweist. Der Wert des persistenten Cookies wird verwendet, bis der Benutzer die Browser-Cookies löscht oder die Sitzung beendet.
Die letzten drei Zeilen definieren Instanzen.
node0 ist ein willkürlicher Name der Instanz, der nur zur Identifikation in Bezug auf HAProxy verwendet wird. 192.168.1.100:11000 – die Adresse und der Port der Instanz. ssl – definiert, dass die Instanz HTTPS-Verbindungen akzeptiert. verify [none | optional | required]. Standardmäßig ist die Einstellung auf none gesetzt, was bedeutet, dass das von Server gesendete SSL-Zertifikat nicht überprüft wird, d.h. HAProxy vertraut dem Zertifikat des DataSunrise-Backend-Services. Die Option check aktiviert den Gesundheitscheck-Mechanismus. Bevor die Client-Anfrage an den Knoten weitergeleitet wird, prüft HAProxy, ob der Knoten verfügbar ist. cookie <value> – der Parameter setzt den Cookie-Wert, der dem Server zugewiesen wird.
Speichern Sie die Konfigurationsänderungen und starten Sie HAProxy neu.
Schlussfolgerung
Als Ergebnis haben wir die Konfiguration, die HAProxy ermöglicht, wie folgt zu funktionieren:
- Ein Benutzer verbindet sich mit HAProxy.
- HAProxy prüft die Server-Gesundheit.
- HAProxy leitet den Benutzer zum Serverknoten mit der geringsten Auslastung weiter, wodurch die Last tatsächlich verteilt wird.
HAProxy läuft unter Linux und Solaris. Für das Betriebssystem Windows versuchen Sie die fortgeschrittenere Nginx Lösung.
Wenn Sie Hilfe bei der Konfiguration von HAProxy oder DataSunrise im Hochverfügbarkeitsmodus benötigen, wenden Sie sich bitte an uns. Unsere Supportingenieure helfen Ihnen gerne weiter.