Enfrentando a questão original de por que o exemplo não funciona, há duas coisas que se destacam:
- a palavra-chave
check
não é adicionada às declaraçõesserver
, o que indica ao haproxy para usar a diretiva de verificação de integridade neste servidor. - a palavra-chave
httpchk
é melhor usada em conjunto com umaport
na diretivaserver
para definir onde o serviço de verificação de integridade HTTP está sendo executado. Esse método pressupõe que você tenha configurado um serviço em algum lugar que relate a integridade do mestre.
Por exemplo, acho que algo assim funcionaria (não testado)
backend mysql
mode tcp
balance roundrobin
option httpchk GET /master_status
server db01 10.0.0.236:3306 weight 100 check port 3305 inter 1s rise 3 fall 2
server db02 10.0.0.68:3306 weight 100 check port 3305 inter 1s rise 3 fall 2 backup
Neste exemplo, o haproxy consultará o /master_status
url na porta 3305 em cada server
. Se o servidor retornar um código de status 2xx, o back-end estará disponível por meio do haproxy. Caso contrário, ficará offline.
Para resolver o problema do serviço de verificação de integridade, você pode usar o rubygem mysql_health
. Você executaria esse serviço em cada servidor de banco de dados que participa do cluster haproxy.
Para iniciar o serviço de verificação de integridade, você executaria algo como:
/usr/bin/mysql_health --server:pid-file=/var/run/mysql_health.pid \
--log:file /var/log/mysql_health.log \
--server:daemonize \
--server:port 3305 \
--check:master \
--check:database mysql
Existem muitas outras opções de linha de comando disponíveis. Use o argumento --help
para mais detalhes.