it-swarm.com.de

Wie mache ich redundante Load Balancer?

Ich verstehe, dass der Zweck von Load Balancern darin besteht, die Last zwischen Ihren Servern zu verteilen und den Zustand der Instanz usw. zu verfolgen. Aber was ist, wenn der Load Balancer selbst ausfällt? Wie richten Sie redundante Load Balancer ein? (Load Balancing Load Balancer?)

Ich konnte sehen, wie nützlich DNS-Integritätsprüfungen sein könnten, aber es gibt offensichtlich große Latenzprobleme, nicht wahr?

Dies setzt voraus, dass Sie keine Dienste von Drittanbietern wie AWS ELB oder ähnliches verwenden. Was tun, wenn Sie nur say Nginx verwenden?

28
Sherzod

Es gibt verschiedene Möglichkeiten, um eine HA (Hochverfügbarkeit) eines Load Balancers zu erreichen - oder diesbezüglich einen Dienst. Nehmen wir an, Sie haben zwei Computer mit IP-Adressen:

  • 192.168.100.101
  • 192.168.100.102

Benutzer stellen eine Verbindung zu einer IP her. Sie möchten also die IP von einer bestimmten Box trennen - z. B. eine virtuelle IP erstellen. Diese IP lautet 192.168.100.100.

Jetzt können Sie einen HA-Dienst auswählen, der das automatische Failover/Failback der IP-Adresse übernimmt. Einige der einfachsten Dienste für Unix sind (u) Karpfen und Keepalived, einige der komplexeren sind beispielsweise RedHat Cluster Suite oder Pacemaker.

Nehmen wir als Beispiel Keepalived - zwei Keepalived-Dienste - jeder läuft auf einer eigenen Box - und sie kommunizieren miteinander. Diese Kommunikation wird oft als Herzschlag bezeichnet.

|   VIP   |                           |         |
|  Box A  | ------v^-----------v^---- |  Box B  |
|   IP1   |                           |   IP2   |

Wenn ein Keepalived nicht mehr reagiert (entweder fällt der Dienst aus irgendeinem Grund aus oder die Box springt oder fährt herunter) - Keepalived auf einer anderen Box bemerkt verpasste Herzschläge und geht davon aus, dass ein anderer Knoten tot ist, und ergreift Failover-Aktionen. Diese Aktion in unserem Fall wird die schwebende IP aufrufen.

                                      |   VIP   |
    ------------------ -------------- |  Box B  |
                                      |   IP2   |

Der schlimmste Fall, der in diesem Fall auftreten kann, ist der Verlust von Sitzungen für Clients, die jedoch erneut eine Verbindung herstellen können. Wenn Sie dies vermeiden möchten, müssen zwei Load Balancer in der Lage sein, Sitzungsdaten zwischen ihnen zu synchronisieren. Wenn sie dies können, werden Benutzer nichts bemerken, außer möglicherweise eine kurze Verzögerung.

Eine weitere Gefahr dieses Setups ist Split Brain - wenn beide Boxen online sind, die Verbindung jedoch getrennt ist und beide Boxen dieselbe IP-Adresse anzeigen. Dies wird häufig durch einen Fencing-Mechanismus (SCSI-Reservierung, IPMI-Neustart, Smart PDU-Stromausfall, ...) oder eine ungerade Anzahl von Knoten behoben, bei denen die Mehrheit der Cluster-Mitglieder am Leben sein muss, damit der Dienst gestartet werden kann.

|   VIP   |                           |   VIP   |
|  Box A  |                           |  Box B  |
|   IP1   |                           |   IP2   |

Komplexere Cluster-Management-Software (wie Pacemaker) kann den gesamten Dienst verschieben (z. B. auf einem Knoten stoppen und auf einem anderen starten) - und auf diese Weise kann HA für Dienste wie Datenbanken erreicht werden.

Eine andere Möglichkeit - wenn Sie Router in der Nähe Ihrer Load Balancer steuern - ist die Verwendung von ECMP. Mit diesem Ansatz können Sie auch Load Balancer horizontal skalieren. Dies funktioniert, indem jede Ihrer beiden Boxen BGP mit Ihren Routern kommuniziert. Jede Box muss eine virtuelle IP (192.168.100.100) ankündigen, und der Router lädt den Datenverkehr über ECMP aus. Wenn eine Maschine ausfällt, werden keine VIP-Werbung mehr geschaltet, was wiederum dazu führt, dass Router keinen Datenverkehr mehr an sie senden. Das einzige, worauf Sie in diesem Setup achten müssen, ist, die Werbung für IP zu beenden, wenn der Load Balancer selbst stirbt.

33
Jakov Sosic

Wenn Sie Nginx als Load Balancer verwenden, sollten Sie der in diesem Beitrag beschriebenen Umleitung folgen können, indem Sie Ihre Konfiguration ändern, um ein Zeitlimit ohne Antwort zu erkennen:

nginx automatischer Failover-Lastausgleich

Wenn Sie eine HA-Umgebung haben, sollten theoretisch mehrere Cluster-Load-Balancer die Wartung des Dienstes ermöglichen, falls einer ausfallen sollte.

Hoffe das hilft.

3
user4657

Hardware-Load-Balancer unterstützen seit Jahren "Aktiv/Passiv" - oder "Aktiv/Aktiv" -Einstellungen. In beiden Fällen werden sie dann aus Sicht der Schicht 1/2 parallel eingerichtet. Aktiv/Passiv verwendet Überwachungs-/Keepalive-Mechanismen wie beschrieben , aktiv/aktiv kann auf zahlreiche Arten implementiert werden. Um als einzelne IP im Frontend zu erscheinen, können zwei oder mehr Balancer, solange sie alle/beide online sind, folgende Aktionen ausführen:

  • beantworten Sie ARP-Anforderungen selektiv an die gemeinsam genutzte IP basierend auf einem Has der Quell-MAC- oder IP-Adresse, wenn sich Clients im selben Netzwerk befinden
  • verhandeln Sie untereinander, wer den Datenverkehr einer bestimmten neuen TCP -Verbindung) verarbeitet
  • lassen Sie doppelten oder fehlerhaften Layer 3-7-Datenverkehr rücksichtslos geschehen und verlassen Sie sich auf Client/Router TCP-Stapel, um ihn zu sortieren

Ändern Sie dann den Modus so, dass der gesamte oder mehr Datenverkehr akzeptiert wird, wenn die Kommunikation mit dem/einem Partnergerät unterbrochen wird.

auf der Backend-Seite:

  • jeder der Balancer verwendet im Normalbetrieb möglicherweise nur einen bestimmten Unterpool von Anwendungsservern
  • oder doppelte Anfragen können auch hier einfach generiert werden ...
  • oder es kann eine Verhandlung zwischen Balancern durchgeführt werden
2
rackandboneman