Ist es möglich, mehrere Load Balancer zu verwenden, um den Datenverkehr auf meine Anwendungsserver umzuleiten?

9

Ich bin neu im Bereich Load Balancing und frage mich, ob es möglich ist, mehrere Load Balancer zu verwenden, um den Datenverkehr auf meine Anwendungsserver umzuleiten. Ich verstehe nicht wirklich, wie das gemacht werden kann. Sollte ein Domainname nicht eins zu eins mit der IP-Adresse eines bestimmten Servers übereinstimmen (in diesem Fall die IP eines Load Balancers)? Wenn jeder Load Balancing Server eine andere IP hat, wie kann die Anforderung von beiden Load Balancern (oder von 10 Load Balancern oder 50 oder 100) empfangen werden?

user3790827
quelle
Danke für Ihre Antwort. Wenn ich also mehrere Load Balancer verwenden möchte, um meinen Datenverkehr zu verarbeiten, muss ich nur für jeden einen anderen CNAME einrichten. Wenn ich 10 Load Balancer benötige, um den Datenverkehr zu meiner Site zu verarbeiten, ist dies der einzige Weg, dies zu tun.
user3790827
1
Ich empfehle, die Fragen mindestens einen Tag offen zu lassen, bevor sie geschlossen werden. Auch das ist normalerweise voreilig. Nur weil Sie eine Antwort erhalten haben, bedeutet dies nicht, dass es unbedingt die einzige (oder beste) ist. Wenn Sie Ihre Fragen und Antworten als beantwortet markieren, wird dies normalerweise weniger beachtet.
Andrew B
1
@Anatoly Ich habe noch keine Entscheidung getroffen. Ich habe die hier vorgestellten Lösungen überprüft und auch mit einigen meiner Freunde gesprochen, die mir andere Lösungen empfohlen haben. Ich denke, dass für meinen Anwendungsfall die bisher beste Lösung darin besteht, VPS-Server von einem billigen Anbieter wie DO oder Vultr zu verwenden, die keine virtuelle IP anbieten, und die von Algolia verwendete Methode für den Client-Lastausgleich zu verwenden. Ich brauche HA und Skalierbarkeit nur für die API, daher wäre es keine große Sache, wenn ich für jeden Load Balancer unterschiedliche Subdomains erstellen würde. Diese Endbenutzer des Widgets werden sie sowieso nie bemerken.
user3790827
@ user3790827 klingt wie ein Plan. Trotz der Art der Anforderungen mit HA und Failover gibt es zu viele Muster, jeder hat das gleiche Problem, aber nicht jeder hat SLA 99.9 (8 Stunden Ausfallzeit pro Jahr) oder höher. HA-Lösungen sind normalerweise teuer und der geschäftliche Kompromiss zwischen Verfügbarkeit und Kosten. Kunden akzeptieren normalerweise 99,9 und sind sich potenzieller Ausfallzeiten oder des geplanten Zeitrahmens bewusst. Selbst eine 100% ige Verfügbarkeit garantiert Ihnen keine Fehler bei Entwicklung / Bereitstellung / Sicherheit oder menschlichen Fehlern.
Anatoly
Ich habe untersucht, dass Google Chrome die DNS-Ungültigmachung und Abfrage im Falle eines 3-Sekunden-Timeouts erzwingt. Ich bin mir jedoch nicht sicher, wie sich andere Browser verhalten.
Anatoly

Antworten:

12

Die Verwendung von Round-Robin-DNS eignet sich nicht besonders für Hochverfügbarkeit. Wenn ein Server offline geschaltet wird, versuchen die Clients weiterhin, eine Verbindung herzustellen, und warten auf eine Zeitüberschreitung.

Es gibt andere Möglichkeiten, dies zu erreichen.
1) Aktive / Passive Load Balancer
Grundsätzlich verarbeitet ein Load Balancer den gesamten Datenverkehr für eine IP-Adresse.
Wenn dieser Balancer ausfällt, springt der passive Knoten ein und übernimmt die IP.
Beachten Sie, dass Load Balancer so gut wie nur Datenverkehr weiterleiten. Für kleine bis mittelgroße Websites kann dies also in Ordnung sein.

