Balanceamento de carga de failover do mysql de Haproxy

5

Eu configurei a replicação master-master do mysql e agora estou tentando carregar os servidores mysql com o Haproxy.

  • Balanceador de carga: 192.168.1.5
  • mysql1: 192.168.1.7
  • mysql2: 192.168.1.8

A configuração abaixo do haproxy está funcionando bem e está girando nós como a roundrobina.

# this config needs haproxy-1.1.28 or haproxy-1.2.1

global
    log 127.0.0.1   local0
    log 127.0.0.1   local1 notice
    #log loghost    local0 info
    maxconn 4096
    #chroot /usr/share/haproxy
    chroot /etc/haproxy
    user haproxy
    group haproxy
    pidfile /var/run/haproxy.pid
    daemon
    #debug
    #quiet

defaults
    log global
    #mode   http
    mode    tcp
    #option httplog
    option  dontlognull
    retries 3
    option redispatch
    maxconn 2000
    #contimeout 5000
    contimeout  3600000
    #clitimeout 50000
    clitimeout  3600000
    #srvtimeout 50000
    srvtimeout  3600000

listen mysql_cluster 0.0.0.0:3307
    mode tcp
    balance roundrobin
    option mysql-check user root
    #option httpchk GET /mysqlchk/?port=3306
    option tcpka
    server mysql1 192.168.1.107:3306 
    server mysql2 192.168.1.108:3306

NÃO é isso que eu queria.

O que eu quero é Active-Passive setup. Como, um configure para que ele deve enviar todos os pedidos para 192.168.1.107 por padrão e failover para 192.168.1.108 if 192.168.1.107 não existe. Eu vi alguns links fazendo isso mencionando como backup mas não funcionou para mim.

Quando tentei substituir as duas últimas linhas da configuração acima por

server mysql1 192.168.1.107:3306 check port 9200 inter 12000 rise 3 fall 3
server mysql2 192.168.1.108:3306 check port 9200 inter 12000 rise 3 fall 3 backup 

Estou enfrentando a mensagem de erro enquanto reinicio o haproxy e ele está parando.

Jan 20 16:18:18 localhost haproxy[523]: proxy mysql_cluster has no server available!
Jan 20 16:18:18 localhost haproxy[523]: proxy mysql_cluster has no server available!

Alguém tem alguma configuração de trabalho confiável do haproxy para balanceamento de carga do mysql para usá-lo na produção com algumas estatísticas do haproxy ?. Eu preciso como uma configuração ativa-passiva que estou perguntando acima que redirecionam para o nó de backup se nenhum nó estiver disponível. Vou implementar isso no novo servidor de produção do ubuntu.

Qualquer ajuda é muito apreciada !. Obrigado!

    
por user53864 21.01.2012 / 16:33

4 respostas

1

Remova a porta de verificação 9200s, então sua opção de backup deve funcionar. Você parece estar misturando exemplos diferentes, o mysql-check funciona na porta padrão, pois há outro exemplo comum que usa uma verificação http onde eles configuram um processo xinetd respondendo na porta 9200 que executa um script de verificação separado.

    
por 21.01.2012 / 19:48
4

Você tem a replicação master-master funcionando, mas mesmo assim eu não acho que usar o HAProxy para balanceamento de carga do MySQL seja a escolha certa.

O HAProxy é ótimo, mas ao operar como um balanceador de carga de nível TCP, ele não pode ter nenhuma noção do estado SQL. O comportamento com transações SQL de execução longa não é claro e propenso a erros; isso é algo que você não deveria estar feliz.

Sua configuração mestre-mestre tem a capacidade de gravação de um único nó (já que todas as gravações precisam ser duplicadas). Assim, o que você está ampliando com sua configuração são as leituras & conexões. Um mais comum e IMHO muito melhor configuração é:

  1. Pendure alguns escravos MySQL somente leitura do par mestre-mestre.
  2. Altere o código do aplicativo para enviar todas as gravações para o mestre e quase todas as leituras (quando possível) para um dos escravos somente leitura.
  3. Seja esperto em estabelecer conexões com o MySQL. Preferencialmente reutilize conexões de um pool de conexões.

Algo como o proxy do MySQL ou outro middleware de manipulação de conexão também pode funcionar bem no seu caso.

"Alto desempenho do MySQL" é um ótimo livro com sugestões práticas sobre como escalar o MySQL. Se você ler este livro, acho que verá mais claramente quais projetos são comuns e comprovados para sua situação específica.

    
por 22.01.2012 / 10:45
2

Essa configuração faz exatamente o que você quer:)

global
       log 127.0.0.1 local0
       maxconn 4096
       user haproxy
       group haproxy
       daemon

defaults
       log global
       mode tcp
       option tcplog
       option dontlognull
       retries 3
       option redispatch
       maxconn 2000
       contimeout 4000
       clitimeout 50000
       srvtimeout 30000
       stats enable
       stats scope .

frontend mysql_cluster
       bind 3.3.3.3:3307
       #bind *:3307
       default_backend mysql_cluster

backend mysql_cluster
       mode tcp
       option mysql-check
       balance roundrobin
       server db01_1.1.1.1       1.1.1.1:3306      weight 1        check port 3306
       server db02_2.2.2.2       2.2.2.2:3306      weight 100      check port 3306 backup


listen stats 3.3.3.3:10000
       mode http
       option httpclose
       balance roundrobin
       stats uri /
       stats realm Haproxy\ Statistics
       #stats auth user:pass
    
por 31.07.2012 / 14:28
1

Para um verdadeiro cluster mestre-mestre do MySQL em combinação com o haproxy, tente usar o codership Galera ou o percona XtraDB Cluster.

    
por 07.06.2012 / 16:57