Was ist HAproxy und wie verteilt es Last?

Autor: Veröffentlicht

Kurz erklärt: HAProxy ist eine Software, die Netzwerkverkehr entgegennimmt und an ausgewählte Server weiterleitet, auf denen die Anwendung läuft. Sie arbeitet als Reverse Proxy und Load Balancer: Sie vermittelt Verbindungen und verteilt den Datenverkehr auf mehrere Instanzen eines Dienstes. Das hilft, größere Lasten zu bewältigen und ausgefallene Server zu umgehen. Der Einsatz von HAProxy allein garantiert jedoch keine ununterbrochene Verfügbarkeit.

Wie HAProxy zwischen Nutzer und Anwendung arbeitet

Ein Reverse Proxy nimmt Verbindungen stellvertretend für die Anwendungsserver entgegen. Der Nutzer verbindet sich mit der Adresse des Dienstes, hinter der HAProxy steht, statt direkt mit einem bestimmten Backend-Server. HAProxy wählt das Ziel und leitet den Datenverkehr dorthin weiter. Die Antwort kommt über dieselbe vermittelnde Schicht zurück.

Lastverteilung, auch Load Balancing genannt, verteilt den Datenverkehr auf die verfügbaren Server. Das muss keine exakt gleichmäßige Verteilung sein: Ein leistungsfähigerer Rechner kann mehr Aufgaben erhalten, während ein Server bei Wartungsarbeiten von der Bearbeitung neuer Anfragen ausgenommen werden kann.

In der Konfiguration von HAProxy gibt es zwei wichtige Begriffe. Das Frontend legt fest, wo das Programm Verbindungen entgegennimmt, beispielsweise auf Port 443 für HTTPS. Das Backend beschreibt eine Gruppe von Zielservern und die Regeln für deren Auswahl. Ein Frontend kann den Datenverkehr je nach Domain oder URL-Pfad an unterschiedliche Backends weiterleiten.

Unterstützung für TCP, HTTP und Verschlüsselung

HAProxy kann auf unterschiedlichen Kommunikationsebenen arbeiten. Im TCP-Modus leitet es Verbindungen weiter, ohne Entscheidungen anhand des Inhalts von HTTP-Anfragen zu treffen. Das ist auch für andere Dienste als Websites nützlich, sofern sie TCP verwenden.

Im HTTP-Modus versteht HAProxy Bestandteile einer Anfrage wie Hostname, Pfad und Header. Es kann daher Anfragen für /api an API-Server weiterleiten und die übrigen Anfragen an die Anwendung, die die Website bereitstellt. Solche Regeln werden häufig als ACL formuliert: Bedingungen, anhand derer der Datenverkehr bestimmten Regeln zugeordnet wird.

Bei HTTPS ist entscheidend, wo TLS endet – also das Protokoll, das die Verbindung absichert:

Die TLS-Terminierung in HAProxy bedeutet nicht automatisch, dass auch die Verbindung zur Anwendung verschlüsselt ist. Dieser Abschnitt muss separat konfiguriert werden, einschließlich der Prüfung des Zertifikats des Zielservers.

Wie die Lastverteilung bei Ausfällen hilft

Stell dir einen Onlineshop vor, der auf drei Anwendungsservern läuft. HAProxy nimmt die Kundenanfragen entgegen und verteilt sie nach dem Verfahren round robin, also reihum auf die verfügbaren Server. Eine Alternative ist beispielsweise least connections: Dieses Verfahren bevorzugt den Server mit weniger aktiven Verbindungen. Welches Verfahren passt, hängt von der Art des Datenverkehrs ab.

HAProxy kann Health Checks durchführen, also regelmäßige Verfügbarkeitstests der Backend-Server. Besteht einer der Server diese Tests nicht mehr, kann das Programm ihm keinen neuen Datenverkehr mehr zuweisen und die übrigen Rechner die Anfragen bearbeiten lassen. Aktive Verbindungen zum ausgefallenen Server können allerdings abbrechen.

Ein Test, der lediglich prüft, ob ein Port offen ist, bestätigt noch nicht, dass der Shop eine Bestellung bearbeiten kann. Aussagekräftiger ist häufig ein HTTP-Test eines speziellen Prüfendpunkts der Anwendung, der ihre Betriebsbereitschaft meldet. Der Umfang des Tests muss sorgfältig gewählt werden: Ein zu oberflächlicher Test übersieht Ausfälle, ein zu strenger kann funktionierende Instanzen unnötig aus der Verteilung nehmen.

