Ich verwende HAProxy 1.4.18 mit der folgenden Backend-Konfiguration
backend staging
option httpchk HEAD /check.txt HTTP/1.0
http-check disable-on-404
default-server error-limit 1 on-error mark-down
server staging01 x.x.x.x:80 check observe layer7
server staging02 x.x.x.x:80 check observe layer7
Auf den Servern werden mehrere Anwendungen auf Apache / Passenger ausgeführt.
Die Kombination von httpchk und disable-on-404 ermöglicht ein ordnungsgemäßes Herunterfahren und Entfernen eines Servers aus dem lb, während der direkte Zugriff (dh zum Testen) weiterhin möglich ist.
Ich versuche, Observ einzurichten, um einen Server zu deaktivieren, wenn eine Anwendung nicht funktioniert. Ich habe die Anwendungskonfiguration in staging02 unterbrochen, sodass immer eine 500 zurückgegeben wird. Sie ist nach den ersten 500 korrekt mit DOWN markiert, beim nächsten httpchk jedoch mit UP.
Hier ist die Protokolldatei:
Server staging/staging02 is DOWN, reason: Health analyze, info: "Detected 1 consecutive errors, last one was: Wrong http response". 1 active and 1 backup servers left. 2 sessions active, 0 requeued, 0 remaining in queue.
Server staging/staging02 is DOWN, reason: Health analyze, info: "Detected 1 consecutive errors, last one was: Wrong http response". 1 active and 1 backup servers left. 1 sessions active, 0 requeued, 0 remaining in queue.
Server staging/staging02 is UP, reason: Layer7 check passed, code: 200, info: "OK", check duration: 0ms. 2 active and 1 backup servers online. 0 sessions requeued, 0 total in queue.
Gibt es eine Möglichkeit, diese beiden Prüfungen zu kombinieren?
Antworten:
Die Unterscheidung , die ich jetzt verstehen, dass /check.txt ist eigentlich eine 200 - Antwort zurück , sondern alle Anfragen an die Anwendung zurückgeben 500. HAProxy die 500s sieht von den Proxy - Anfragen kommt zurück und nimmt den Server aus dem Pool , aber dann beginnt seine eigenen check, erhält eine 200 und legt den Server wieder in den Pool.
Die Lösung wäre, eine der folgenden Aktionen auszuführen:
/check.txt
./check.txt
in eine Ruby-App, die gerade genug Logik enthält, um bei Bedarf zwischen einer 200- und einer 500-Antwort zu wählen.inter
Wert auf etwas Lächerliches wie 3600 ein. Dies sollte Ihnen eine Stunde Zeit geben, um Ihre Tests durchzuführen oder (falls der Server von selbst ausfällt) das Problem herauszufinden und es wieder aufzurufen.inter
Wert auf einen kleineren Wert wie 60, aber setzen Sie denrise
Wert auf einen höheren Wert wie 60. Dies würde Ihnen auch eine Stunde Zeit geben, bevor der Server wieder zum Pool hinzugefügt wurde. (Beachten Sie, dass diese beiden zuletzt aufgeführt sind, da es sich wahrscheinlich um sehr schlechte Ideen handelt.)quelle
/check.txt
und das httpchk auf eine Anwendung verweisen. Diecheck.txt
Datei war praktisch, um einen Server schnell und ordnungsgemäß von allen HAProxy zu entfernen (3 davon im HA-Setup, nur einer aktiv). Es scheint auch, dassdisable server
zwischen dem Nachladen nicht bestehen bleibt.