Active-Active Load Balancer | Software-based

anonemuss

New Member
Hallo zusammen,

ich suche nun schon seit längerer Zeit nach einer Möglichkeit ein Loadbalancer-Setup auf 2+ Servern zu konfigurieren, das als Active-Active Cluster zusammenarbeitet. (so ähnlich wie HardwareLBs, die in einem Stack zusammenarbeiten können.) Trotz längerem Suchen habe ich nur einige Hinweise im Netz gefunden, die allerdings größtenteils nur enthalten, dass es möglich ist/wäre. :confused:
Mir ist durchaus klar, dass man in so einem Fall z.B. gleiche Mac bzw. Ips benötigen würde und dann durch eine Bedingung entschieden wird welcher LB sich um den Request kümmert. (Bin auch gerne offen für andere Möglichkeiten, leider ist das irgendwie die Einzige, die ich zu dem Thema gefunden habe.)
Eigentlich wollte ich Haproxy auf 2 Server installieren, die dann eben im Active-Active Setup die Last aufteilen und die Requests an die 3 Backend-Server verteilen. (Und sofern die Last pro LB unter 49% bleibt, kann auch nur ein LB die gesamte Last tragen. --> Wenn einer ausfällt bleibt das System trotzdem mit voller Leistung online.) :)

Somit ergibt sich die Frage, ob jemand vielleicht weiß, wo man eine Dokumentation bzw. Anleitung für so ein Setup mit Haproxy (oder einer anderen LB-Software) findet? (Optional: Session-persistence wäre auch noch wichtig. (Siehe Websiten mit Login usw...) :D

Mit freundlichen Grüßen
Anonemuss
 
Reicht für den Fall nicht ein Active/Passive-Paar aus und damit eine reguläre HAProxy-Konfiguration mit einer gängigen Cluster-Konfiguration?

Eine gemeinsame IP-Adresse, die entsprechend geschwenkt wird. Der aktive Loadbalancer verteilt dann die Pakete auf die 3 Backends.

Wenn du das hosten lassen möchtest, muss der Anbieter auch einige Voraussetzungen erfüllen (Failover-IP oder VRRP...)

Gruß
Markus
 
Danke für die schnelle Antwort.

Im Moment würde das wohl ausreichen, allerdings möchte ich diese Konfiguration schon zukunftsorientiert aufbauen.

Auf diesen Backend-Servern laufen mehrere Websiten, Datenbanken, diverse Dienste und sogar eine FileCloud. Mit ansteigendem Traffic wird eine Active Passive Konfiguration irgendwann nicht mehr ausreichen.
Dann müssten man einen LB dazunehmen und entweder auch als Active oder als Passive zusätzlich laufen lassen.

Abgesehen davon interessiert mich dieses Thema sehr und daher möchte ich gerne gleich die professionellere Variante nutzen/probieren/erlernen.
Das bestimmte Voraussetzungen notwendig sind ist klar, aber solange diese realisierbar sind, sehe ich keinen Grund mich der Herrausforderung nicht zu stellen und da ich nach monatelangem googlen nur mangelhafte Informationen gefunden habe, wende ich mich hier an die Community. (Die meisten Beiträge im Netz verweisen auf Hardware Load Balancer Stacks :( )

VRRP zu nutzen um einen Stack aus den LBs zu kreieren, der die Last auf die Mitglieder des Stacks verteilt, wäre schon was tolles und auch das eigentlich Ziel. :D

MFG
Anonemuss

PS: Eigentlich wäre ein DNS-Server auch eine Lösung, da die aufgerufene Domain mitgesendet wird. Der installierte DNS könnte mit einer Failover Konfiguration laufen und je nach Lastenverteilung dem Client die IP des jeweiligen Backend Server vorgeben und somit einen bestimmten Backend-Server vorgeben. Wobei das eher eine theoretische Überlegung meinerseits ist.
 
Last edited by a moderator:
Mit ansteigendem Traffic wird eine Active Passive Konfiguration irgendwann nicht mehr ausreichen.
Dann müssten man einen LB dazunehmen und entweder auch als Active oder als Passive zusätzlich laufen lassen.

Abgesehen davon interessiert mich dieses Thema sehr und daher möchte ich gerne gleich die professionellere Variante nutzen/probieren/erlernen.

Active/Passive ist also unprofessionell? :-P

Wie schnell ist denn eure Anbindung das ein einzelner HAProxy das nicht mehr schaffen soll?

Active/Active ist in meinen Augen überbewertet, in der Regel ist es nämlich so: Fällt bei Active/Active ein Knoten aus und war die Last vorher groß genug ist es danach nicht einfach nur 'langsamer' sondern bricht komplett zusammen. War die Last vorher nicht so groß hätte es das Active/Active auch nicht gebraucht.
 
Danke für die schnelle Antwort. :)

Mit "professionellere Variante" wollte ich keinenfalls unterstellen, das Active-Passive unprofessionell sei, damit meinte ich eigentlich eher, dass ich nach einer Möglichkeit suche, die auch in (sehr)großen Umgebungen mit hohem Traffic funktioniert, in denen 1 LB nicht ausreicht.

Bezüglich der Frage nach meiner Anbindung:
1Gbit/s pro Server im Moment (auch das könnte man aufrüsten), allerdings möchte ich darauf hinweisen, dass ich bereits erwähnt habe, dass es mir hauptsächlich um Skalierbarkeit geht und ja, im Moment würde Active-Passive ausreichen. Aber der Traffic wird steigen und dann möchte ich nicht die Konfiguration komplett ändern müssen. Daher auch die Suche nach einer Active Active Lösung.

Active-Passive Rechenbeispiel:
Rechenbeispiel: Backend Cluster nicht mit 3, sondern 100 Servern die jeweils mit 1GBit/s angebunden sind.
Selbst wenn ich nun ein Active-Passive Setup von LBs mit einer Anbindung der LBs von 10Gbit/s hätte, sind dabei die LBs das schwächste Glied in der Kette und eigentlich kann ich (wenn man Rechenleistung und Art der Dienste außer Acht lässt) 90 Server (bzw. 80 wenn man die Failover Server bedenkt) nicht nutzen. Wenn diese Leistung aber zu Spitzenzeiten benötigt wird, stürzt zuerst LB1 ab, LB2 übernimmt und dann stürzt auch der ab. --> Die Dienste sind offline. :(

Und das nächste Problem bei Active-Passive ist, dass es nicht gut skalierbar ist.(von Hardware aufrüsten bzw. Tausch mal abgesehen)
Egal wieviele LBs vorhanden sind, es ist immer nur einer aktiv. Der Rest wartet einfach nur auf einen Failure um dann zu übernehmen.

Sollte die Last so steigen, dass ein LB mehr als 49-50% der Gesamtlast verwaltet, bräuchte ich dann sowieso mehr LBs.

mfG
Anonemuss
 
Hallo,

ich bleibe dabei - dein HAProxy-Pärchen wird das geringste Problem mit dem Durchsatz sein (Wenn ich das richtig sehe schon mit nem C2D und einem Prozess 10GBit/s - http://www.haproxy.org/10g.html).

Die von dir aufgelisteten Dienste gehören gegebenenfalls auch nicht hinter einen Loadbalancer sondern "hinter" den Anwendungs- / Webserver in die MZ.

Gehen wir davon aus, dass du eine hochverfügbare Anbindung mit 10 GBit/s befeuern musst. Wenn in "deinem" Scenario die Last < 49% bleiben muss, dann muss ja jeder deiner zwei Server "nur" 5 GBit/s schaffen.

Da kannst du auch einfach eine "Über-Kreuz"-Active-/Passive-Lösung wählen, die dann aber auch noch einfach zu betreiben ist.

Beispiel:
- Loadbalancer A ist aktiv für Webseiten und Dienst XY zuständig
- Loadbalancer B ist aktiv für Dienste A-C zuständig

Fällt einer der Loadbalancer aus, übernimmt er die 5 GBit/s vom Anderen.
Ich würde das Ganze wohl mit Pacemaker aufbauen (also quasi sowas https://www.digitalocean.com/commun...nc-pacemaker-and-floating-ips-on-ubuntu-14-04) und zwei Ressourcen-Gruppen verwenden.

Keep it simple :)

Gruß
Markus
 
Bei den meisten Diensten die im Internet betrieben werden, ist aus Serversicht oft der Traffic ausgehend deutlich größer als eingehend.
Wenn dein Szenario dem gleichen Trafficprinzip folgt, sollte man sich DSR (Direct-Server-Return) anschauen. Denn dann ist der Loadbalancer nur noch eingehend der Flaschenhals, ausgehend skaliert die Bandbreite mit jedem weiteren Backend-Server.

Active/Passive LBs können auch durch die Round-Robin DNS Loadbalancing Techniken ergänzt werden. Mehrere Active/Passiv Pärchen aufstellen und im DNS die VIPs der LBs mit mehreren A Records für die gleiche Sub-/Domain hinterlegen.
Dieses "billige" DNS Loadbalancing ist mit mehreren Loadbalancer Setups völlig unproblematisch und wird übrigens auch von Microsoft oder Google verwendet. ;)

Wenn man das alles noch mit Geo-based DNS oder mit Anycast-Routings kombiniert, kannst du für jedes Land separate Loadbalancer Pärchen und Backendserver aufstellen und problemlos auf ein anderes Land failovern, falls mal ein Land "ausfällt".
 
Danke für eure vielseitigen Antworten.
Es scheint fast so als gäbe es wirklich niemand, der eine Möglichkeit kennt eine Active-Active Konfiguration zu nutzen. (Ausgenommen mit Hilfe eines eigen Stack an Switches.)

Somit werden ich wohl eine Aktiv-Passiv Konfiguration nutzen, um die Last gut auf die Backend Server zu verteilen. (Über Kreuz natürlich um die Dienste besser nach erwarteter Last zu verteilen.)

Außerdem möchte ich mich auch noch Bedanken für den Anreiz in Bezug auf Direct Server Return, das könnte vor allem für die FileCloud sehr nützlich sein.
(Ich habe diesbezüglich schon ein wenig im Netz gestöbert)
Wobei in dem Fall frage ich mich, ob hier nicht fast ein DNS basierendes Load Balancing besser geeignet wäre?(Damit wäre es dann egal ob die Nutzer Up- oder Downloaden)
Ich weiß, dieses Konzept wird ungern gesehen.
Trotzdem frage ich mal: Kennt einer eine gute Erklärung zu dem Thema?
Also in meinem Fall würde das heißen, dass mein DNS Server die Anfrage an die Cloud erkennt(bzw. wohl eher die Anfrage an die Domain der Cloud) und die Verbindung mit dem Client praktisch an einen der Server, die verfügbar/online sind, übergibt, damit diese direkt kommunizieren können: Client <------> Server1
Wie das DNS Server halt so machen, mit dem Zusatz, dass geprüft wird welche Server online sind und somit die Eintrage aktiv bzw. inaktiv werden.

Mit freundlichen Grüßen
Anonemuss
 
Das Problem beim DNS-basierten Ansatz ist, dass du bis auf die TTL keine Kontrolle über das Caching deines Eintrages bei den DNS-Servern von Kunden / Providern hast.

Das bedeutet, dass du nie sicher sein kannst, ob nicht doch noch Anfragen ins Leere laufen.

Mein Tipp: Starte doch erstmal mit dem normalen Active- / Passive- Aufbau und skaliere zunächst deine Backends in die Breite, bis du an eine Grenze kommst. Dann kannst du bei Bedarf für einzelne Dienste auf ein DSR umschwenken, um die Last vom LB runterzunehmen.

Wichtig: Mache dir im Vorfeld Gedanken, wie du das ganze überwachen willst. Nur mit einem guten Monitoring- und Logging-Konzept kommst du hier weiter.

Gruß
Markus
 
Last edited by a moderator:
Wie storvi schon sagt, hast du bei DNS Loadbalancing keine Steuerungsmöglichkeiten. Deswegen hatte ich das in meinem vorhergehenden Post auch nur für multiple Cluster in Betracht gezogen. Weil man sich so zumindest drauf verlassen kann, dass alle IPs die vom DNS ausgeliefert werden, auch erreichbar sind. Zumindest in der Theorie ... In der Praxis fallen Cluster oft durch ihre Komplexität häufiger aus, als einzelne Systeme. :D

Wenn du Steuerungsmechanismen via DNS implementieren willst, so geht das nur bedingt mit eigenen authoritativen Nameservern, die die Logik zur Zonenverwaltung entsprechend mitbringen. Spontan fällt mir aber keine Nameserversoftware ein, die sowas von Haus aus mitbringt. Die Logik müsste man schon selbst "dran pflanschen".

Ich kenne einige Cluster-Konzepte die diesen Weg gehen (bspw. Isilon Storage Cluster), aber die bringen halt auch komplett eigene Software dafür mit.
Zudem ist das eher für Netzbereiche sinnvoll nutzbar, die man komplett unter Kontrolle hat. Weil man mit TTL von 0 Sekunden arbeiten muss. Einige Registrare im Public Internet haben aber minimum TTLs definiert. Unter 300 Sekunden (bei manchen 900 Sekunden) sollte man da gar nicht gehen.
Zumal man eben auch keinen Einfluss auf die Resolver der anderen hat. Wenn die sagen, sie wollen mindestens eine Stunde cachen und deine TTLs erst respektieren, wenn sie über einer Stunde liegen, kannst du dagegen nichts tun.
 
Danke für eure Hilfe

Ich bedanke mich vielmals für eure Hilfe.

Wobei ich zugeben muss die Umsetzung eines Active-Active Systems mit einem Spare Server würde mich immer noch immer interessieren.

Vorerst werde ich aber doch bei einem Active/Passive Failover Setup bleiben.

Eine abschließende Frage hätte ich aber noch:
Um virtuelle IPs zu floaten, welche bestimmten Voraussetzungen brauche ich dafür von meinem Hoster?

Mit freundlichen Grüßen
Anonemuss
 
Back
Top