haproxy httpchk mehrfache Prüfung im Backend

7

Ist es möglich, zwei Bedingungen in einem Backend zu überprüfen? Beispiel

backend web-static
        option httpchk GET /path/alive.php HTTP/1.1\r\nHost:\ www1.domain.com
        option httpchk GET /path2/alive.php HTTP/1.1\r\nHost:\ www1.domain.com
        server appsrv1 192.168.1.10:80 check inter 3000 weight 1
Elgreco08
quelle

Antworten:

2

Wahrscheinlich wäre es einfacher, ein "Wrapper" -PHP zu erstellen: Es überprüft die anderen Dateien und wenn alles in Ordnung ist, wird es mit dem HTTP-Code 200 zurückgegeben, wenn nicht, 404.

Soweit ich mich erinnere, hat dies auch bei uns funktioniert, als wir auch eine Funktionsprüfung wollten.

petermolnar
quelle
schöner tipp ich werde es ausprobieren!
Elgreco08
6

Ah, ich hatte die gleiche Frage! Unsere Entwickler haben einen multifunktionalen Webdienst mit einem URL-Namen erstellt, da wir nicht CORS-kompatible Browser (IE 8 und 9) unterstützen müssen. Ein DNS-Name, der zu einer VIP-Adresse führt, verfügt über mehrere Unterverzeichnisse mit jeweils unterschiedlichen Anwendungen. Unser Load Balancer muss also jeden einzelnen Dienst auf seinen Zustand überprüfen und ihn dann als großen "UND" -Test behandeln. Wenn sogar einer der Dienste die Prüfung nicht besteht, müssen wir diesen Server aus dem Dienst ziehen die Farm, bis alle vorbei sind.

Wir wechseln von Cisco ACE-Load-Balancern. Auf dieser Plattform definieren Sie einfach mehrere "Probe" -Konfigurationen und rufen dann mehrere Probes innerhalb einer einzelnen Serverfarm nacheinander auf, und alle Probes werden ausgeführt. Wie Sie wahrscheinlich festgestellt haben, können Sie mit HAProxy nicht mehr als eine "Option httpchk" definieren ... oder zumindest alle bis auf eine ignorieren, sodass Sie nicht die Tests erhalten, nach denen Sie suchen. Aber ich habe aus dem Handbuch herausgefunden, dass ich es tun kann, indem ich httpchk nicht benutze und eine Reihe von Zeilen "Verbinden, Senden, Prüfen" unter "Option TCP-Prüfung" ersetze. Es funktioniert perfekt.

option tcp-check
tcp-check connect
tcp-check send GET\ /FirstApplication/check.aspx?healthcheck\ HTTP/1.0\r\n\r\n
tcp-check expect string Healthy
tcp-check connect
tcp-check send GET\ /SecondApplication/check.aspx\ HTTP/1.0\r\n\r\n
tcp-check expect string YesThisIsGood
tcp-check connect
tcp-check send GET\ /ThirdApp/Check.aspx\ HTTP/1.0\r\n\r\n
tcp-check expect string ExpectedCheckResult
tcp-check connect
tcp-check send GET\ /NumberFourApp/check.aspx\ HTTP/1.0\r\n\r\n
tcp-check expect string YesItIsWorking

Beachten Sie, dass Sie jedes Leerzeichen in der Zeichenfolge, die Sie senden, mit einem Backslash-Escapezeichen versehen müssen. Ich verwende HTTP / 1.0 in der Anforderung, die standardmäßig nicht Keepalive-fähig ist. Daher verbinde ich die Verbindung in jeder Reihe von Zeilen erneut. Ich denke, ich könnte auch HTTP / 1.1 verwenden, aber dann müsste ich auch einen Host-Header übertragen, also denke ich, dass es auf diese Weise einfacher ist. Wenn Sie diese vier Überprüfungen hintereinander ausführen, dauert es immer noch nur 60 ms, also bin ich zufrieden. Beachten Sie auch, dass ich nur "Erwartungszeichenfolge" verwende, aber es gibt auch eine "Erwartungszeichenfolge" für die Suche nach regulären Ausdrücken, die den vom Server zurückgegebenen Ergebnisinhalt durchsucht.

Jeff Saxe
quelle