2) Aktiv / Aktiv-Load-Balancer
Auf beiden (oder vielen weiteren) Load-Balancern ist dieselbe Verkehrs-IP konfiguriert.
Eingehender Datenverkehr wird an alle Load Balancer gesendet, aber ein Algorithmus wählt aus, welcher Balancer reagieren soll. Alle anderen verwerfen diesen Datenverkehr.
Einfach ausgedrückt: Sie haben zwei Load Balancer:
Wenn die anfordernde IP mit einer geraden Zahl endet, antwortet Load Balancer A, andernfalls antwortet Load Balancer B.

Natürlich muss Ihre Infrastruktur dies unterstützen, und es entsteht Overhead, da Datenverkehr gesendet, aber verworfen wird.
Weitere Informationen, zB hier: http://community.brocade.com/t5/SteelApp-Docs/Feature-Brief-Deep-dive-on-Multi-Hosted-IP-addresses-in-Stingray/ta-p/73867

Schwindler
quelle
Wenn Sie sagen "Natürlich muss Ihre Infrastruktur dies unterstützen", meinen Sie, dass ich eine zusätzliche Maschine oder VM benötige, die Anforderungen an die Load Balancer sendet?
user3790827
2
@ user3790827 Die Infrastruktur ist in diesem Zusammenhang die Netzwerkausrüstung, nicht die Server. '
Jenny D
1
Ich plane die Verwendung eines Cloud-Anbieters, daher habe ich keine direkte Kontrolle über die physische Infrastruktur. Was soll ich von meinem vps-Dienstanbieter verlangen?
user3790827
1
Es gibt nur abstrakte Empfehlungen, da dies von einer Vielzahl von Details abhängt. Wir wissen nicht einmal, ob es sinnvoll ist, hier eine IP mit mehreren Hosts zu haben - vielleicht beträgt sein Datenverkehr nur einige hundert Mbit / s. Wenn Sie dies benötigen, würde ich die richtige Software evaluieren, die Anforderungen überprüfen und herausfinden, welcher Anbieter sie unterstützt. Würde DNS RR funktionieren? Sicher. Würde ich es benutzen? Hängt davon ab, welche Art von Verfügbarkeit der Eigentümer des Unternehmens, für das ich arbeite, anstrebt!
Fälscher
@faker Es tut mir leid, ich denke, es ist meine Schuld, weil ich nicht genug Details angegeben habe. Ich möchte ein Javascript-Skript erstellen, das in die Websites anderer Personen eingefügt wird und Verkehrsdaten sammelt (siehe Google Analytics). Außerdem wird auf den Server zugegriffen, um Statistiken für jede Seite anzuzeigen, auf die es geladen wird. Grundsätzlich gibt es eine Javascript-Datei, die für jede Website geladen wird, auf der sie verwendet wird.
user3790827
6

Die Hochverfügbarkeit mit Load Balancern wird üblicherweise mithilfe eines VIP-Protokolls ( Virtual IP Address ) implementiert, mit dem mehrere Hosts (dh Load Balancer) auf eine von mehreren möglichen Arten auf eine gemeinsame IP-Adresse antworten können (Variationen von Aktiv / Passiv, Aktiv / Aktiv). .

Es gibt eine gute Anzahl dieser Protokolle, die ich mit regulären Load Balancern am häufigsten gesehen habe, sind VRRP und NLB (sowie viele unscheinbare Blackbox-Protokolle in Appliances). Bei der Erweiterung auf Router und Firewalls kann es beispielsweise auch zu CARP , HRSP , GLSP kommen .

Diese Strategie bietet eine Reihe von Vorteilen gegenüber dem DNS-Lastausgleich, der eine einfachere Strategie darstellt (und in einer anderen Antwort behandelt wird).

