Load Balancing lang laufende TCP-Verbindungen

7

Ich versuche, den besten Weg zum Lastausgleich lang laufender TCP-Verbindungen für das folgende Szenario zu finden:

Wir haben mehrere Server hinter einem redundanten Satz von Firewalls und Clients stellen lang laufende (normalerweise 10-15 Stunden) TCP-Verbindungen zu unseren Backend-Servern her.
Derzeit wird der "Lastausgleich" über einen clientseitigen Round-Robin-Ansatz abgewickelt, um eine Liste von IP-Adressen zu durchsuchen, die alle an unseren Firewalls gespeichert sind und entsprechend den Back-End-Servern NAT-fähig sind.

Ich möchte mich von diesem Ansatz lösen und nur eine öffentliche IP-Adresse und einen separaten Load Balancer haben, der den Zustand / die Last der Server überprüfen und die eingehenden Clientverbindungsanforderungen entsprechend verteilen kann.

Ein Problem hierbei ist, dass jeder Client 3 Socket-Verbindungen an 3 verschiedenen Ports herstellt und ich es vorziehen würde, wenn diese Verbindungen "klebrig" wären, sodass alle diese 3 Verbindungsanforderungen an denselben Backend-Server gesendet werden.

Ich habe mir zB HAProxy angesehen, bin mir aber nicht sicher, ob es wirklich für mein Szenario geeignet ist. Wir haben eine relativ niedrige Verbindungsanzahl (~ 300 Clients * 3 Socket-Verbindungen für jede). Normalerweise sehen wir für jeden Socket ein kontinuierliches Datenübertragungsvolumen von ~ 15 KB / s.

Jede Eingabe hierzu wird sehr geschätzt!

Vielen Dank,

Tom

TJF
quelle

Antworten:

3

Angenommen, alle Ihre Back-End-Computer sind "aktiv" und können auf Anfragen reagieren. Alles, was Sie wirklich brauchen, ist ein Load-Balancer-Front-End.

Ein guter Load Balancer kann die Anzahl der Verbindungen zu jedem Host verfolgen und neue Verbindungen dynamisch verteilen, um zu vermeiden, dass eines der Back-End-Systeme überlastet wird (mit "gut" meine ich "teuer" wie Cisco Content Switches /). Content Switch-Servicemodule). Der Preis geht hier Hand in Hand mit den Funktionen: Inhaltswechsel sind auf der Lösungsstufe ziemlich weit oben.

Ich habe keine Erfahrung mit HAProxy, aber es hört sich so an, als ob es den Lastausgleich bei geringsten Verbindungen wie Inhaltswechsel durchführen kann. Dies wäre wahrscheinlich eine gute Wahl (und zu einem viel attraktiveren Preis). Ich bin mir nicht sicher, ob HAProxy die Quellenverfolgung durchführen kann (alle Verbindungen von derselben IP an dasselbe Back-End senden).

Ein paar Schritte weiter unten in der pf- Firewall (oder in der von pfsense angepassten Distribution) kann ein Lastausgleich durchgeführt werden (zufällig oder Round-Robin, ich glaube nicht, dass sie "gewichtete Verbindungen mit dem geringsten Anteil" als Ausgleichsoption wie die Inhaltsschalter ausführen können). Die Quellenverfolgung ist in pf implementiert, obwohl Sie möglicherweise damit spielen müssen, wie lange diese Informationen aufbewahrt werden, um Probleme beim Verschieben von Verbindungen von einem Server auf einen anderen zu vermeiden.
Wenn Sie pf / pfsense bereits als Firewall verwenden, ist dies eine kostenlose Option: Wir verwenden diese Option in meiner aktuellen Bereitstellung mit guten Ergebnissen, aber unsere Verbindungen sind nicht so langlebig wie Ihre.

voretaq7
quelle
Ein weiterer zu berücksichtigender Vorteil von Inhaltswechseln: Sie können auch SSL im Front-End verarbeiten. Abhängig von Ihrer Architektur und Ihren Anforderungen kann dies den Arbeitsaufwand Ihrer Back-End-Server verringern und möglicherweise Hardware sparen.
voretaq7
Vielen Dank für Ihre Antwort! Die Firewalls, die wir derzeit verwenden, sind eigentlich Vyatta-Boxen. Deshalb habe ich mir HAProxy angesehen, da ich es auch auf diesen Computern problemlos hosten und das automatische Failover mit Herzschlag durchführen kann. Ich denke, HAProxy kann die Quellenverfolgung übernehmen, aber wir haben einige Clients, die über dasselbe Büro und dieselbe öffentliche IP-Adresse eine Verbindung herstellen, sodass sie alle auf dem Server landen würden.
TJF
1
balance sourceist eine Sache in HAProxy. Hashes Quell-IP und verteilt die Last auf diese Weise.
Bob Aman
@BobAman Yup, vor mehr als 4 Jahren, als ich dieses HAProxy schrieb, war es keine so große Sache, aber wenn ich dies heute implementieren würde, würde ich den Lastausgleich in HAProxy vorziehen (wegen seiner anderen Funktionen, die gerne leastconnneue Clients zuweisen zu den Servern mit den wenigsten Verbindungen) und mache pf oder ähnliches zu meiner zweiten Wahl.
voretaq7
3

Andere haben HAProxy erfolgreich implementiert und es hilft sogar beim Ausführen der StackExchange-Sites. Andere beliebte Web-Frontends sind Nginx und Pound . Letztendlich sind die meisten dieser Lösungen für den größten Teil des Webverkehrs sehr effektiv.

Wenn Ihr Ziel Hochverfügbarkeit und Lastausgleich ist, sind klebrige oder dauerhafte Sitzungen nicht ratsam, da sie die Effektivität beider Sitzungen verringern.

Ohne mehr über Ihre Architektur oder Art des Datenverkehrs zu wissen, würde ich LVS empfehlen , das meine bevorzugte Lösung ist. Sie beziehen sich auf die Netzwerkschicht, auf die sich diese Lastausgleichslösung stärker konzentriert. Es kann mit den meisten Protokollen verwendet werden und ist nicht auf den Webverkehr beschränkt.

Warner
quelle
1
Warner, wie in meiner ursprünglichen Frage dargelegt, ist mein Verkehr kein http-Verkehr. Es handelt sich um Datenverkehr über TCP mit ziemlich konsistenten Datenübertragungsraten (der Datenverkehr kann jedoch stachelig sein). Verbindungen werden selten hergestellt, bleiben jedoch mehrere Stunden lang bestehen.
TJF
Ah, ich dachte, dass Ihre Überlegung zu HAProxy darauf hindeutet, dass Ihr Datenverkehr webbasiert ist. Ich möchte Sie ermutigen, sich zuerst LVS und dann alles andere für Ihre Lösung anzusehen, da alle anderen Lösungen hauptsächlich für http-basierten Datenverkehr gedacht sind.
Warner