Die Lastverteilung setzt auch eine geeignete Architektur der Anwendung voraus. Ist der Warenkorb eines Kunden ausschließlich im Arbeitsspeicher eines Servers gespeichert, kann eine nachfolgende Anfrage an einen anderen Rechner möglicherweise nicht darauf zugreifen. Ein gemeinsamer Sitzungsspeicher hilft hier. Die feste Zuordnung eines Kunden zu einem Server, sogenannte Sticky Sessions, schützt die Sitzungsdaten dagegen nicht vor einem Ausfall dieses Rechners.

Wie sich HAProxy von einem Webserver unterscheidet

Die Hauptaufgabe von HAProxy besteht darin, Kommunikation zu vermitteln und Datenverkehr zu steuern – nicht darin, wie ein Webserver Website-Dateien auszuliefern oder Anwendungscode auszuführen. In der Praxis ist es den Webservern oder Anwendungsprozessen vorgeschaltet, die die Antworten erzeugen. Es ersetzt auch weder eine Datenbank noch deren Replikationsmechanismus.

NGINX und Apache HTTP Server können ebenfalls als Reverse Proxy arbeiten und zugleich die Rolle eines Webservers übernehmen. Bei der Auswahl geht es daher nicht einfach darum, welches Werkzeug grundsätzlich besser ist. HAProxy kommt sinnvollerweise infrage, wenn eine separate Schicht für die Lastverteilung von TCP- oder HTTP-Verkehr, die Zustandsprüfung der Backend-Server und Regeln zur Weiterleitung von Verbindungen benötigt wird.

Für eine einzelne kleine Website kann der vorhandene Webserver oder der Load Balancer des Cloud-Anbieters ausreichen. HAProxy hinzuzufügen bedeutet, eine weitere Komponente zu betreiben, die aktualisiert und überwacht werden muss und deren Konfiguration gepflegt werden muss.

Was vor dem Einsatz zu prüfen ist

Eine einzelne HAProxy-Instanz kann zum zentralen Ausfallpunkt werden: Ist sie nicht verfügbar, können Nutzer auch funktionierende Anwendungsserver nicht mehr erreichen. In einem System, das hohe Verfügbarkeit erfordert, sind deshalb auch redundante Proxy-Instanzen und ein Mechanismus zur Umschaltung des Datenverkehrs zwischen ihnen nötig.

Prüfe vor dem Produktivbetrieb vier Punkte:

  1. Backend-Tests: Erkennen sie, wenn die Anwendung nicht betriebsbereit ist, oder prüfen sie nur, ob ein Port erreichbar ist?
  2. Limits und Timeouts: Wie viele Verbindungen nimmt das System an, und wie lange wartet es auf eine Antwort?
  3. Client-Adresse: Wie erhält die Anwendung die tatsächliche IP-Adresse des Clients, und welchen Proxy-Headern darf sie vertrauen?
  4. Beobachtbarkeit: Lassen sich anhand von Logs und Metriken Fehler, Verzögerungen und Überlastung erkennen?

Prüfe in der offiziellen Dokumentation der verwendeten HAProxy-Version, welche Funktionen verfügbar sind und welche Konfigurationssyntax gilt. Führe den ersten Test mit zwei Anwendungsinstanzen durch: Schalte eine davon bei kontrolliertem Datenverkehr ab und prüfe sowohl die Reaktion des Proxys als auch das Verhalten der Nutzersitzungen.

Siehe auch: Was ist 2FA?

Lesen Sie auch

Wie PHP-FPM PHP-Anfragen verarbeitet, sich vom Webserver unterscheidet und wie du Prozesse an Last und Hosting-Ressourcen anpasst.
BIND ist offene DNS-Serversoftware. Erfahre, welche Aufgaben sie übernimmt und wann sich der Betrieb eines eigenen Servers lohnt.
Was Polens REGON-Register und seine Kennnummer bedeuten, wie sie sich von NIP und KRS unterscheiden und wie Sie Unternehmensdaten prüfen.