Der DNS-Lastausgleich ist beispielsweise belastet mit:

  • der langsame Umsatz von DNS-Caching-Mechanismen
  • begrenzte Lastausgleichsalgorithmen (normalerweise nur Round-Robin)
  • das Auslagern der Lastausgleichsentscheidung an den Kunden (durch Zwischenspeichern des DNS-Datensatzes)
  • Langsames Entleeren von Dienstwarteschlangen, wenn ein Server (dh ein Load Balancer) aus der Rotation genommen wird (basierend auf DNS-Datensatz-TTLs, wie sie von ISPs und Clients verarbeitet werden )
  • Langsames Failover bei Ausfall des Load Balancers

Wenn Sie ein virtuelles IP-Protokoll für HA verwenden, haben Sie möglicherweise die Wahl, Folgendes zu erreichen:

  • Wahl des Lastausgleichsalgorithmus unter den Lastausgleichern
  • Serverzentrierte Lastausgleichsentscheidungen (Erleichterung beispielsweise von auf dem Dienstzustand basierenden Maßnahmen und Routing)
  • Schnelleres Entleeren von Servicewarteschlangen, wenn ein Load Balancer aus der Rotation genommen wird.
  • Sofortiges Failover bei Load Balancer-Fehler

Nur Sie wissen, welche Strategie und welches Protokoll am besten zu Ihrem Szenario passt.

ErikE
quelle
1
Ich möchte auch hinzufügen, dass einige Load Balancer das Einrichten von BGP-Sitzungen mit Routern in der Nähe unterstützen, sodass Sie Anycast- Lösungen einrichten können . Wenn der Load Balancer ausfällt oder auf andere Weise die Werbung für den VIP beendet (fehlgeschlagene Integritätsprüfung), gewinnt der nächstbeste Routing-Kandidat. Der letzte Satz dieser Antwort ist jedoch unbedingt erforderlich: Sie müssen wirklich mit den Netzwerkadministratoren Ihres Unternehmens sprechen.
Andrew B
Hier ist eine schöne Beschreibung dessen, was Sie im ersten Absatz beschreiben. Cisco.com/c/en/us/support/docs/application-networking-services/…
Martin Podval
2

Die Anforderungen: Eine praktische Lösung, die für Clouds oder jede Art von Umgebung geeignet ist, in der kein Zugriff auf Hardware-Load-Balancer, BGP-Protokolle und all diese Dinge möglich ist.

Die Nummer der Einkommensanfrage einer Anwendung ist unbekannt, sollte jedoch hoch genug sein, um eine erhöhte Lasterwartung ohne Angst zu erfüllen.

Lassen Sie uns eine Anwendung mit ähnlicher Last finden, z. B. Protokollierungsspeicher und Such-App. Ich habe einen gefunden .

Was sie wollen:

  1. Verteilen Sie die Last auf die Kollektoren
  2. Bieten Sie Fehlertoleranz, damit wir weiterhin Daten erfassen können, wenn einer der Kollektoren stirbt oder Probleme auftreten
  3. Skalieren Sie horizontal mit dem Wachstum unserer Protokollvolumina

Was haben sie versucht und über ELB gelernt:

  1. Funktioniert nicht wie erwartet
  2. Latenzprobleme aufgrund erhöhter Last
  3. Nicht genügend Überwachungsmöglichkeit
  4. Zu viele Einschränkungen (offene Ports und Protokollnummer)

Warum haben sie sich für Route53 entschieden:

  1. "Round Robin ist ein ziemlich einfacher Lastausgleich, aber unter Effizienzgesichtspunkten funktioniert er gut für uns."
  2. "Wir nutzen die Route 53-Failover-Integritätsprüfungen."
  3. "Wenn es ein Problem mit einem Sammler gibt, wird es von Route 53 automatisch aus dem Dienst genommen. Unsere Kunden sehen keine Auswirkungen."
  4. Bei Route 53 ist kein Vorwärmen erforderlich

