Controlli di integrità HAProxy: usando httpchk e osserva?


10

Sto usando HAProxy 1.4.18 con la seguente configurazione di back-end

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

I server eseguono più applicazioni su apache / passenger.

La combinazione di httpchk e disable-on-404 consente un arresto regolare e la rimozione di un server da lb abbastanza facilmente pur essendo in grado di accedere direttamente (ad esempio per i test).

Sto provando a configurare osservi per disabilitare un server quando un'applicazione non funziona. Ho interrotto la configurazione dell'applicazione su staging02 in modo che restituisca sempre un 500. È correttamente contrassegnato con DOWN dopo i primi 500 ma poi con UP al prossimo httpchk.

Ecco il file di registro:

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.

C'è un modo per combinare quei due controlli?


Solo per essere certo che HAProxy è sicuramente il problema, potresti trovare le tre linee di log corrispondenti dal tuo server Apache back-end e aggiungerle alla tua domanda?
Ladadadada,

Uno dei server apache è intenzionalmente erroneamente configurato in modo che tutte le applicazioni su di esso restituiscano un codice di errore 500. Tuttavia /check.txt funziona sempre a meno che non rimuova il file. Voglio che il server apache sia disabilitato se restituisce errore 500 anche se il file check.txt è ancora lì.
ouranos,

Risposte:


4

La distinzione Ora capisco è che /check.txt fa in realtà restituisce una risposta 200, ma tutte le richieste all'applicazione restituire un 500. HAProxy vede le 500s che ritornano dalle richieste proxy e prende il server fuori dalla piscina, ma poi inizia la propria controlla, riceve un 200 e rimette il server nel pool.

La soluzione sarebbe quella di fare uno di:

  1. Configura Apache, anziché l'applicazione, in modo che ogni richiesta restituisca una risposta 500, anche il file statico /check.txt.
  2. Change /check.txtin un app di Ruby che contiene quel tanto che basta la logica per scegliere tra un 200 e un 500 di risposta al momento opportuno.
  3. Imposta il intervalore su qualcosa di ridicolo come 3600. Questo dovrebbe darti un'ora per fare i tuoi test o (se il server si è spento da solo) per capire il problema e risolverlo.
  4. Impostare il intervalore su qualcosa di più piccolo come 60 ma impostare il risevalore su qualcosa di più alto come 60. Ciò darebbe anche un'ora prima che il server fosse aggiunto al pool. (Nota, questi due sono elencati per ultimi perché probabilmente sono idee pessime.)

Sì, è quello che sta succedendo. Penso che dovrò sbarazzarmi di /check.txte indirizzare il httpchk a una sola applicazione. Il check.txtfile è stato utile per rimuovere rapidamente e con garbo un server da tutti gli HAProxy (3 di questi nella configurazione HA, solo uno attivo). Sembra anche che disable servernon persista tra la ricarica.
ouranos,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.