Die Angelegenheit
Ich verwende Haproxy, um Webserver auszugleichen. Ich verwende Sitzungspersistenz mit zusätzlichen Cookies, da einige Anwendungen Sitzungsdateien verwenden und diese nicht zwischen Servern synchronisiert werden.
Ich möchte einen Server für die Wartung deaktivieren, ohne die Sitzungen zu unterbrechen. Daher möchte ich vorhandenen Clients erlauben, ihre Anwendungssitzung fortzusetzen, aber keine neuen Clients zu akzeptieren.
Haproxy-Verhalten
- Ich habe einen Server so eingestellt, dass er zur Wartung geht.
- Wenn auf einem Client das Cookie gesetzt ist, wird der Server auch dann verwendet, wenn "In Wartung" markiert ist.
- Wenn ein neuer Client (ohne Cookie) kommt, wird er an einen anderen Server weitergeleitet
- Nachdem alle Clients ihre Anwendungssitzungen beendet haben, hat kein Client mehr das Cookie auf diesen bestimmten Server gesetzt, und ich wäre gut, wenn ich es ohne Benutzerunterbrechung herunterfahren würde.
Glauben Sie, dass dies mit einer Haproxy-Konfiguration möglich ist? Oder gibt es eine clevere Möglichkeit?
Andere Möglichkeiten
Nicht erschöpfende Liste anderer Möglichkeiten zur Erreichung dieses Bedarfs:
- Synchronisieren Sie Sitzungsdateien zwischen Servern
- Datenbank zum Speichern von Sitzungsinformationen verwenden (muss das Anwendungsverhalten ändern)
Mehr Details
Ich benutze diese Art der Konfiguration:
frontend https-in
bind xxx.xxx.xxx.xxx:443 ssl crt /etc/haproxy/ssl/_default.pem crt /etc/haproxy/ssl
reqadd X-Forwarded-Proto:\ https
acl APP1 hdr(host) -i APP1.atac.local
use_backend APP1 if APP1
default_backend _default
backend APP1
redirect scheme https if !{ ssl_fc }
mode http
balance roundrobin
cookie HAPROXY_SESSION insert indirect
option httpchk HEAD /haproxy_test_page.php HTTP/1.0\nUser-Agent:\ HAProxy
server SRV1 SRV1_IP:PORT cookie SRV1 check
server SRV2 SRV2_IP:PORT cookie SRV2 check
Wenn ich nur SRV1 deaktiviere (mit dem Befehl haproxy cli), werden alle auf SRV1 geöffneten Anwendungssitzungen nach dem Ende der aktuellen HTTP- "Sitzung" unterbrochen. Ist das richtig?