HAProxy e o Health-Check

Aplicações escaláveis possuem um cartridge HAPRoxy, usado para balancear a carga entre os gears da aplicação. Uma parte importante deste mecanismo é o "monitoramento da saúde" (health-check) dos gears.

A cada dois segundos o HAProxy "pinga" a aplicação, acessando a url "/" na espera de uma resposta HTTP 200 OK. Caso esta resposta seja diferente, significa que a aplicação neste gear está indisponível, fazendo com que o gear seja removido do balanceamento. Você já deve ter visto isso nos logs do app:

$ rhc tail [APP]
...
- - - [18/Oct/2013:14:19:13 +0000] "GET / HTTP/1.0" 200 - "-" "-"
- - - [18/Oct/2013:14:19:15 +0000] "GET / HTTP/1.0" 200 - "-" "-"
- - - [18/Oct/2013:14:19:17 +0000] "GET / HTTP/1.0" 200 - "-" "-"
- - - [18/Oct/2013:14:19:19 +0000] "GET / HTTP/1.0" 200 - "-" "-"
- - - [18/Oct/2013:14:19:21 +0000] "GET / HTTP/1.0" 200 - "-" "-"

Em alguns casos, acessar a raiz do app é algo indesejado, tanto por ser uma operação de alto custo ou porque o app não possui um index para executar. Além disso, uma operação HTTP GET retorna conteúdo, aumentando desnecessariamente o tráfego entre HAProxy <-> Aplicação.

Podemos alterar tanto a operação HTTP quanto a URL que o HAProxy acessa de forma simples. Acesse o gear da aplicação e edite o arquivo haproxy/conf/haproxy.cfg:

$ rhc ssh [APP]
> vim haproxy/conf/haproxy.cfg

Procure pela seguinte linha, no final do arquivo:

    option httpchk GET /

Substitua-a por:

    option httpchk HEAD /health

Isto instrui o HAProxy a usar a operação HEAD (mais "leve", pois não trafega dados na conexão) na url /health. Antes de reiniciar o serviço, certifique-se que sua aplicação responde corretamente a URL /health. Você pode usar qualquer URL neste campo, desde que esta retorne HTTP 200 OK.

Agora basta reiniciar o HAProxy. Se ainda estiver no console SSH do gear, execute:

> gear restart
Cart to restart?
1. haproxy-1.4
2. php-5.3
?  1
CLIENT_MESSAGE: Restarted HAProxy instance

O restart também pode ser feito a partir de sua máquina local, usando o RHC:

$ rhc app restart [APP]

Pronto! Verfique as novas requisições no log:

$ rhc tail [APP]
...
- - - [18/Oct/2013:16:40:09 +0000] "HEAD /health HTTP/1.0" 200 - "-" "-"
- - - [18/Oct/2013:16:40:11 +0000] "HEAD /health HTTP/1.0" 200 - "-" "-"
- - - [18/Oct/2013:16:40:13 +0000] "HEAD /health HTTP/1.0" 200 - "-" "-"
- - - [18/Oct/2013:16:40:15 +0000] "HEAD /health HTTP/1.0" 200 - "-" "-"
- - - [18/Oct/2013:16:40:17 +0000] "HEAD /health HTTP/1.0" 200 - "-" "-"

Em breve será possível definir os parâmetros do health-check de forma ainda mais simples.


Post original publicado em http://getupcloud.com/blog/haproxy-e-o-health-check

Tem mais dúvidas? Envie uma solicitação

0 Comentários

Por favor, entre para comentar.
Powered by Zendesk