Настройте 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 будет / должен переместить вас на другой сервер.