
Ich verstehe, dass der Zweck von Lastverteilern darin besteht, die Last zwischen Ihren Servern auszugleichen und den Zustand der Instanzen usw. zu überwachen. Aber was passiert, wenn der Lastverteiler selbst ausfällt? Wie richten Sie redundante Lastverteiler ein? (Lastverteiler zum Lastenausgleich?)
Ich sehe zwar, dass DNS-Integritätsprüfungen nützlich sein könnten, aber es gibt offensichtlich erhebliche Latenzprobleme, nicht wahr?
Dies setzt voraus, dass Sie keine Dienste von Drittanbietern wie AWS ELB oder ähnliches verwenden. Was tun, wenn Sie beispielsweise nur Nginx verwenden?
Antwort1
Es gibt mehrere Möglichkeiten, HA (Hochverfügbarkeit) eines Load Balancers – oder in diesem Zusammenhang eines jeden Dienstes – zu erreichen. Nehmen wir an, Sie haben zwei Maschinen 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 sich um das automatische Failover/Failback der IP-Adresse kümmert. Einige der einfachsten Dienste für Unix sind (u)carp und keepalived, einige der komplexeren sind beispielsweise RedHat Cluster Suite oder Pacemaker.
Nehmen wir Keepalived als Beispiel – zwei Keepalived-Dienste – jeder läuft auf seiner eigenen Box – und sie kommunizieren miteinander. Diese Kommunikation wird oft als Heartbeat 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 wird heruntergefahren), bemerkt das Keepalived auf der anderen Box verpasste Heartbeats, geht davon aus, dass der andere Knoten tot ist, und führt Failover-Maßnahmen aus. Diese Aktion wird in unserem Fall die Floating-IP aktivieren.
| VIP |
------------------ -------------- | Box B |
| IP2 |
Der schlimmste Fall, der in diesem Fall eintreten kann, ist der Verlust von Sitzungen für Clients, die sich aber erneut verbinden können. Wenn Sie das vermeiden möchten, müssen zwei Load Balancer in der Lage sein, Sitzungsdaten untereinander zu synchronisieren. Wenn dies möglich ist, werden die Benutzer davon nichts bemerken, außer vielleicht eine kurze Verzögerung.
Eine weitere Gefahr dieser Konfiguration ist Split Brain – wenn beide Boxen online sind, aber die Verbindung unterbrochen ist, und beide Boxen dieselbe IP-Adresse anzeigen. Dies wird häufig durch eine Art Fencing-Mechanismus (SCSI-Reservierung, IPMI-Neustart, intelligente PDU-Stromabschaltung usw.) oder eine ungerade Anzahl von Knoten gelöst, bei denen die Mehrheit der Clustermitglieder aktiv sein muss, damit der Dienst gestartet werden kann.
| VIP | | VIP |
| Box A | | Box B |
| IP1 | | IP2 |
Komplexere Clusterverwaltungssoftware (wie Pacemaker) kann ganze Dienste 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 weitere Möglichkeit – wenn Sie Router in der Nähe Ihrer Lastverteiler steuern – ist die Verwendung von ECMP. Mit diesem Ansatz können Sie auch Lastverteiler horizontal skalieren. Dies funktioniert, indem jede Ihrer beiden Boxen BGP mit Ihrem/Ihren Router(n) kommuniziert. Jede Box muss eine virtuelle IP-Adresse (192.168.100.100) bekannt geben und der Router gleicht den Verkehr über ECMP aus. Wenn eine Maschine ausfällt, wird sie die Bekanntgabe von VIP beenden, was wiederum dazu führt, dass Router keinen Verkehr mehr an sie senden. Das Einzige, worauf Sie bei diesem Setup achten müssen, ist, die Bekanntgabe der IP-Adresse zu beenden, wenn der Lastverteiler selbst ausfällt.
Antwort2
Wenn Sie Nginx als Ihren Lastenausgleich verwenden, sollten Sie der in diesem Beitrag beschriebenen Weiterleitung folgen können, indem Sie Ihre Konfiguration so ändern, dass ein Timeout ohne Antwort erkannt wird:
Nginx automatischer Failover-Lastausgleich
Wenn Sie über eine HA-Umgebung verfügen, sollten theoretisch mehrere gruppierte Load Balancer die Aufrechterhaltung des Dienstes ermöglichen, wenn einer ausfallen sollte.
Hoffe das hilft.
Antwort3
Hardware-Load Balancer unterstützen seit Jahren „Aktiv/Passiv“- oder „Aktiv/Aktiv“-Setups, in beiden Fällen werden sie dann aus Layer-1/2-Perspektive parallel eingerichtet... Aktiv/Passiv verwendet Überwachungs-/Keepalive-Mechanismen wie beschrieben, Aktiv/Aktiv kann auf zahlreiche Arten implementiert werden. Um im Frontend als einzelne IP zu erscheinen, könnten zwei oder mehr Balancer, solange sie alle/beide online sind, Dinge tun wie:
- Beantworten Sie ARP-Anfragen an die gemeinsam genutzte IP selektiv, basierend auf der Quell-MAC- oder -IP-Adresse, wenn sich die Clients im selben Netzwerk befinden
- verhandeln untereinander, wer den Verkehr einer bestimmten neuen TCP-Verbindung handhabt
- doppelten oder fehlerhaften Layer 3-7-Datenverkehr unbedacht zulassen und sich auf die TCP-Stacks von Client und Router verlassen, um das Problem zu lösen
Und ändern Sie dann ihren Modus, um den gesamten oder mehr Datenverkehr zu akzeptieren, wenn die Kommunikation mit dem/einem Partnergerät verloren geht.
auf der Backend-Seite:
- Jeder der Balancer kann im Normalbetrieb nur einen bestimmten Subpool von Anwendungsservern verwenden.
- oder es könnten auch hier einfach doppelte Anfragen generiert werden ...
- oder es könnten Verhandlungen zwischen Balancern geführt werden