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
balance source
ist eine Sache in HAProxy. Hashes Quell-IP und verteilt die Last auf diese Weise.leastconn
neue Clients zuweisen zu den Servern mit den wenigsten Verbindungen) und mache pf oder ähnliches zu meiner zweiten Wahl.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.
quelle