HAProxy com falha de 'backup'

1

Eu tenho uma configuração simples de 2 MySQL sendo balanceada por carga pelo HAProxy. Por uma razão infeliz, preciso usá-los no modo Passivo \ Ativo. Então eu pensei em configurar um banco de dados como 'backup' e ir dormir. Mas eu estava errado. Sempre que eu adiciono o 'backup' na linha do servidor, o HAProxy lança um erro de link de comunicação (essencialmente dizendo 'no DB available' (com o 'backup' funciona muito bem). Simplesmente não considera esse servidor como uma opção válida. .

Eu tentei esta configuração:

listen mysql 10.0.0.109:3307

    mode tcp
    balance roundrobin
    option httpchk
    server db01 10.0.0.236:3306
    server db02 10.0.0.68:3306 backup

e também esta configuração:

frontend mysql_proxy

    bind 10.0.0.109:3307
    default_backend mysql

backend mysql

mode tcp
balance roundrobin
option httpchk
server db01 10.0.0.236:3306  
server db02 10.0.0.68:3306 backup

Nada funcionou!

Alguém pode me apontar na direção certa?

Obrigado

    
por A.RG 12.10.2011 / 23:39

2 respostas

4

Enfrentando a questão original de por que o exemplo não funciona, há duas coisas que se destacam:

  1. a palavra-chave check não é adicionada às declarações server , o que indica ao haproxy para usar a diretiva de verificação de integridade neste servidor.
  2. a palavra-chave httpchk é melhor usada em conjunto com uma port na diretiva server 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.

link

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.

    
por 07.12.2012 / 04:00
0

qual versão haproxy você está usando ?, se você estiver usando a versão 1.4, é compatível com a verificação de integridade do mysql "option mysql-check", por exemplo:

mode tcp
balance roundrobin
option tcplog
option mysql-check user haproxy
server svr1 svr1:3306 check inter 2s rise 2 fall 2
server svr2 svr2:3306 check backup inter 2s rise 2 fall 2

minha configuração, está funcionando bem com o mestre-mestre do mysql (usando standy ativo).

    
por 13.10.2011 / 12:53

Tags