Wie mache ich redundante Load Balancer?

27

Ich verstehe, dass der Zweck von Load Balancern darin besteht, die Last zwischen Ihren Servern zu verteilen und den Zustand der Instanz usw. im Auge zu behalten. 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önnen, 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 Nginx verwenden?

Sherzod
quelle
Ganz oben in Ihrer Architektur gibt es keine "Load Balancing Load Balancer". Sie müssen lediglich die LBs redundant auslegen und eine Hochverfügbarkeitslösung einrichten, um Ausfälle wie bei den meisten Clustering-Typologien zu behandeln.
Xavier Lucas

Antworten:

32

Es gibt verschiedene Möglichkeiten, um die HA (Hochverfügbarkeit) eines Load Balancers zu erreichen - oder in Bezug auf 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-Adresse her. Sie möchten also die IP-Adresse von einer bestimmten Box trennen - z. B. eine virtuelle IP-Adresse erstellen. Diese IP wird 192.168.100.100 sein.

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

Nehmen wir als Beispiel keepalived - zwei keepalived-Dienste, von denen jeder auf einer eigenen Box ausgeführt wird - und die miteinander kommunizieren. Diese Kommunikation wird oft als Herzschlag bezeichnet.

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

Wenn ein Keepalived nicht mehr reagiert (entweder der Dienst fällt aus irgendeinem Grund aus oder die Box springt ab oder fährt herunter), bemerkt Keepalived auf einem anderen Rechner einen fehlenden Heartbeat und geht davon aus, dass der andere Knoten tot ist, und führt Failover-Aktionen aus. Diese Aktion wird in unserem Fall die Floating-IP ansprechen.

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

Das Schlimmste, was in diesem Fall passieren kann, ist der Verlust von Sitzungen für Clients, die jedoch wieder 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, und wenn dies möglich ist, bemerken die Benutzer nichts, außer möglicherweise eine kurze Verzögerung.

Ein weiterer Nachteil dieses Setups ist das geteilte Gehirn - wenn beide Boxen online sind, die Verbindung jedoch getrennt ist und beide Boxen dieselbe IP-Adresse aufweisen. Dies wird häufig durch eine Art Fencing-Mechanismus (SCSI-Reservierung, IPMI-Neustart, Stromausfall der intelligenten PDU, ...) oder durch eine ungerade Anzahl von Knoten behoben, bei denen die Mehrheit der Cluster-Mitglieder am Leben bleiben 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 anhalten 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 Load Balancer auch horizontal skalieren. Dies funktioniert, indem jede Ihrer beiden Boxen BGP mit Ihren Routern spricht. Jede Box muss eine virtuelle IP (192.168.100.100) ankündigen und der Router wird den Datenverkehr über ECMP ausgleichen. Wenn eine Maschine abstürzt, hört sie auf, VIP-Werbung zu schalten, was wiederum Router davon abhält, Datenverkehr an sie zu senden. Das einzige, worauf Sie in diesem Setup achten müssen, ist, die IP-Werbung zu beenden, wenn der Load Balancer selbst abstirbt.

Jakov Sosic
quelle
3

Wenn Sie Nginx als Load Balancer verwenden, können Sie der in diesem Beitrag beschriebenen Umleitung folgen, indem Sie Ihre Konfiguration so ändern, dass ein Timeout ohne Antwort erkannt wird:

Nginx Automatic Failover Load Balancing

Theoretisch sollten in einer HA-Umgebung mehrere Lastausgleichscluster die Aufrechterhaltung des Dienstes ermöglichen, wenn einer ausfällt.

Hoffe das hilft.

user4657
quelle
2

Hardware-Load-Balancer unterstützen seit Jahren "Aktiv / Passiv" - oder "Aktiv / Aktiv" -Einstellungen. In beiden Fällen werden sie dann aus Sicht der Ebene 1/2 parallel eingerichtet. Aktiv / Passiv verwendet die beschriebenen Überwachungs- / Keepalive-Mechanismen , active / active kann auf verschiedene Arten implementiert werden. Um als einzelne IP am Frontend zu erscheinen, können zwei oder mehr Balancer, sofern sie alle / beide online sind, Folgendes tun:

  • Selektive Beantwortung von ARP-Anfragen an die gemeinsam genutzte IP-Adresse basierend auf einem hat der Quell-MAC oder der IP-Adresse, wenn sich Clients im selben Netzwerk befinden
  • verhandeln untereinander, wer den Verkehr einer bestimmten neuen TCP-Verbindung behandelt
  • Lassen Sie doppelten oder fehlerhaften Layer 3-7-Datenverkehr rücksichtslos passieren und stützen Sie sich auf Client / Router-TCP-Stapel, um ihn zu sortieren

Ändern Sie dann den Modus, um den gesamten oder einen größeren Datenverkehr zu akzeptieren, wenn die Kommunikation mit dem / einem Partnergerät unterbrochen wird.

im Backend:

  • Jeder der Balancer verwendet im Normalbetrieb möglicherweise nur einen bestimmten Teilpool von Anwendungsservern
  • oder es können auch hier einfach doppelte Anfragen generiert werden ...
  • oder es kann eine Verhandlung zwischen Balancern erfolgen
Rackandboneman
quelle