Zum Inhalt springen
Proxy Types 6 Min. Lesezeit 799 Aufrufe

HAProxy

Entdecken Sie die Möglichkeiten von HAProxy für leistungsstarkes Load Balancing und Proxying. Lernen Sie, den Datenverkehr effizient zu verteilen, die Server-Integrität zu überwachen und die Anwendungszuverlässigkeit zu verbessern.

HAProxy

HAProxy (High Availability Proxy) ist ein quelloffener, hochleistungsfähiger TCP/HTTP-Lastverteiler und Proxy-Server, der den Netzwerkverkehr auf mehrere Backend-Server verteilt, um Leistung, Zuverlässigkeit und Serverkapazität zu maximieren. Er arbeitet sowohl auf Schicht 4 (TCP) als auch auf Schicht 7 (HTTP) des OSI-Modells und ermöglicht präzises Verkehrsmanagement, hohe Verfügbarkeit und effiziente Ressourcennutzung für Anwendungen und Dienste.

HAProxy ist bekannt für seine Geschwindigkeit, Stabilität und die Fähigkeit, sehr hohe Verkehrsaufkommen zu bewältigen. Er wird häufig vor Webservern, Anwendungsservern und Datenbankclustern eingesetzt, um eine gleichmäßige Verteilung der Client-Anfragen zu gewährleisten, Serverüberlastungen zu verhindern und nahtlose Wartungsarbeiten zu ermöglichen.

Lastverteilung mit HAProxy

Lastverteilung ist der Prozess der Verteilung des Netzwerkverkehrs auf eine Gruppe von Backend-Servern, bekannt als Serverfarm oder Cluster. HAProxy verwendet verschiedene Algorithmen, um zu bestimmen, welcher Server die nächste Anfrage erhält, mit dem Ziel, die Ressourcennutzung zu optimieren, den Durchsatz zu maximieren, die Antwortzeit zu minimieren und eine Überlastung einzelner Server zu vermeiden.

Wichtige Aspekte der HAProxy-Lastverteilung sind:

  • Algorithmusauswahl: HAProxy bietet mehrere Algorithmen, die den unterschiedlichen Anwendungsanforderungen gerecht werden.
  • Server-Gesundheitsprüfungen: Kontinuierliche Überwachung der Verfügbarkeit und Reaktionsfähigkeit der Backend-Server.
  • Server-Gewichtung: Priorisierung bestimmter Server, um mehr Traffic zu erhalten.

Lastverteilungsalgorithmen

HAProxy bietet eine Reihe von Algorithmen, die im backend-Abschnitt konfiguriert werden:

  • roundrobin: Verteilt Anfragen sequenziell an jeden Server in der Backend-Gruppe. Standardalgorithmus.
  • leastconn: Leitet neue Verbindungen an den Server mit den wenigsten aktiven Verbindungen. Optimal für langlebige Verbindungen.
  • source: Verwendet einen Hash der Quell-IP-Adresse, um den Server zu bestimmen. Stellt sicher, dass ein Client konsistent mit demselben Server verbunden ist, nützlich für zustandsbehaftete Anwendungen ohne explizite Session-Persistenz.
  • uri: Hash den linken Teil der URL (vor dem Abfragestring), um einen Server auszuwählen. Nützlich für Caching-Proxys.
  • hdr(<name>): Hash den Wert eines angegebenen HTTP-Headers.
  • random: Wählt zufällig einen Server aus.
backend web_servers
    balance roundrobin
    server web1 192.168.1.10:80 check
    server web2 192.168.1.11:80 check
    server web3 192.168.1.12:80 check

Proxying mit HAProxy

Proxying beinhaltet einen Vermittlungsserver, der im Namen eines Clients oder Servers agiert. HAProxy fungiert als Reverse Proxy, indem er Verbindungen von Clients akzeptiert und an Backend-Server weiterleitet, um dann die Antworten der Server an die Clients zurückzugeben. Diese Abstraktionsschicht bietet Sicherheits-, Leistungs- und Betriebs-Vorteile.

Layer 4 (TCP) Proxying

Auf Schicht 4 leitet HAProxy rohe TCP-Verbindungen weiter, ohne den Inhalt der Anwendungsschicht zu inspizieren. Dies ist geeignet für Nicht-HTTP-Dienste, Datenbanken oder benutzerdefinierte Protokolle, bei denen eine Inhaltsinspektion nicht erforderlich oder gewünscht ist.

listen mysql_cluster
    bind *:3306
    mode tcp
    balance leastconn
    server db1 192.168.1.20:3306 check
    server db2 192.168.1.21:3306 check

Layer 7 (HTTP) Proxying

