Problem #
Ein Benutzer berichtet, dass er Relianoid für den Lastenausgleich mit Cookie-basierter Sitzungspersistenz verwendet. Anfangs war das Setup mit fünf Servern perfekt ausbalanciert. Nach dem Hinzufügen eines neuen Servers zum Pool werden die Sitzungen jedoch nicht wie erwartet verteilt. Der neue Server verfügt nur über wenige Sitzungen, während die vorhandenen Server weiterhin den Großteil des Datenverkehrs bewältigen.
Erläuterung #
Dieses Problem entsteht aufgrund des aktuellen Sitzungspersistenzmechanismus und des verwendeten Lastausgleichsalgorithmus.
Das Problem verstehen #
1. Sitzungspersistenz mittels Cookie-Einfügung : Bei der Sitzungspersistenz mittels Cookie-Einfügung weist der Load Balancer jedem Client ein eindeutiges Cookie zu. Dieses Cookie leitet nachfolgende Anfragen desselben Clients an denselben Backend-Server weiter und gewährleistet so die Sitzungspersistenz. In einer stabilen Umgebung funktioniert dies einwandfrei, kann jedoch Probleme verursachen, wenn ein neuer Server zum Serverpool hinzugefügt wird.
2. Bestehende Sitzungen bleiben „persistent“ : Da bereits Sitzungen mit den ursprünglichen Servern eingerichtet wurden, bleiben diese aufgrund des Persistenz-Cookies an ihre ursprünglichen Backends gebunden. Folglich empfängt der neu hinzugefügte Server nur neue Sitzungen oder Datenverkehr von neuen Clients, denen noch kein Persistenz-Cookie zugewiesen wurde.
3. Aktuelle Einschränkungen von Scheduling-Algorithmen : Viele Load Balancer verwenden einen Standard-Scheduling-Algorithmus wie Round Robin oder Least Response Time. Diese Algorithmen gleichen die Last nicht unbedingt aus, wenn neue Server hinzugefügt werden, insbesondere bei Sitzungspersistenz. Dies liegt daran, dass die Algorithmen dazu neigen, Verbindungen zu bestehenden Backends für aktive Sitzungen aufrechtzuerhalten.
Warum Sitzungen nicht neu ausbalanciert werden #
Wenn ein neuer Server hinzugefügt wird, beginnt dieser nicht sofort mit einer gleichmäßigen Lastverteilung, weil:
- Vorhandene Sitzungen sind an ihre ursprünglichen Backends gebunden.
- Der Standard-Planungsalgorithmus priorisiert Backends mit weniger Sitzungen oder Verbindungen nicht.
Um eine gerechte Verteilung der Sitzungen zu erreichen, ist ein anderer Lastausgleichsalgorithmus erforderlich.
Lösung #
Verwenden Sie den Planungsalgorithmus „Least Connections“ #
Der Least-Connections-Algorithmus ist eine Planungsmethode, bei der der Load Balancer den Back-End-Server mit den wenigsten aktiven Verbindungen auswählt. Dieser Ansatz trägt zu einer gleichmäßigeren Verteilung der Sitzungen bei, insbesondere wenn dem Pool ein neuer Server hinzugefügt wird.
Aus diesem Grund funktioniert „Least Connections“ in diesem Szenario effektiv:
- Dynamisches Rebalancing: Im Gegensatz zu Algorithmen wie Round Robin prüft Least Connections ständig, welcher Server die wenigsten aktiven Sitzungen hat. Dadurch kann der neue Server, der anfangs weniger Sitzungen hat, mehr neue Verbindungen erhalten, bis sich die Last ausgeglichen hat.
- Bessere Ressourcennutzung: Wenn neue Sitzungen erstellt werden, werden sie an den Server mit der geringsten Auslastung weitergeleitet, wodurch die allgemeine Ressourcennutzung verbessert wird.
Schritte zur Implementierung des „Least Connections“-Algorithmus in Relianoid #
1. Zugriff auf die Relianoid Load Balancer-Konfiguration: Melden Sie sich bei Ihrer Relianoid-Verwaltungskonsole an oder verwenden Sie gegebenenfalls die CLI-Tools.
2. Navigieren Sie zu den Load Balancer-Einstellungen: Suchen Sie die Einstellungen für Ihre Load Balancer-Instanz, die den Serverpool mit Sitzungspersistenz verwaltet.
3. Ändern des Planungsalgorithmus:
- Suchen Sie die Einstellung für den Lastausgleichsalgorithmus oder die Planungsmethode.
- Ändern Sie den Algorithmus von der aktuellen Einstellung (z. B. Round Robin) auf Wenigste Verbindungen.
4. Änderungen speichern und anwenden: Speichern Sie Ihre Änderungen und wenden Sie sie auf die Load Balancer-Konfiguration an. Je nach Umgebung kann hierfür ein Neustart des Load Balancers oder ein Soft Reload erforderlich sein.
5. Überwachen und Überprüfen: Überwachen Sie nach dem Anwenden der Änderungen die Sitzungsverteilung auf allen Servern. Mit der Zeit sollte der neue Server mehr Sitzungen empfangen, was zu einer gleichmäßigeren Auslastung führt.
Fazit #
Indem Sie den Lastausgleichsalgorithmus auf „Least Connections“ ändern, stellen Sie sicher, dass der neu hinzugefügte Server aufholen und mehr Sitzungen verarbeiten kann. Diese dynamische Planungsmethode berücksichtigt die Anzahl der aktiven Verbindungen und verteilt die Last effizient. Dadurch wird das durch die Sitzungspersistenz mit Cookie-Einfügung verursachte Ungleichgewichtsproblem gelöst.
Wenn nach der Implementierung dieser Änderung weiterhin Probleme auftreten, prüfen Sie Folgendes:
- Der Zustand und die Leistung des neu hinzugefügten Servers.
- Die Konfiguration für andere Parameter, die sich auf den Lastenausgleich auswirken könnten (z. B. Einstellungen für das Sitzungstimeout, Dauer der Bindung usw.).
- Protokolle auf Netzwerk- oder Anwendungsebene für potenzielle Fehler oder Engpässe.
Indem Sie diese Schritte befolgen, können Sie Ihre Load Balancer-Konfiguration optimieren, um eine faire und ausgewogene Sitzungsverteilung auf allen Servern in Ihrem Pool sicherzustellen.