elastichsearch node health check per haproxy

Ho posto haproxy davanti a un cluster di tre nodes ES (elasticsearch). Finora il modo in cui controlla per each nodo in haproxy è utilizzando httpcheck. Bellow è uno snippet del mio config:

backend elastic_nodes balance roundrobin option forwardfor option httpchk http-check expect status 200 server elastic1 10.88.0.101:9200 check port 9200 fall 3 rise 3 server elastic2 10.88.0.102:9200 check port 9200 fall 3 rise 3 server elastic3 10.88.0.103:9200 check port 9200 fall 3 rise 3 

Finora questo controllo funziona bene, ma se il cluster diventa rosso il codice di risposta rimane ancora "200" (questo è corretto poiché il nodo è accessibile in modo http-che rende haproxy considerare il server backend sano.

Dall'altro lato, se controllo lo stato del cluster e contrassegnare un nodo in seguito alla ricezione dello stato di salute "Rosso", questo segnorerà tutti i server di back-down così distriggersndo il servizio ES. Il mio problema su questo approccio è che in passato il mio cluster era rosso ma era ancora utilizzabile in quanto mancava solo un singolo frammento (un log di giorni). In altre parole, ci sono casi in cui lo stato rosso di ES non è un grosso problema e si desidera ancora servire le richieste ES (invece di contrassegnare tutti i nodes di back-up con haproxy questo block del servizio ES).

C'è un altro approccio a questo proposito?

  • Indirizzo server dinamico HAProxy basato sul valore dell'intestazione
  • Load bilanciato IIS. Devo utilizzare NLB o un proxy inverso basato su Linux o qualcos'altro?
  • Quante transactions HTTP attraverso una connessione in Haproxy
  • Controlli sanitari HAProxy: utilizzando httpchk e osservare?
  • Proxy HA per MySQL - solo failover
  • L'equilibratura URI di HAProxy non è molto equilibrata
  • mod_evasive dietro HAPROXY
  • La logging di HAProxy (1.7.5) è sincrona (ossia bloccata) o asynchronous (ovvero non bloccata)?
  • One Solution collect form web for “elastichsearch node health check per haproxy”

    Utilizziamo HAproxy per equilibrare tra due cluster ridondanti. Durante il normale funzionamento ciascuno riceve ~ 50% del traffico; ciascuno è provvisto di prendere il 100% quando necessario.

    Abbiamo riscontrato un errore recentemente in base a un caso di fallimento che non avevamo previsto: tutti i nodes client e master rimasero in su, quindi il nostro cluster risposto a REST, ma tutti i nodes dati erano temporaneamente in linea, tutti gli indicatori erano rossi e vuoti e le query contro loro hanno restituito 0 risultati. Ma con un 200, seguendo la convenzione REST.

    Il nostro semplice controllo di salute di HAproxy ci ha fallito in questo caso; ha semplicemente controllato per 200s.

    Sto ora indagando l'uso di http-check expect ! string red http-check expect ! string red con un URI che indirizza direttamente l'indice di interesse. Non ho ancora utilizzato le funzionalità di http-check più avanzate prima.

    Un controllo più costoso, ma, dovrebbe correttamente prendere i nodes client per un cluster lobotomizzato fuori dalla piscina.

    AGGIORNAMENTO (2): Ho commutato l'uso

     option httpchk get /_cat/indices/<index of interest> http-check expect rstring \b(green|yellow)\b 

    e sembra davvero un test migliore.

    (Seconda revisione: usando il controllo esplicito per il green o il yellow invece di solo non-rosso, pensato in ritardo di indice completamente mancante da _cat fiter …_

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.