Ich richte einen HAProxy vor nur 2 Backend-Servern mit einer bestimmten Konfiguration ein: Jede Anfrage sollte an Server A gehen; Wenn jedoch Server A einen 5xx-Fehlercode zurückgibt, sollten alle Anforderungen an einen Sicherungsserver B gesendet werden. Wenn A "up" zurückgibt, sollten alle Anforderungen an A gesendet werden.
Ich versuche diese Konfiguration:
backend example_cluster
balance roundrobin
option httpclose
option forwardfor
option httpchk HEAD /ping.html HTTP/1.0\r\nHost:www.example.com
http-check disable-on-404
default-server error-limit 1 on-error mark-down
redirect scheme https if !{ ssl_fc }
server node1 1.2.3.4:80 check observe layer7
server node_back 5.6.7.8:443 backup ssl verify none
Aber es funktioniert aus zwei Gründen nicht:
- Alle Anforderungen werden an den Server node_back (B) weitergeleitet, auch wenn node1 (A) aktiv ist.
- Es scheint, dass keine httpchecks für Server A durchgeführt werden; oder besser, in Syslog sehe ich keinen Fehler bezüglich des Ausfalls von Server A.
Wenn ich die Zeile "Option httpchk" und die beiden Zeilen direkt darunter entferne; und ich entferne auch die "beobachtungsschicht7" in Server A; HAProxy leitet alle Anforderungen an Knoten A weiter. Wenn der Server A jedoch 500 zurückgibt, wechselt HAProxy offensichtlich nicht zu B. Daher gehe ich davon aus, dass das Problem möglicherweise in der Option httpchk configuration liegt.
quelle
Antworten:
Aus der offiziellen Dokumentation: Aktiver passiver Lastausgleich mit HAProxy
quelle
Übrigens habe ich eine Pre-Nginx-Konfiguration für meinen Haproxy gefunden, und ich denke, Sie sollten es versuchen:
quelle