Kontrola zdrowia HAProxy: za pomocą httpchk i obserwować?

10

Używam HAProxy 1.4.18 z następującą konfiguracją zaplecza

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

Na serwerach działa wiele aplikacji na serwerze Apache / pasażer.

Kombinacja httpchk i disable-on-404 pozwala na płynne zamknięcie i usunięcie serwera z funta dość łatwo, wciąż będąc w stanie uzyskać bezpośredni dostęp (tj. Do testowania).

Usiłuję skonfigurować obserwować, aby wyłączyć serwer, gdy aplikacja nie działa. Zerwałem konfigurację aplikacji na staging02, więc zawsze zwraca 500. Jest poprawnie oznaczona jako DOWN po pierwszych 500, a następnie oznaczona jako UP przy następnym httpchk.

Oto plik dziennika:

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.

Czy istnieje sposób na połączenie tych dwóch czeków?

ouranos
źródło
Aby mieć pewność, że HAProxy jest zdecydowanie problemem, czy możesz znaleźć trzy pasujące wiersze dziennika z serwera Apache zaplecza i dodać je do swojego pytania?
Ladadadada,
Jeden z serwerów Apache jest celowo źle skonfigurowany, tak że wszystkie aplikacje na nim zwracają kod błędu 500. Jednak plik /check.txt zawsze działa, chyba że usunę plik. Chcę, aby serwer Apache został wyłączony, jeśli zwróci błąd 500, nawet jeśli plik check.txt nadal tam jest.
ouranos,

Odpowiedzi:

4

Rozróżnienie Rozumiem teraz, że /check.txt ma rzeczywiście zwróci odpowiedź 200, ale wszystkie żądania do stosowania powrót do 500. HAProxy widzi 500S wracając z serwer proxy żądań i wykonuje serwer z basenu ale potem inicjuje własne sprawdza, otrzymuje 200 i ponownie umieszcza serwer w puli.

Rozwiązaniem byłoby wykonanie jednego z:

  1. Skonfiguruj Apache, a nie aplikację, aby każde żądanie zwróciło odpowiedź 500, nawet plik statyczny /check.txt.
  2. Zmień /check.txtsię w aplikację Ruby, która zawiera logikę wystarczającą do wybrania odpowiednio między 200 a 500 odpowiedzi.
  3. Ustaw interwartość na coś niedorzecznego, na przykład 3600. To powinno dać ci godzinę na przetestowanie lub (jeśli serwer sam upadł), rozwiąż problem i przywróć go.
  4. Ustaw interwartość na coś mniejszego, jak 60, ale ustaw risewartość na coś wyższego, np. 60. Dałoby to również godzinę przed ponownym dodaniem serwera do puli. (Uwaga: te dwa są wymienione na końcu, ponieważ są to prawdopodobnie bardzo złe pomysły).
Ladadadada
źródło
Tak, to się dzieje. Myślę, że będę musiał się pozbyć /check.txti skierować httpchk do jednej aplikacji. check.txtPlik był przydatny, aby szybko i bezpiecznie usunąć serwer z wszystkimi HAProxy (3 z nich w konfiguracji HA, tylko jeden aktywny). Wydaje się również, że disable servernie utrzymuje się między przeładowaniem.
ouranos,