HAProxy ist ein Open-Source-Load-Balancer, der jeden TCP-basierten Dienst ausgleichen kann . Es wird häufig zum Ausgleichen von HTTP verwendet und kann dabei helfen, Verkehrsprobleme auf Ihrem Webserver zu lösen. So richten Sie es ein.
Was ist HAProxy?
Load-Balancer wie HAProxy ermöglichen es Ihnen, den Datenverkehr auf mehrere Server aufzuteilen, was die Handhabung erleichtert. Anstatt Ihre IP auf Ihren Webserver zu verweisen, verweisen Sie sie auf einen HAProxy-Server, der entscheiden würde, wohin sie von dort gesendet wird. HAProxy ist sehr leichtgewichtig und benötigt nicht viele Ressourcen für den Betrieb, sodass Sie einen einzigen Load Balancer für viele Backend-Server verwenden können. Idealerweise möchten Sie, dass sowohl Ihr HAProxy-Server als auch Ihre Webserver im selben Rechenzentrum vom selben Cloud-Anbieter gehostet werden, um die Latenz zu reduzieren.
HAProxy macht Ihr Netzwerk außerdem widerstandsfähiger. Wenn ein Webserver ausfällt, kann HAProxy den Datenverkehr an den Rest weiterleiten, während Sie das Problem diagnostizieren. Damit es wirklich widerstandsfähig ist, sollten Sie einen HAProxy-Backup-Server haben, falls Ihr Load Balancer ausfällt.
Selbst mit HAProxy möchten Sie oft immer noch ein vollständiges Site-CDN davor haben, sowohl um zusätzliche Last zu bewältigen als auch mehrere Points of Presence näher am Endbenutzer zu haben.
So richten Sie HAProxy Load Balancing ein
Installieren Sie zunächst HAProxy über den Paketmanager Ihrer Distribution. Für Debian-basierte Systeme wie Ubuntu wäre das:
apt-get install haproxy Werbung
Als Nächstes müssen Sie es aktivieren, indem Sie das Init-Skript unter /etc/default/haproxy bearbeiten und ENABLED auf 1 setzen:
ENABLED=1
Wenn Sie nun den Dienst haproxy ausführen, sollten Sie sehen Sie, dass es aktiviert und bereit für die Konfiguration ist. Wir beginnen mit der Archivierung der Standardkonfigurationsdatei:
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.old
Erstellen Sie an ihrer Stelle eine neue Konfigurationsdatei und beginnen Sie indem Sie einige globale Einstellungen hinzufügen:
global log 127.0.0.1 local0 notice maxconn 2000 user haproxy group haproxy stats enable stats uri /haproxy?stats stats realm HAProxy Statistics stats auth admin:password
Die Protokolleinstellung gibt den Syslog-Server an, an den HAProxy Protokolle sendet. Um dies nutzen zu können, muss ein Server wie rsyslog ausgeführt werden. Die Einstellung maxconn gibt die maximale Anzahl gleichzeitiger Verbindungen an, und Benutzer und Gruppe geben an, als welcher Unix-Benutzer HAProxy fungiert.
Die letzten Zeilen schalten die integrierte Statistikseite von HAProxy ein, die Sie anzeigen können, indem Sie in Ihrem Browser zur URI navigieren. In diesem Fall wäre das http://your_ip/haproxy?stats, aber Sie können hier eine Demo davon ansehen.
Als Nächstes legen wir die Standardkonfiguration fest, die für alle gilt Listen blocks, wenn sie keine Änderungen daran vornehmen:
Standardwerte Log globaler Modus http-Option httplog-Option Dontlognull Wiederholungen 3 Option Redispatch Timeout Connect 5000 Timeout Client 10000 Timeout Server 10000
Wir setzen die Einstellung die Standardeinstellung, um die globale Protokolleinstellung zu verwenden, mit HTTP zu arbeiten und einige Einstellungen in Bezug auf Verbindungszeitüberschreitungen festzulegen.
Wir erstellen einen Front-End-Block, der die schwere Arbeit übernimmt und die Verbindungen zum Back-End weiterleitet:
Front-End-Proxy bind *:80 # ACL-Funktionsdeklarationen acl is_abuse src_http_req_rate(Abuse) ge 10 acl inc_abuse_cnt src_inc_gpc0(Abuse) gt 0 acl Abuse_cnt src_get_gpc0(Abuse) gt 0 # Regeln tcp-request connection-table-pre ablehnen, wenn Abuse_cnt http-Anfrage ablehnen, wenn Abuse_cnt http-Anfrage ablehnen, wenn is_abuse inc_abuse_cnt Option httpclose Option forwardfor use_backend Appname Werbung
Die erste Zeile bindet dieses Frontend an Port 80, wo HAProxy abhört.
< p>Die nächsten beiden Abschnitte dienen der Ratenbegrenzung. Zuerst werden die Funktionen der Access Control List (ACL) deklariert, die feststellen, ob eine IP-Adresse missbräuchlich ist. Dann wird eine Verbindung durch eine Reihe von Regeln abgelehnt, wenn zu viele Anfragen gestellt werden.
Die Option forwardfor leitet die IP-Adresse des Clients an den Server weiter. Da HAProxy als Reverse-Proxy fungiert, würde Ihr nginx-Server nur die IP-Adresse Ihres HAProxy-Servers sehen. Diese Option setzt den X-Forwarded-For HTTP-Header auf die IP-Adresse des Clients.
Und schließlich legen wir diesen Front-End-Block so fest, dass er den Back-End-“App-Name,” die wir erstellen müssen. Der Back-End-Block definiert einfach die Server, an die weitergeleitet werden soll, zusammen mit einigen Optionen:
Back-End-Appname your_ip:80 Balance Roundrobin-Cookie SERVERNAME Insert Server web1 web1_ip:80 check Cookie web1 Server web2 web2_ip:80 check Cookie web2
Die Balance-Direktive definiert, wie HAProxy Anfragen zwischen Servern verteilt. Die gebräuchlichste Option ist Roundrobin, bei der die Verbindungen nacheinander über jeden Server rotiert werden. Wenn Sie Probleme mit dem Gleichgewicht haben, können Sie die Option mindconn verwenden, die basierend auf gleichzeitigen Verbindungen auswählt. Wenn Nutzer über mehrere Verbindungen auf denselben Server zugreifen müssen, können Sie die Quelloption verwenden, die basierend auf einem Hash der IP-Adresse des Clients auswählt.
Werbung
Die letzten beiden Zeilen weisen diesem Listening-Block Server zu. Sie geben ihnen einen Namen (web1 und web2), geben ihre Adressen an und listen dann einige Optionen auf. Hier verwenden wir den Check-Parameter, um sicherzustellen, dass der Server fehlerfrei ist und Verbindungen akzeptiert, und den Cookie-Parameter, um den SERVERNAME-Cookie (den wir direkt oben eingefügt haben) auf den Namen des Servers zu setzen, der für die Sitzungsbindung verwendet wird (also die Benutzer wechselt nicht den Server, während er Ihre Site nutzt). Die Option “Quellenausgleich” erzielt denselben Effekt.
Und da wir die Ratenbegrenzung verwenden, benötigen wir tatsächlich ein anderes Back-End zum Speichern von IP-Adressen:
Back-End Abuse Stick-Table IP-Größe 100K ablaufen 30m speichern gpc0,http_req_rate(10s)
Dies leitet keine Verbindungen weiter; Es fungiert als Tabelle zum Speichern von Adressen. Adressen werden nach 30 Minuten geleert, sodass als missbräuchlich eingestufte Adressen für 30 Minuten gesperrt werden.
Schließlich können Sie den HAProxy-Dienst starten, indem Sie Folgendes ausführen:
Service-Haproxy-Start