Ein Load Balancer ist immer eine gute Option, um Ihre Datenbankumgebung zu verbessern. Es kann Ihnen helfen, Anwendungen auf verfügbare Datenbankknoten umzuleiten, den Datenverkehr auf mehrere Server zu verteilen, um die Leistung zu verbessern, oder bei Bedarf sogar ein Failover durchzuführen. Um zu wissen, was mit Ihrem Datenverkehr/System passiert, müssen Sie über ein gutes Überwachungssystem verfügen, um nicht nur Ihre Datenbankknoten, sondern auch Ihre Load Balancer zu überwachen und proaktive oder reaktive Maßnahmen zu ergreifen, um aktuelle oder zukünftige Probleme zu mindern. Um ein Problem finden zu können, müssen Sie verstehen, was jeder angezeigte Wert bedeutet.
In diesem Blog erklären wir, was die HAProxy-Statistiken bedeuten und wie man sie auf benutzerfreundliche Weise mit Grafiken und ClusterControl überwacht.
Was ist HAProxy?
HAProxy ist ein Open-Source-Proxy, der zur Implementierung von Hochverfügbarkeit, Lastenausgleich und Proxying für TCP- und HTTP-basierte Anwendungen verwendet werden kann.
Als Load Balancer verteilt HAProxy den Datenverkehr von einem Ursprung zu einem oder mehreren Zielen und kann für diese Aufgabe spezifische Regeln und/oder Protokolle definieren. Wenn eines der Ziele nicht mehr reagiert, wird es als offline markiert und der Datenverkehr wird an die restlichen verfügbaren Ziele gesendet.
HAProxy-Knotentypen
Wenn Sie Ihren HAProxy Load Balancer konfigurieren, müssen je nach gewünschter Funktionalität verschiedene Knotentypen konfiguriert werden. Die Optionen sind Frontend, Backend und Listen.
Frontend-Knoten
Wenn Sie HAProxy als Reverse-Proxy vor Ihren Backend-Servern platzieren, definiert ein Frontend-Abschnitt in der Konfigurationsdatei die IP-Adressen und Ports, mit denen sich Clients verbinden können. Die Anfragen gehen in den Load Balancer ein und die Antworten werden an den Client zurückgesendet. Sie passieren das Frontend.
frontend site1.com
bind 10.10.10.150:80
use_backend api_servers if { path_beg /api/ }
default_backend web_servers
Backend-Knoten
Es definiert eine Gruppe von Servern, die je nach ausgewählter Richtlinie einen Lastenausgleich erhalten und zugewiesen werden, um Anfragen zu bearbeiten. HAProxy sendet Anfragen an ein Backend und erhält dann eine Antwort von einem der aktiven Server.
backend web_servers
balance roundrobin
cookie SERVERUSED insert indirect nocache
option httpchk HEAD /
default-server check maxconn 20
server server1 10.10.10.151:80 cookie server1
server server2 10.10.10.152:80 cookie server2
Zuhörknoten
Es kombiniert die beiden oben erwähnten HAProxy-Knotentypen. Möglicherweise bevorzugen Sie die Lesbarkeit, die durch getrennte Frontend- und Backend-Abschnitte gewonnen wird, oder Sie möchten eine übersichtlichere Konfiguration haben, indem Sie den Listen-Ansatz verwenden.
listen haproxy_10.10.10.143_3307_rw
bind *:3307
mode tcp
tcp-check connect port 9200
timeout client 10800s
timeout server 10800s
balance leastconn
option httpchk
default-server port 9200 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100
server 10.10.10.139 10.10.10.139:3306 check
server 10.10.10.140 10.10.10.140:3306 check backup
server 10.10.10.141 10.10.10.141:3306 check backup
HAProxy-Statistikseite
HAProxy ermöglicht es Ihnen, eine Statistikseite mit Echtzeitinformationen zu aktivieren, um zu sehen, was in Ihrem Load Balancer passiert. Um die Statistikseite zu aktivieren, müssen Sie nur die Direktive „stats enable“ in Ihrer HAProxy-Konfigurationsdatei (/etc/haproxy/haproxy.cfg) verwenden. Sehen wir uns ein Beispiel an:
userlist STATSUSERS
group admin users admin
user admin insecure-password admin
user stats insecure-password admin
listen admin_page
bind *:9600
mode http
stats enable
stats refresh 60s
stats uri /
acl AuthOkay_ReadOnly http_auth(STATSUSERS)
acl AuthOkay_Admin http_auth_group(STATSUSERS) admin
stats http-request auth realm admin_page unless AuthOkay_ReadOnly
Die Bindezeile legt fest, welche IP-Adresse und welchen Port Sie verwenden, um auf die Statistikseite zuzugreifen. Sie können auch die Authentifizierung und einen Aktualisierungszeitraum konfigurieren. Wenn Sie über den angegebenen Port (im Beispiel 9600) auf Ihren HAProxy-Knoten zugreifen, sehen Sie in etwa Folgendes:
Hier finden Sie verschiedene nützliche Metriken zur Überwachung Ihres HAProxy-Knotens.
HAProxy-Statistiken
Sehen wir uns nun an, was diese Metriken sind. Da die Bedeutung vom Kontext abhängt, teilen wir es in Frontend und Backend auf.
Warteschlange
Backend
Dieser Abschnitt gilt nur für Backends und zeigt, wie lange Clients darauf warten, dass ein Server verfügbar wird. HAProxy kann Verbindungen in die Warteschlange stellen, wenn Sie die maxconn-Einstellung verwenden.
Die Spalte „Cur“ zeigt die Anzahl der Client-Verbindungen, die derzeit in der Warteschlange stehen und noch keinem Server zugewiesen sind. Die Spalte „Max“ zeigt die meisten Verbindungen, die jemals auf einmal in die Warteschlange gestellt wurden. Die Spalte „Limit“ zeigt die maximale Anzahl von Verbindungen, die in die Warteschlange gestellt werden dürfen, wie durch die maxqueue-Einstellung in jeder Serverzeile in der Konfigurationsdatei definiert.
Sitzungsrate
Frontend
Beschreibt die Rate, mit der sich Clients mit HAProxy verbinden.
Die Spalte „Cur“ zeigt die aktuelle Rate, mit der Clientsitzungen oder vollständig hergestellte Verbindungen zwischen Client und Server erstellt werden. Wenn Sie mit der Maus über dieses Feld fahren, zeigt die Seite die folgenden Messwerte an:
- Aktuelle Verbindungsrate:Die Rate, mit der Clients eine Verbindung zu HAProxy herstellen.
- Aktuelle Sitzungsrate: Die Rate, mit der Sitzungen erstellt werden, bei denen es sich um Entitäten handelt, die den Status einer End-to-End-Verbindung enthalten.
- Aktuelle Anforderungsrate:Die Rate, mit der HTTP-Anforderungen über bestehende Verbindungen empfangen werden.
Die Spalte „Max“ zeigt die meisten Sitzungen, die jemals gleichzeitig verwendet wurden. Wenn Sie mit der Maus über dieses Feld fahren, zeigt die Seite die folgenden Messwerte an:
- Max. Verbindungsrate:Die höchste Rate, mit der sich Clients mit HAProxy verbunden haben.
- Max. Sitzungsrate:Die höchste Rate, mit der Clients Sitzungen aufgebaut haben, bei denen es sich um Entitäten handelt, die den Status einer End-to-End-Verbindung halten.
- Max. Anforderungsrate:Die höchste Rate, mit der HTTP-Anforderungen über bestehende Verbindungen empfangen wurden.
Die Spalte „Limit“ zeigt die maximale Anzahl von Sitzungen pro Sekunde, die das Frontend akzeptiert, wie in der Einstellung „Rate-Limit Sessions“ festgelegt. Wenn dieses Limit überschritten wird, bleiben zusätzliche Verbindungen im Backlog des Sockets ausstehend.
Backend
Diese Statistiken zeigen die Rate, mit der Verbindungen zu einem Server hergestellt werden.
Die Spalte „Cur“ zeigt die aktuelle Rate pro Sekunde, mit der Verbindungen zum Server hergestellt werden. Die Spalte „Max“ zeigt die höchste Rate, mit der jemals Verbindungen zu dem angegebenen Server aufgebaut wurden. Die Spalte „Limit“ wird hier nicht verwendet.
Sitzungen
Frontend
Dieser Abschnitt zählt die Anzahl der Sitzungen oder vollständigen Client-zu-Server-Verbindungen, die auf dem Load Balancer verwendet werden.
Die Spalte „Cur“ zeigt die aktuelle Anzahl der eingerichteten Sitzungen. Die Spalte „Max“ zeigt die meisten Sitzungen, die jemals gleichzeitig aufgebaut wurden. Die Spalte „Limit“ zeigt die maximal zulässige Anzahl gleichzeitiger Sitzungen, wie durch die maxconn-Einstellung im Frontend definiert. Dieses bestimmte Frontend nimmt keine neuen Verbindungen mehr an, wenn dieses Limit erreicht ist. Wenn maxconn nicht gesetzt ist, dann ist „Limit“ gleich dem maxconn-Wert im globalen Abschnitt Ihrer Konfiguration. Wenn dies nicht festgelegt ist, basiert der Wert auf Ihrem System. Wenn Sie den Mauszeiger über die Spalte „Gesamt“ bewegen, werden auf der Seite die folgenden Messwerte angezeigt:
- Komm. Verbindungen:Gesamtzahl der seit dem letzten Neuladen von HAProxy hergestellten Verbindungen.
- Komm. Sitzungen:Gesamtzahl der Sitzungen (End-to-End-Verbindungen), die seit dem letzten Neuladen hergestellt wurden.
- Komm. HTTP-Anfragen:Kumulierte Anzahl von HTTP-Anfragen seit dem letzten Neuladen.
- HTTP xxx-Antworten:Gesamtzahl der HTTP-Anfragen, die eine xxx-Antwort erhalten haben.
- Komprimiert 2xx:Gesamtzahl der 2xx-Antworten, die komprimiert wurden, wenn die Komprimierung aktiviert wurde. Außerdem wird der Prozentsatz der komprimierten Anfragen angezeigt.
- Andere Antworten:Gesamtzahl der HTTP-Anfragen, die eine Antwort erhalten haben, die nicht von den anderen Metriken abgedeckt wird.
- Abgefangene Anfragen:Gesamtzahl der Anfragen, die abgefangen und auf die HAProxy-Statistikseite umgeleitet wurden.
Die Spalten „LbTot“ und „Last“ werden in diesem Abschnitt nicht verwendet.
Backend
Dieser Abschnitt zeigt die Anzahl der aktuellen Verbindungen zu einem der aktiven Server.
Die Spalte „Cur“ listet die Anzahl der aktiven Verbindungen zu einem Server auf. Die Spalte „Max“ zeigt die meisten Verbindungen, die jemals gleichzeitig zu dem angegebenen Server aufgebaut wurden. Die Spalte „Limit“ zeigt die maximale Anzahl von Verbindungen, die für einen Server zulässig sind, wie durch den Parameter maxconn in einer Serverzeile festgelegt.
Die Backend-Zeile zeigt den Wert von fullconn für „Limit“ oder verwendet, falls nicht gesetzt, die folgende Formel:Summe der Session-Limit-Werte für Frontends, die zu diesem Backend routen, dividiert durch 10. Die Spalte „Gesamt“ zeigt die kumulierte Anzahl der Verbindungen, die den angegebenen Server verwendet haben. Wenn Sie den Mauszeiger über dieses Feld bewegen, zeigt die Seite die folgenden Messwerte an:
- Komm. Sitzungen:Gesamtzahl der Verbindungen, die zu diesem Server hergestellt wurden.
- Komm. HTTP-Antworten:Gesamtzahl der von diesem Server empfangenen HTTP-Antworten.
- HTTP xxx Antworten:Gesamtzahl der HTTP xxx Antworten von diesem Server.
- Andere Antworten:Gesamtzahl der HTTP-Antworten, die nicht von den anderen Metriken abgedeckt werden.
- Warteschlangenzeit:Die Zeit in Millisekunden, die eine Verbindung in der Warteschlange verblieb, während sie auf einen Verbindungsslot zum Server wartete, gemittelt über die letzten 1024 erfolgreichen Verbindungen.
- Verbindungszeit:Die Zeit in Millisekunden, die für eine erfolgreiche Verbindung zum Server benötigt wurde, gemittelt über die letzten 1024 erfolgreichen Verbindungen.
- Antwortzeit:Die Antwortzeit des Servers in Millisekunden, gemittelt über die letzten 1024 erfolgreichen Verbindungen.
- Gesamtzeit:Die gesamte Sitzungszeit in Millisekunden, gemittelt über die letzten 1024 erfolgreichen Verbindungen.
Die Spalte „LbTot“ zeigt an, wie oft der angegebene Server insgesamt ausgewählt wurde, um eine Anfrage zu bedienen. Dies kann am normalen Lastenausgleich oder an einem Redispatch von einem ausgefallenen Server liegen. Die Spalte „Letzte“ zeigt die Zeit seit dem letzten Verbindungsempfang.
Bytes
Frontend
Dieser Abschnitt zeigt die Gesamtmenge der zwischen HAProxy und Clients gesendeten und empfangenen Daten. Die Spalte „In“ zeigt die Gesamtzahl der empfangenen Bytes und die Spalte „Out“ die Gesamtzahl der gesendeten Bytes.
Backend
Dieser Abschnitt zeigt die Datenmenge an, die zwischen HAProxy und dem Server gesendet und empfangen wurde. Die Spalte „In“ zeigt die Anzahl der an den Server gesendeten Bytes. Die Spalte „Out“ zeigt die Anzahl der zurückgesendeten Bytes.
Abgelehnt
Es zeigt die Anzahl der Anfragen und Antworten, die aufgrund von Sicherheitsbedenken sowohl im Frontend- als auch im Backend-Bereich abgelehnt wurden.
Frontend
Die Spalte „Req“ zeigt die Anzahl der Anfragen, die aufgrund von Konfigurationsanweisungen (http-request deny, http-request abgelehnt usw.) im Frontend- oder Listen-Bereich abgelehnt wurden.
Die Spalte „Resp“ zeigt die Anzahl der Antworten, die durch eine HTTP-Response-Deny-Direktive abgelehnt wurden, die in einem Frontend oder Listen platziert wurde.
Backend
Die Spalte „Req“ gilt nur für das gesamte Backend. Es zeigt die Anzahl der Anfragen, die durch Konfigurationsdirektiven (http-request deny, http-request abgelehnt, etc.) in einem Backend abgelehnt wurden.
Die Spalte „Resp“ zeigt die Anzahl der Antworten, die für einen bestimmten Server aufgrund der Konfigurationsanweisungen http-response deny oder tcp-response content reject in einem Backend zurückgewiesen wurden.
Fehler
Frontend
Hier wird nur die Spalte „Req“ verwendet. Es zeigt die Anzahl der Anfragen, bei denen ein Fehler aufgetreten ist.
Mögliche Ursachen sind:
- Vorzeitige Kündigung durch den Kunden
- Ein Lesefehler vom Client
- Zeitüberschreitung beim Client
- Der Client hat die Verbindung geschlossen
- Der Client hat eine fehlerhafte Anfrage gesendet
- Die Anfrage war geteert
Backend
Zeigt die Anzahl der Fehler im Zusammenhang mit der Kommunikation mit einem Backend-Server.
Die Spalte „Req“ wird nicht verwendet. Die Spalte „Conn“ zeigt die Anzahl der Anfragen, bei denen beim Versuch, eine Verbindung zum Server herzustellen, ein Fehler aufgetreten ist. Die Spalte „Antwort“ zeigt Fehler, die beim Abrufen der Antwort aufgetreten sind.
Warnungen
Backend
Nur für Backends. In diesem Abschnitt wird die Anzahl der Wiederholungen und Redispatches angezeigt. Wenn Sie Ihrem Backend eine Wiederholungsanweisung hinzugefügt haben, zeigt die Spalte „Retr“ die Gesamtzahl der Wiederholungsversuche einer Verbindung an. Die Spalte „Redis“ zeigt, wie oft HAProxy keine Verbindung zu einem Server herstellen konnte und diese an einen anderen Server weiterleitete. Dazu müssen Sie eine Option-Redispatch-Anweisung hinzugefügt haben.
Server
Frontend
Das einzige Feld aus diesem Abschnitt, das für ein Frontend gilt, ist das Statusfeld. Wenn der Status OFFEN ist, funktioniert das Front-End normal und ist bereit, Datenverkehr zu empfangen.
Backend
Dieser Abschnitt zeigt Details zum Status, Zustand und Gewicht jedes Servers. Die Spalte „Status“ zeigt an, ob der Server derzeit aktiv ist und wie lange. Es kann einen der folgenden Status anzeigen:
- UP:Der Server wird als fehlerfrei gemeldet.
- DOWN:Der Server meldet einen fehlerhaften Zustand und kann keine Anfragen empfangen.
- NOLB:Sie haben http-check disable-on-404 zum Back-End hinzugefügt und die zustandsgeprüfte URL hat eine HTTP 404-Antwort zurückgegeben.
- MAINT:Der Server wurde deaktiviert oder in den Wartungsmodus versetzt.
- DRAIN:Der Server wurde in den Drain-Modus versetzt.
- no check:Zustandsprüfungen sind für diesen Server nicht aktiviert.
Die Spalte „LastChk“ zeigt einen Wert wie L7OK/200 in Xms. Dieser Wert bedeutet, dass eine Schicht-7-Zustandsprüfung durchgeführt wurde; es hat eine HTTP 200 OK-Antwort zurückgegeben, und zwar innerhalb von X Millisekunden.
Die Spalte „Wght“ zeigt den Anteil des Datenverkehrs an, der akzeptiert wird, wie durch den Gewichtungsparameter in der Serverleitung festgelegt. Die Spalte „Act“ zeigt an, ob der Server aktiv (mit einem Y markiert) oder ein Backup (mit einem - markiert) ist. Die Spalte „Bck“ zeigt an, ob der Server ein Backup (mit einem Y markiert) oder aktiv (mit einem - markiert) ist.
Die Spalte „Chk“ zeigt die Anzahl der fehlgeschlagenen Zustandsprüfungen. Die Spalte „Dwn“ zeigt die Anzahl der Übergänge von UP nach DOWN. Die Spalte „Dwntme“ zeigt an, wie lange der Server ausgefallen ist.
Wenn Sie einer Serverzeile einen Slowstart-Parameter hinzugefügt haben, zeigt die Spalte „Thrtle“ den Prozentsatz des Datenverkehrs, den der Server akzeptiert, wenn Sie diesen Server deaktivieren und später aktivieren. Der Prozentsatz steigt über den von Ihnen festgelegten Zeitraum allmählich auf 100 % an.
Diese Informationen basieren auf einem HAProxy-Blogpost, auf den Sie für weitere Informationen verweisen können.
HAProxy auf ClusterControl
Neben Bereitstellung und Verwaltung bietet ClusterControl auch Einblick in HAProxy-Statistiken und Echtzeit-Dashboards von der Benutzeroberfläche. Von ClusterControl aus können Sie auf die Statistikseite zugreifen unter ClusterControl -> Cluster auswählen -> Knoten -> wählen Sie den HAProxy-Knoten ähnlich wie im folgenden Screenshot:
Sie können einen Server für den Lastenausgleich aktivieren/deaktivieren, indem Sie das Häkchen setzen/deaktivieren die Checkbox-Schaltfläche in der Spalte „Aktiviert“. Dies ist sehr nützlich, wenn Sie möchten, dass Ihre Anwendung die Verbindung zu einem Server absichtlich überspringt, z. B. zu Wartungszwecken oder zum Testen und Validieren neuer Konfigurationsparameter oder optimierter Abfragen.
Sie können Ihre HAProxy-Server auch von ClusterControl aus überwachen, indem Sie den Dashboard-Bereich überprüfen.
Um es zu aktivieren, müssen Sie nur zu ClusterControl gehen -> Cluster auswählen -> Dashboards -> Agentenbasierte Überwachung aktivieren. Dadurch wird ein Agent auf jedem Knoten bereitgestellt, um alle Informationen zum Generieren der entsprechenden Diagramme zu erhalten.
Hier sehen Sie nicht nur alle notwendigen Metriken zur Überwachung des HAProxy-Knotens, sondern auch zur Überwachung der gesamten Umgebung mithilfe der verschiedenen Dashboards.
Fazit
HAProxy ist ein gutes und leistungsstarkes Tool zur Verbesserung Ihrer Datenbank- und Anwendungsleistung. Es ist auch nützlich, Hochverfügbarkeit und Failover zu Ihrer Umgebung hinzuzufügen. Um zu wissen, was in Ihrem HAProxy-Knoten passiert, müssen Sie die Metriken verstehen, die auf der Statistikseite überwacht werden, oder diese Überwachung sogar verbessern, indem Sie ein Dashboard hinzufügen, um es benutzerfreundlicher zu gestalten.
In diesem Blog haben wir jede Metrik erklärt, die auf der HAProxy-Statistikseite erwähnt wird, und wir haben auch gezeigt, wie sie auf ClusterControl aussieht, wo Sie vom selben System aus auf HAProxy-Abschnitte sowohl für Statistiken als auch für Dashboards zugreifen können.