2016-04-25 14 views
1

Ich bin neu bei Haproxy und Load Balancing. Ich möchte sehen, was passiert, wenn ein Backend-Host ausgeschaltet wird, während der Proxy läuft.HAproxy passive Gesundheitsprüfung

Das Problem ist, wenn ich eines der Backends ausschalte und den Browser aktualisiere die Seite stellt sofort einen 503 Fehler für den Benutzer. Nach dem nächsten Laden der Seite wird der Fehler nicht mehr angezeigt, da vermutlich das Back-End aus dem Pool entfernt wurde.

Als Test habe ich zwei Back-End-Flask-Anwendungen eingerichtet haben und HAProxy konfiguriert sie wie so auszubalancieren:

backend app 
    mode http 
    balanace roundrobin 
    server app1 127.0.0.1:5001 check 
    server app2 127.0.0.1:5002 check 

Mein Verständnis nach dieser: https://www.haproxy.com/doc/aloha/7.0/haproxy/healthchecks.html#check-parameters

ist, dass alle 2 Sekunden eine der Backend-Hosts werden gepingt, um zu sehen, ob sie aktiv sind. Dann werden sie aus dem Pool entfernt, wenn sie nicht erreichbar sind. Der 5xx-Fehler tritt zwischen dem Zeitpunkt auf, an dem ich das Backend abbringe und den 2 Sekunden.

Ich würde denken, es eine Möglichkeit, um diesen 5xx Fehler zu erhalten ist, indem HAProxy eine wenig Logik durchzuführen, dass, wenn eine Anforderung vom Frontend ausfällt, wäre es dann, dass Backend aus dem Pool gescheitert entfernen, und dann zu einem anderen wechseln und mach eine andere Anfrage. Auf diese Weise würde der Benutzer den Fehler nie sehen.

Gibt es eine Möglichkeit, dies zu tun, oder sollte ich etwas anderes versuchen so, dass mein Benutzer keinen Fehler bekommen?

Antwort

2

standardmäßig haproxy wird 3-mal (retries) mit 1s Intervallen demselben backend wiederholen. Um ein anderes Backend zu ermöglichen, sollten Sie option redispatch setzen.

Sehen Sie sich auch an (vorsichtig, es kann hamrfull sein):

Hinweis: Haproxy Wiederholungen o nur bei Verbindungsfehlern (z.B. ECONNNREFUSED wie in Ihrem Fall), wird es nicht erneut senden/Anfrage/Daten erneut einreichen.

+0

Fantastisch. Option Redispatch sieht aus wie genau das, was ich brauchte. – Jono