Configure o HAProxy para o rabbitmq

1

Eu quero usar o HAProxy como um balanceador de carga. Eu quero colocar dois servidores rabbitmq atrás haproxy. Ambos os servidores rabbitmq estão em diferentes instâncias do EC2. Eu configurei o servidor HAProxy seguindo esta referência . Eu trabalho, mas o problema é que as mensagens não são publicadas no padrão roundrobin. As mensagens são publicadas apenas em um servidor. Existe alguma configuração diferente para minha exigência?

Minha configuração em /etc/haproxy/haproxy.cfg

listen  rebbitmq *:5672
        mode    tcp
        balance roundrobin
        stats enable
        option  forwardfor
        option  tcpka
        server  web2 46.XX.XX.XXX:5672 check inter 5000 backup
        server web1 176.XX.XX.XX:5672 check inter 5000 backup
listen  web-service *:80
          mode    http
         balance roundrobin
        option httpchk HEAD / HTTP/1.0
         option httpclose
        option forwardfor
        option httpchk OPTIONS /health_check.html
        stats enable
        stats refresh 10s
        stats hide-version
        stats scope   .
        stats uri     /lb?stats
        stats realm   LB2\ Statistics
        stats auth    admin:Adm1nn

Atualização:

Eu fiz algumas P & D sobre isso e descobri que o HAProxy é round robin a conexão no servidor rabbitmq. por ex: se eu solicitar 10 conexões, ele arredondará a conexão 10 nos meus 2 servidores rabbitmq e publicará a mensagem.

Mas o problema é que eu quero arredondar as mensagens, não a conexão. Ou seja, se eu enviar 1000 msg de cada vez a partir de uma conexão, então 500 msg devem ir para rabbit server1 e 500 msg devem ir para rabbit server2. Qual deve ser a configuração que devo seguir?

    
por Anand Soni 11.05.2012 / 14:22

2 respostas

1

Desde que seu cliente mantenha aberta a conexão com o HAProxy, a conexão do HAProxy para a conexão do RabbitMQ não será movida. HAProxy é um balanceador de carga baseado em conexão, não baseado em mensagem (até onde eu sei). Ele não sabe quando uma mensagem começa ou termina (teria que conhecer os protocolos internos para fazer isso com sucesso).

Para arredondar os servidores do RabbitMQ, você precisará ter seu cliente conectado ao HAProxy, enviar a mensagem e desconectar (não manter a conexão aberta). Volte a ligar para enviar a próxima mensagem e, em seguida, desligue.

Cada vez que você se reconectar, o HAProxy irá / deve movê-lo para um servidor diferente.

    
por 11.05.2012 / 15:49
1

Bad Rabbit. Mau. Há um certo grau de sobrecarga ao estabelecer uma conexão e um canal no RabbitMQ, bem como o potencial de aumento de latência ao fazer isso em um ambiente RabbitMQ em cluster. Você definitivamente não quer se conectar, enviar, desconectar. Deixe a conexão aberta. O RabbitMQ é bastante rápido e existem maneiras de obter um desempenho realmente alto (por exemplo, o editor de uso confirma em vez de transações, usa mensagens na memória, etc.). Você vai matar o desempenho do seu aplicativo se você desconectar / reconectar em todos. solteiro. mensagem.

Quantas mensagens por segundo seu aplicativo envia? 1000? O RabbitMQ pode lidar com isso. 5000? Fácil. 50k? Agora precisamos começar a fazer algumas coisas. Lembre-se, isso é através de um único canal da conexão. Se você é multi-threaded, você pode obter 50K por canal sem muita dificuldade.

    
por 16.07.2012 / 22:36