No Haproxy podemos definir um parâmetro para que se possa reconhecer que houve uma indisponibilidade em um nó e será encaminhado a requisição para outro .
Vou deixar aqui alguns exemplos que utilizo no dia a dia e o link de referência com a documentação completa.
Em todos os exemplos será definido os seguintes opções antes do servidor :
* default-server : Requisição cairá no servidor default.
* inter : Usado para saber de quanto em quanto tempo será realizado o check.
* fall : Usado para monitorar quantas vezes será realizada antes de entra a falha.
* rise : Usado para monitorar a volta do servidor que estava fora .
1) Health Check em Camada 7 :
Neste exemplo estou checando o contexto /web01/index.html para o backend HTTP.
option httpchk get /web01/index.hmtml HTTP/1.0\r\nHost:\ example.com default-server inter 3s fall 3 rise 2 server srv1 192.168.0.5:80 check server srv2 192.168.0.6:80 check
backend bk_myapp
mode tcp
option httpchk get /web01/index.html HTTP/1.0\r\nHost:\ www.domain.com default-server inter 3s fall 3 rise 2 server srv1 192.168.0.5:443 check check-ssl server srv2 192.168.0.6:443 check check-ssl
2) Testes Finais :
Momento em que o site fica em erro 500 e começa a direcionar a requisição para o outro servidor :
Momento em que o servidor começa a voltar a responder e o servidor volta para o pool :
Referência :
Documentação sobre os Healths Checks da HAPROXY :
http://www.haproxy.com/doc/aloha/7.0/haproxy/healthchecks.html#check-interval
Documentação sobre o conceito de LB Layer 7 :
https://devcentral.f5.com/articles/layer-7-switching-load-balancing-layer-7-load-balancing