Auf Schicht 7 kann HAProxy HTTP-Anfrage- und Antwort-Header, URLs und Cookies inspizieren und manipulieren. Dies ermöglicht erweiterte Funktionen wie inhaltsbasiertes Routing, SSL-Terminierung, URL-Rewriting und Session-Persistenz.

frontend http_frontend
    bind *:80
    mode http
    default_backend web_servers

HAProxy Konfigurationskomponenten

Die HAProxy-Konfiguration befindet sich typischerweise in /etc/haproxy/haproxy.cfg und ist in mehrere Abschnitte gegliedert.

global section

Der global-Abschnitt definiert prozessweite Parameter, wie z.B. Logging, Sicherheitseinstellungen und Leistungsgrenzen. Diese Einstellungen gelten für die gesamte HAProxy-Instanz.

global
    log /dev/log    local0 info
    maxconn 20000
    chroot /var/lib/haproxy
    pidfile /var/run/haproxy.pid
    user haproxy
    group haproxy
    daemon
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners

defaults section

Der defaults-Abschnitt legt Standardparameter für alle nachfolgenden listen-, frontend- und backend-Abschnitte fest. Dies reduziert die Konfigurationsredundanz.

defaults
    mode http
    log global
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms
    option httplog
    option dontlognull
    option http-server-close

frontend section

Ein frontend definiert den öffentlichen Einstiegspunkt, an dem HAProxy auf Client-Verbindungen lauscht. Es spezifiziert die IP-Adresse, den Port, das Protokoll (mode) und Regeln für das Routing von Anfragen an bestimmte Backends mittels Access Control Lists (ACLs).

frontend http_in
    bind *:80
    mode http
    acl host_app1 hdr(host) -i app1.example.com
    acl host_app2 hdr(host) -i app2.example.com

    use_backend app1_servers if host_app1
    use_backend app2_servers if host_app2
    default_backend default_web_servers

backend section

Ein backend definiert eine Gruppe von Servern, an die HAProxy Anfragen weiterleiten kann. Es beinhaltet den Lastverteilungsalgorithmus, Gesundheitsprüfungsparameter und die einzelnen Serverdefinitionen.

backend app1_servers
    balance leastconn
    option httpchk GET /healthz
    server s1 10.0.0.10:8080 check inter 2000 fall 3 rise 2
    server s2 10.0.0.11:8080 check inter 2000 fall 3 rise 2 backup
  • check: Aktiviert Gesundheitsprüfungen für den Server.
  • inter 2000: Prüft alle 2000ms.
  • fall 3: Markiert den Server nach 3 aufeinanderfolgenden fehlgeschlagenen Prüfungen als ausgefallen.
  • rise 2: Markiert den Server nach 2 aufeinanderfolgenden erfolgreichen Prüfungen als betriebsbereit.
  • backup: Der Server wird nur verwendet, wenn alle anderen Nicht-Backup-Server ausgefallen sind.

listen section

Ein listen-Abschnitt kombiniert die Funktionalitäten eines frontend und eines backend in einem einzigen Block. Dies wird oft für einfachere Konfigurationen oder für Dienste wie die Statistikseite von HAProxy verwendet.

listen stats_page
    bind *:8080
    mode http
    stats enable
    stats uri /haproxy?stats
    stats realm HAProxy\ Statistics
    stats auth admin:securepassword
    stats refresh 5s

Access Control Lists (ACLs)

ACLs sind leistungsstarke bedingte Regeln, die verwendet werden, um spezifische Kriterien in Client-Anfragen (z.B. Quell-IP, Host-Header, URL-Pfad, HTTP-Methode) abzugleichen. Sie ermöglichen dynamisches Routing, Content-Switching und Blockieren.

frontend website_frontend
    bind *:443 ssl crt /etc/haproxy/certs/mydomain.pem

    # ACLs based on path
    acl is_admin_area path_beg /admin
    acl is_api_v1   path_beg /api/v1

    # Route based on ACLs
    use_backend admin_backend if is_admin_area
    use_backend api_v1_backend if is_api_v1
    default_backend main_website_backend

Gesundheitsprüfungen

HAProxy überwacht kontinuierlich den Zustand der Backend-Server, um sicherzustellen, dass Anfragen nur an funktionierende Instanzen gesendet werden. Wenn ein Server Gesundheitsprüfungen nicht besteht, entfernt HAProxy ihn vorübergehend aus der Rotation, bis er sich erholt.

  • TCP-Prüfung (check): Grundlegende Port-Konnektivität.
  • HTTP-Prüfung (option httpchk): Sendet eine HTTP-Anfrage (z.B. GET /health) und erwartet einen gültigen HTTP-Statuscode (2xx oder 3xx).
  • SSL Hello-Prüfung (ssl-hello-chk): Prüft, ob ein SSL-Handshake hergestellt werden kann.

