HAProxy Apenas enviando tráfego para um nó

2

Eu tenho um HAProxy com IP 10.60.61.20 e três nós MariaDB no IP .21, .22, .23, todos na mesma sub-rede. Eu tenho o cluster MariaDB sincronizado e eles podem ler / gravar um ao outro, mas quando eu configuro o HAProxy, ele está enviando apenas o tráfego para 10.60.61.21 (o primeiro nó). Mesmo depois de desligar o mysql no primeiro nó, o HAProxy diz que houve um erro de conexão e não envia tráfego para os outros dois nós. Alguém viu isso antes? Acabei de construir 4 servidores Ubuntu 12.04, 3 são para os nós e o outro é o HAProxy. Aqui está o meu arquivo HAProxy .conf:

global
    log 127.0.0.1 local0 notice
    user haproxy
    group haproxy

defaults
    log global
    retries 2
    timeout connect 3000
    timeout server 5000
    timeout client 5000

listen mysql-cluster
    bind 0.0.0.0:3306
    mode tcp
    option mysql-check user haproxy_check
    balance roundrobin
    server mariadb1 10.60.61.22:3306 check
    server mariadb2 10.60.61.21:3306 check
    server mariadb3 10.60.61.23:3306 check

Qualquer ajuda seria apreciada.

    
por Daniel Graves 11.06.2014 / 21:30

3 respostas

0

Obrigado a todos por todas as suas sugestões. Eu finalmente resolvi esse problema, o que aconteceu foi que durante a instalação, acessei o primeiro servidor MariaDB e falei, essencialmente, (não sou um mysql pro) "conceda ao usuário acesso haproxy_check a qualquer banco de dados com permissões completas". Mas eu não fiz isso para os outros servidores também. Então o HAProxy conseguiu acessar o primeiro servidor usando o nome de usuário / senha corretos, mas essas permissões de usuário não foram replicadas para os outros bancos de dados, então eu tive que entrar manualmente em cada servidor MariaDB e criar a entrada para esse usuário qualquer banco de dados. Quando isso aconteceu, tudo começou a funcionar imediatamente. Mais uma vez, obrigado a todos pela sua percepção. Presumi que, porque meu cluster galera estava repleto, minha entrada no primeiro servidor levaria o resto, mas esse não era o caso de uma entrada de acesso do usuário. No entanto, todas as tabelas e campos e edições e tais estavam replicando, o que me levou a acreditar que as permissões também, mas, infelizmente, não o fizeram.

    
por 16.06.2014 / 17:09
0

Eu acho que seu problema está no lado do aplicativo.

Como este é o modo TCP, ele irá equilibrar as conexões TCP entre os vários servidores e não as transações SQL. Isso significa que se seu aplicativo não usar um pool de conexões, mas apenas manter uma única conexão aberta, essa conexão permanecerá aberta em relação ao servidor único. Se o aplicativo não tentar novamente em conexões com falha, o HAProxy não moverá magicamente a conexão TCP com falha para outro servidor.

Eu acho que um teste simples seria executar algo como o seguinte comando contra o haproxy IP várias vezes (no entanto, não o execute dentro de uma única sessão de console):

mysql -u monitor -p -e "show variables like 'server_id'"
    
por 12.06.2014 / 18:42
0

Gostaria de verificar o log no haproxy load balancer.

# less /var/log/haproxy.log

Você deve ver as mensagens UP e DOWN . Se você perceber que não está falhando rápido o suficiente, você sempre pode alterar:

server mariadb1 10.60.61.22:3306 check
server mariadb2 10.60.61.21:3306 check
server mariadb3 10.60.61.23:3306 check

Para algo mais agressivo, como fail over after 2 failed checks, check ever second :

server mariadb1 10.60.61.22:3306 check fall 2 inter 1000
server mariadb2 10.60.61.21:3306 check fall 2 inter 1000
server mariadb3 10.60.61.23:3306 check fall 2 inter 1000

DigitalOcean tem um ótimo tutorial sobre isso.

    
por 13.06.2014 / 00:22