Porównaj ceny domen i usług IT, sprzedawców z całego świata

Wydaje się, że HAProxy nbsrv podaje nieprawidłową wartość


używam
       nbsrv
w regule ACL, aby określić, czy zezwolić na żądanie (1).
Przykład konfiguracji:
defaults 
mode http frontend front_www
listen 0.0.0.0:80 acl acl_backend_down nbsrv(back_www) lt 1 http-request deny if acl_backend_down default_backend back_wwwbackend back_wwww server s1 1.2.3.1:80 check
server s2 1.2.3.2:80 check
server haproxy-dc2 1.3.4.1:80 check backup

W tej konfiguracji spodziewałbym się, że gdy s1 i s2 nie działają, to nbserv będzie wynosić 0, a zatem zwróci HTTP 403.
Niestety nie wysyła 403 dopóki nie wyłączę serwera backupu (haproxy-dc2).
Jeśli zmienię regułę ACL na mniej niż dwa (tj.):
acl acl_backend_down nbsrv(back_www) lt 2 

Wtedy działa tak, jak mogłem się spodziewać: gdy na zapleczu dostępny jest tylko jeden serwer podstawowy, wysyła 403.
Pomyślałem, że może być coś nie tak z operatorem mniej niż, więc zmieniłem to na
       eq 0
ale to też nie działa.
Czy istnieje sposób, aby nbsrv działał zgodnie z oczekiwaniami, lub inny sposób na sprawdzenie, czy wszystkie podstawowe opcje po stronie serwera nie działają?
(1) Ta lista ACL jest częścią większego zestawu reguł; upraszczam ją do najmniejszego odtwarzalnego przykładu. Jeśli masz alternatywne rozwiązanie, które pozwoliłoby mi określić, czy używamy serwera zapasowego, daj mi znać. Tl; dr na większym obrazie - zezwól dwóm wystąpieniom haproxy na przełączanie się między sobą, ale zapobiegaj nieskończonym pętlom (na przykład, jeśli backend dc01 nie działa, odpowiedź kontroli stanu dc02 dc01 powinna wynosić 403/down)
mi:
Aby dodać kontekst do moich komentarzy na temat rozwiązania @ gf_ poniżej ... nasze środowisko produkcyjne jest dość złożone. Istnieje wiele kopii zapasowych + wiele kontrolerów domeny, a każda instancja ma wiele backendów (wiele aplikacji i przełączanie zawartości)
Do monitorowania - istnieją wewnętrzne kontrole stanu HAProxy między instancjami, a także monitorowanie zewnętrzne przez collectd + zabbix, które wyślą nam alerty, jeśli wszystkie serwery zaplecza będą wyłączone. Wiedząc, że nie ma dostępnych kopii zapasowych, możemy podnieść priorytet alertu.
Dlatego uprościłem przykład, po prostu pokazując
       nbsrv(back_www) lt 1
jak to, co próbowałem naprawić.
Na razie skłaniam się ku użyciu lt 2 i zgaduję, że jeśli jest tylko jedno pudełko, nadal nie chcemy, aby inne LB tutaj zawiodły.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Nie jestem do końca pewien, czy poniższe rozwiązania zadziałają i nie mogę tego teraz sprawdzić, ale nadal mogą być przydatne:
         HAProxy config of dc01
:
defaults 
mode http frontend front_www
listen 0.0.0.0:80 acl acl_backend_down nbsrv(back_www) lt 1 monitor-uri/health
monitor fail if acl_backend_down use_backend dc02 if acl_backend_down
default_backend back_wwwbackend back_wwww
server s1 1.2.3.1:80 check
server s2 1.2.3.2:80 checkbackend dc02
server haproxy-dc2 1.3.4.1:80 check

Posługiwać się

monitor-uri
https://cbonte.github.io/hapro ... r-uri
i

awaria monitora
https://cbonte.github.io/hapro ... 0fail
dyrektywy i weryfikacja
/health
z
         dc02
(i wzajemnie).
/health
musi poinformować
         HTTP 200
jeśli przynajmniej jeden backend działa i ma się dobrze, w przeciwnym razie
         HTTP 503
.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się