2016-08-01 46 views
0

Ich habe einen Ejabberd-Cluster in AWS, die ich Lastenausgleich möchte. Ich habe anfangs versucht, ein ELB vor die Knoten zu setzen, aber das macht die Sitzungen nicht-klebrig. Ich habe dann das Proxy-Protokoll auf dem ELB aktiviert und einen HAProxy-Knoten zwischen dem ELB und dem Ejabberd-Cluster eingeführt. Meine Annahme/Verständnis hier war, dass die HAProxy-Instanz den TCP-Proxy verwenden und sicherstellen würde, dass die Sitzungen auf den Ejabberd-Servern hängen bleiben.Sitzung Klebrigkeit für ejabberd TCP-Sitzungen über ELB und HAProxy

Das scheint jedoch immer noch nicht zu passieren! Ist das überhaupt überhaupt möglich? Die Einführung der Cookie-Konfiguration in der HAProxy.cfg-Datei gibt einen Fehler, dass Cookies nur für HTTP aktiviert sind, also wie kann ich TCP-Sitzungen auf dem Server bleiben sticky ...

Bitte helfen Sie so wie auf Ideen verloren scheinen Hier!

+0

Ich erinnere mich an eine aktuelle Frage von einem anderen Benutzer wer schien zu glauben, dass das Aktivieren des Proxy-Protokolls auf einem ELB irgendwie Sessions für Ejabberd klebrig machen würde, was natürlich keinen Sinn machte. Ihr Setup, mit HAProxy nach ELB, macht zumindest Sinn, muss aber mit etwas wie ['stick on src'] konfiguriert werden (http://blog.haproxy.com/2013/04/22/client-ip- persistence-or-source-ip-hash-load-balancing /) ... aber mir ist noch unklar ... warum ist klebrigkeit überhaupt wichtig? Wenn eine Verbindung zu einem anderen Server kommt, warum ist das wichtig? Wenn Sie dies erreichen, wird es Ihr tatsächliches Problem lösen? –

+0

Hallo @ Michael-sqlbot - danke. Ja, ich habe diese Frage gesehen - ich habe es auch nicht verstanden. Für meinen Fall, wenn ich die Sitzungen nicht klebrig mache, rotiert der Verbindungsstrom des Benutzers zwischen den verschiedenen Servern weiter und es gibt keinen lang laufenden Datenstrom. Im Wesentlichen wird der Benutzer innerhalb derselben Sitzung mehrmals abgemeldet und angemeldet. Ich denke, ich muss wahrscheinlich tiefer in das Ejabberd-Verhalten eintauchen - Mickael hat unten erwähnt, dass Klebrigkeit nicht für Ejabberd da sein muss, also werde ich weiter nachsehen ... Danke! – Samantha

+0

ELB wird standardmäßig nach 60 Sekunden eine Verbindung im Leerlauf schließen. Haben Sie das Timeout auf einen höheren Wert umgestellt? –

Antwort

0

ejabberd erfordert keinen Lastenausgleich. Sie müssen das nicht implementieren. Verwenden Sie einfach ejabberd Cluster mit ELB oder HAProxy auf der Vorderseite, ohne zu klebrigen.

+0

Danke @Mickael - danke für Ihre Antwort . Ich fürchte, es scheint eine Lücke in meinem Verständnis zu sein, aber wenn ich den Cluster mit ELB betreibe, rotieren die Sitzungen weiter und es gibt keinen langlebigen XMPP-Stream. Das bedeutet, dass der Benutzer immer wieder abgemeldet wird. Wird das erwartet? Bin mir sicher etwas übersehen - lass mich deine Gedanken bitte wissen ... vielen Dank nochmal! – Samantha

+0

Nein, XMPP ist über langlebige Verbindung und ELB-Ehre langlebige Verbindung. Es schließt sie nicht. Irgendetwas stimmt nicht in deiner Architektur/Netzwerkeinstellung und das Durcheinander ändert nichts an der Tatsache, dass das Ganze kaputt ist. –

0

Danke @ Michael-sqlbot und @Mickael - scheint es mit dem Leerlauf-Timeout in der ELB zu tun hatte. Das war auf 60 Sekunden eingestellt, also wurde die TCP-Verbindung aktualisiert, wenn ich keine Daten vom Client zum ejabberd-Server pustete. Wenn ich damit spiele und das Health Check-Intervall, kann ich sehen, dass der ELB mir eine lang andauernde Verbindung gibt ... Danke.

Ich muss noch herausfinden, wie die Client-IP-Adressen in ejabberd gefangen zu bekommen (glauben Proxy-Protokoll auf der ELB ermöglichen würde helfen), aber das ist eine separate Untersuchung ...