wake-up-neo.net

Load Balancing (HAProxy oder andere) - Sticky Sessions

Ich arbeite daran, meine App auf mehrere Server zu skalieren. Eine Voraussetzung ist, dass ein Client immer mit demselben Server kommuniziert (zu viele Live-Daten werden verwendet, um ein effizientes Bouncen zwischen Servern zu ermöglichen).

Meine aktuelle Konfiguration ist ein kleiner Servercluster (unter Verwendung von Linode). Ich habe einen Frontend-Knoten, auf dem HAProxy mit "balance source" ausgeführt wird, sodass eine IP immer auf denselben Knoten verweist.

Mir ist aufgefallen, dass "Balance Source" keine sehr gleichmäßige Verteilung ist. Bei meinem aktuellen Test-Setup (2 Backend-Server) hat ein Server bei einer Stichprobengröße von 80-100 Quell-IPs häufig 3-4x so viele Verbindungen.

Gibt es eine Möglichkeit, eine ausgewogenere Verteilung zu erreichen? Offensichtlich verbietet Sticky Sessions ein "perfektes" Gleichgewicht, aber ein 40/60 Split wäre einem 25/75 Split vorzuziehen.

17
Michael Marsee

HAProxy unterstützt das Ändern oder Einfügen eines Cookies, um die Sitzungspersistenz mit dem Parameter cookie zu gewährleisten.

Fügen Sie in den Abschnitten "Backend" oder "Listen" Folgendes hinzu:

cookie COOKIENAME prefix

In diesem Beispiel wird ein vorhandenes Cookie geändert, indem der Name des Servers einem Cookie mit dem Namen COOKIENAME hinzugefügt wird. Ihr Client sieht so etwas wie server1~someotherdata, aber Ihre Anwendung sieht nur den Teil someotherdata. Sie können dies also für vorhandene Cookies verwenden. Darüber hinaus können Sie mit dieser Methode nur die Sitzungspersistenz erzwingen, wenn dieses Cookie vorhanden ist. Dies bedeutet, dass Sie die statischen Teile Ihrer Website weiterhin gleichmäßig verteilen und nur bei Bedarf die Klebrigkeit erzwingen können, der Sitzung jedoch diesen Cookie-Namen hinzufügen können.

Benennen Sie auch Ihre Server, sodass Ihre Serverzeilen wie folgt aussehen:

server server1 1.2.3.4 cookie server1

Weitere Informationen finden Sie im HAProxy-Konfigurationshandbuch . Sie können anscheinend auch den Parameter appsession config verwenden.

Sobald Sie dies getan haben, können Sie Ihre eigene Balance-Methode aus der Liste auswählen. Ich verwende in der Regel roundrobin, aber leastconn kann Ihnen ein besseres Gleichgewicht bieten, sobald die Sticky-Sessions berücksichtigt werden.


Weitere Informationen finden Sie in der Dokumentation, um das Auffinden des Referenzbereichs zu erleichtern:

cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ]
              [ postonly ] [ preserve ] [ domain <domain> ]*
              [ maxidle <idle> ] [ maxlife <life> ]
  Enable cookie-based persistence in a backend.
  May be used in sections :   defaults | frontend | listen | backend
                                 yes   |    no    |   yes  |   yes
25
Richard Benson

Sie können den Auswuchtungsalgorithmus in HA-Proxy anpassen, es sind jedoch einige verfügbar. Wie z. Roundrobin oder Leastconn.

Sie müssen Ihre Bilanzierung jedoch generell an die Domäne der Benutzer anpassen, für die Inhalte bereitgestellt werden. In den meisten Fällen müssen Sie empirische Tests durchführen und Ihre Entscheidung entsprechend Ihren Ergebnissen wiederholen.

0
fyr