Erweiterte HAProxy-Funktionen

SSL-Terminierung und -Offloading

HAProxy kann die SSL/TLS-Verschlüsselung und -Entschlüsselung übernehmen und diese CPU-intensive Aufgabe von den Backend-Servern entlasten. Es entschlüsselt eingehenden HTTPS-Verkehr und leitet unverschlüsseltes HTTP an das Backend weiter, oder kann für End-to-End-SSL erneut verschlüsseln.

frontend https_in
    bind *:443 ssl crt /etc/haproxy/certs/mydomain.pem
    mode http
    default_backend web_servers

Sticky Sessions (Persistenz)

Sticky Sessions stellen sicher, dass die Anfragen eines Clients während seiner gesamten Sitzung konsistent an denselben Backend-Server weitergeleitet werden. Dies ist entscheidend für Anwendungen, die den Sitzungszustand auf einzelnen Servern verwalten.

  • Cookie-basierte Persistenz: HAProxy fügt ein Cookie in den Browser des Clients ein, das dann verwendet wird, um den korrekten Backend-Server für nachfolgende Anfragen zu identifizieren.
  • Quell-IP-Persistenz: Verwendet die Quell-IP-Adresse des Clients, um konsistent an denselben Server weiterzuleiten (weniger zuverlässig hinter NAT).
backend web_servers_sticky
    balance roundrobin
    cookie SERVERID insert indirect nocache
    server s1 10.0.0.10:80 check cookie s1
    server s2 10.0.0.11:80 check cookie s2

Inhaltsbasiertes Routing

Inhaltsbasiertes Routing leitet den Datenverkehr basierend auf spezifischen Attributen innerhalb der Client-Anfrage, wie dem angeforderten URL-Pfad, dem HTTP-Host-Header oder benutzerdefinierten HTTP-Headern, an verschiedene Backend-Server-Pools weiter. Dies erleichtert Microservices-Architekturen oder Multi-Tenant-Anwendungen.

(Beispiel bereits im frontend-Abschnitt mit acl host_app1 und use_backend gezeigt).

Hohe Verfügbarkeit von HAProxy selbst

Während HAProxy für die hohe Verfügbarkeit von Backend-Diensten konzipiert ist, können HAProxy-Instanzen selbst durch externe Mechanismen wie VRRP (Virtual Router Redundancy Protocol) mit Tools wie Keepalived hochverfügbar gemacht werden. Dies erzeugt eine schwebende IP-Adresse, die im Falle eines Ausfalls automatisch zwischen primären und sekundären HAProxy-Servern wechselt und so einen kontinuierlichen Lastverteilungsdienst gewährleistet.

HAProxy vs. Nginx (Kurzer Vergleich)

Sowohl HAProxy als auch Nginx können als Reverse Proxys und Lastverteiler fungieren. Ihre primären Designziele und typischen Einsatzmuster unterscheiden sich jedoch.

Merkmal HAProxy Nginx
Primäre Rolle Dedizierter, hochleistungsfähiger Lastverteiler & Proxy Webserver, Reverse Proxy, Lastverteiler, Cache
Leistung Extrem hoch (besonders L4/TCP) Hoch (guter Allrounder)
Konfiguration Speziell für Lastverteilung, umfangreiche Optionen Allgemeiner, flexibler
Caching Begrenzt (erfordert externe Module) Nativ, leistungsstarkes HTTP-Caching
Statische Dateibereitstellung Nicht der primäre Fokus Exzellent, hochoptimiert
Modularität Relativ monolithisch Hochgradig modular mit einem reichen Ökosystem an Modulen
SSL-Terminierung Ja Ja
WebSockets Ja Ja

HAProxy wird oft für kritische Umgebungen mit hohem Datenverkehr gewählt, in denen reine Lastverteilungsleistung und robuste Gesundheitsprüfungen von größter Bedeutung sind. Nginx wird häufig verwendet, wenn eine Kombination aus Web-Serving, Caching und Reverse-Proxying neben der Lastverteilung erforderlich ist. Es ist üblich, sie zusammen einzusetzen, wobei HAProxy als primärer Lastverteiler fungiert und Nginx spezifisches Proxying auf Anwendungsebene oder statische Inhalte handhabt.

Aktualisiert: 03.03.2026
Zurück zur Kategorie

Testen Sie unsere Proxys

20.000+ Proxys in über 100 Ländern weltweit

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.