Versuchen Sie, das zu tun, was im Titel steht: Beibehalten vorhandener Sitzungen unter hoher Last und Versenden von 503-Nachrichten an neu angekommene Besucher.
Problem: Es funktioniert, aber die Sitzungen dauern nicht länger als 90 Sekunden.
Bei den aktuellen Ergebnissen frage ich mich, ob eine Zeitüberschreitung vorliegt, die mir fehlt.
Zweck
Ich versuche, Haproxy zu bekommen:
- Senden Sie Anforderungen für neue Sitzungen an das Backend-001, wenn die Gesamtzahl der Sitzungen im Frontend einen bestimmten Schwellenwert unterschreitet.
- Bereitstellen eines 503-Fehlers für neue Sitzungen, wenn die Gesamtzahl der Sitzungen im Frontend diesen Schwellenwert überschreitet
- Zulassen von Anforderungen für vorhandene Sitzungen, auch wenn die Anzahl der Sitzungen den Schwellenwert überschreitet
Auf diese Weise werden Besucher, die gerade ein mehrstufiges Formular ausfüllen, nicht von einem 503-Fehler überrascht, und neue Besucher können aufgefordert werden, "später wiederzukommen, da wir gerade sehr beschäftigt sind".
Installieren
Das Setup ist wie folgt:
{visitors}
↓
[haproxy]
↓
[rails app on unicorn served by nginx] (right now just one
backend: 'backend-001')
aktueller Ansatz
Um dies zu erreichen, verwende ich die unten stehende Konfiguration.
Diese dient zum Testen mit einer sehr niedrigen Grenze (10 Anschlüsse am Front-End (fe_conn gt 10)), um das Testen zu vereinfachen.
Um den Server etwas zu belasten, benutze ich httperf wie folgt:
httperf --hog --server staging.machine.tld --uri / do_some_things --wsess = 500,10,30 --rate 2
global
daemon
maxconn 10000
defaults
mode http
timeout connect 6s
timeout client 60s
timeout server 60s
balance roundrobin
option http-server-close
frontend http-in
bind [PUBLIC_IP]:80
default_backend backend-001
acl too_many fe_conn gt 10
use_backend b_too_many if too_many
backend backend-001
fullconn 10
appsession _session_id len 128 timeout 7200s
cookie SERVERID insert maxidle 7200s
server Server1 127.0.10.1:80 cookie backend-001 check
backend b_too_many
errorfile 503 /var/www/50x.html
Problem
Wie oben erwähnt, ist das Problem: Es funktioniert fast, aber die Sitzungen dauern nicht länger als etwa 90 Sekunden.
Wenn Sie weiter klicken, können Sie Ihre Sitzung auch dann fortsetzen, wenn 10 Sitzungen belegt sind.
Wenn Sie versuchen, eine Seite auf dem Server mit einer anderen Browserinstanz zu öffnen, wird der 503-Fehler angezeigt.
Es sieht also so aus, als wäre ich fast da. Hat jemand eine Idee, was die kurzen Sitzungszeiten verursachen könnte?
Und vor allem, wie ich das beheben kann :)
(edit: 'weight 1 maxconn 10' von der 'server'-Zeile entfernt, nicht relevant und könnte verwirren)