Die Route 53 erwies sich für Loggly als die beste Möglichkeit, unsere Hochleistungssammler zu nutzen, da das Holzvolumen, die unvorhersehbaren Schwankungen und das stetige Wachstum unseres Geschäfts enorm sind. Es entspricht den Hauptzwecken der Kollektoren: Daten mit verlustfreier Netzwerkleitungsgeschwindigkeit zu erfassen und von der Elastizität aller AWS-Services zu profitieren, die wir bei Loggly verwenden.

Dieses spezielle Beispiel zeigt, dass in einigen Szenarien (Protokollkollektor, Werbedienst oder ähnliches) der Load Balancer redundant ist und die "DNS-Health-Check-Round-Robin-Lösung" ihre Aufgabe sehr gut erfüllt.


Mal sehen, was AWS zum DNS-Failover sagt :

Mit DNS Failover kann Route 53 einen Ausfall Ihrer Website erkennen und Ihre Endbenutzer an von Ihnen angegebene alternative oder Sicherungsspeicherorte umleiten. Route 53 DNS-Failover basiert auf Integritätsprüfungen, bei denen regelmäßig Internetanforderungen an Ihre Anwendungsendpunkte von mehreren Standorten auf der ganzen Welt gestellt werden, um festzustellen, ob jeder Endpunkt Ihrer Anwendung aktiv oder inaktiv ist.

Diese Technik macht ELB (nicht erforderlich, nur für eine Notiz) robuster, wiederum basiert es auf RR + Health Check:

Route 53 DNS-Failover behandelt alle diese Fehlerszenarien durch Integration in ELB hinter den Kulissen. Nach der Aktivierung konfiguriert und verwaltet Route 53 automatisch Integritätsprüfungen für einzelne ELB-Knoten.


Mal sehen, wie es hinter den Kulissen funktioniert . Die offensichtliche Frage ist, wie mit DNS-Caching umgegangen werden soll:

Das DNS-Caching kann hier jedoch immer noch ein Problem sein (siehe unseren vorherigen Beitrag, in dem das "Long Tail" -Problem behandelt wird), wenn TTL nicht von allen Ebenen zwischen Ihrem Client und Route 53 eingehalten wird. Sie können dann eine "Cache Busting" -Technik anwenden: Senden Sie eine Anfrage an eine eindeutige Domain

("http://<unique-id>.<your-domain>") 

und definieren Sie eine Platzhalterressource

Record "*.<your-domain>" to match it.

Algolia hat eine "Client-Wiederholungsstrategie" eingeführt, die ziemlich gut funktioniert, wenn Ihr Client (in Ihrem Fall JS) damit umgehen kann:

Am Ende haben wir eine grundlegende Wiederholungsstrategie in unseren API-Clients implementiert. Jeder API-Client wurde entwickelt, um auf drei verschiedene Computer zugreifen zu können. Jeder Benutzer wurde von drei verschiedenen DNS-Einträgen repräsentiert: USERIDID-1.algolia.io, USERID-2.algolia.io und USERID-3.algolia.io. Unsere erste Implementierung bestand darin, einen der Datensätze zufällig auszuwählen und im Fehlerfall erneut mit einem anderen zu versuchen.

Anatoly
quelle
1
Ich denke, Algolias Ansatz ist der beste für mein Budget und meine Anwendungsfälle. Normalerweise würde ich wieder unterschiedliche Subdomains für jeden Load Balancer verwenden, aber da nur das JS-Widget sie verwendet, wird der Endbenutzer den Unterschied nie bemerken.
user3790827
1
Jemand schlug außerdem vor, Cloudflares DNS cloudflare.com/features-optimizer zu verwenden, um den Datenverkehr zum Standby-Load-Balancer umzuleiten, sobald ein Fehler mit dem derzeit verwendeten Load-Balancer auftritt. cloudflare.com/dns
user3790827