Настройте HAProxy для rabbitmq

Я хочу использовать HAProxy в качестве балансировщика нагрузки. Я хочу поставить два сервера rabbitmq за haproxy. Оба сервера rabbitmq находятся на разных экземплярах EC2. Я настроил HAProxy сервер, следуя этой ссылке. Я работаю, но проблема в том, что сообщения не публикуются в шаблоне roundrobin. Сообщения публикуются только на одном сервере. Есть ли другая конфигурация для моего требования?

Моя конфигурация в /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

Обновить:

Я сделал несколько исследований и разработок по этому вопросу и обнаружил, что HAProxy использует циклическое соединение на сервере rabbitmq. Например: если я запрашиваю 10 подключений, он округляет 10 подключений через мои 2 сервера rabbitmq и публикует сообщение.

Но проблема в том, что я хочу округлять сообщения, а не соединение. то есть, если я отправляю 1000 сообщений за один раз из одного соединения, то 500 сообщений должны идти на сервер кролика1, а 500 сообщений должны идти на сервер кролика2. Какой должна быть конфигурация, которой я должен следовать?

2 ответа

Плохой кролик Плохой. При установке соединения и канала в RabbitMQ существует определенная степень издержек, а также возможность увеличения задержки при выполнении этого в кластерной среде RabbitMQ. Вы определенно не хотите подключаться, отправлять, отключать. Оставьте соединение открытым. RabbitMQ довольно быстрый, и есть способы получить действительно высокую производительность (например, использовать подтверждение издателя вместо транзакций, использовать сообщения в памяти и т. Д.). Вы снизите производительность своего приложения, если отключите / переподключите каждый. не замужем. сообщение.

Сколько сообщений в секунду отправляет ваше приложение? 1000? RabbitMQ может справиться с этим. 5000? Легко. 50K? Теперь нам нужно начать делать несколько вещей. Помните, что это через один канал связи. Если вы многопоточные, вы можете получить 50K на канал без особых проблем.

Пока ваш клиент остается открытым для соединения с HAProxy, соединение от HAProxy до соединения RabbitMQ не будет перемещаться. HAProxy - это балансировщик нагрузки на основе соединений, а не на основе сообщений (насколько я знаю). Он не знает, когда сообщение начинается или заканчивается (ему необходимо знать внутренние протоколы, чтобы успешно это сделать).

Чтобы выполнить циклический перебор серверов RabbitMQ, вам необходимо подключить клиента к HAProxy, отправить сообщение, а затем отключиться (не оставляйте соединение открытым). Повторно подключитесь, чтобы отправить следующее сообщение, затем отключите.

Каждый раз, когда вы переподключаетесь, HAProxy будет / должен переместить вас на другой сервер.

Другие вопросы по тегам