Я хочу использовать 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 сообщений за раз из 1 соединения, то 500 сообщений должны идти на сервер кролика1, а 500 сообщений должны идти на сервер кролика2. Какой должна быть конфигурация, которой я должен следовать?
Плохой кролик. Плохой. При установлении соединения и канала в RabbitMQ существует некоторая степень накладных расходов, а также возможность увеличения задержки при выполнении этого в кластерной среде RabbitMQ. Вы определенно не хотите подключаться, отправлять, отключаться. Оставьте соединение открытым. RabbitMQ работает довольно быстро, и есть способы добиться от него действительно высокой производительности (например, использовать подтверждения издателя вместо транзакций, использовать сообщения в памяти и т. Д.). Вы снизите производительность своего приложения, если будете отключать / повторно подключаться каждый раз. не замужем. сообщение.
Сколько сообщений в секунду отправляет ваше приложение? 1000? RabbitMQ справится с этим. 5000? Легко. 50К? Теперь нам нужно начать делать несколько вещей. Помните, что это через единственный канал связи. Если у вас многопоточность, вы можете без особых проблем получить 50 КБ на канал.
Пока ваш клиент поддерживает соединение с HAProxy, соединение от HAProxy к RabbitMQ не перемещается. HAProxy - это балансировщик нагрузки на основе соединения, а не на основе сообщений (насколько мне известно). Он не знает, когда сообщение начинается или заканчивается (для успешного выполнения ему необходимо знать внутренние протоколы).
Чтобы использовать циклический перебор серверов RabbitMQ, вам необходимо, чтобы ваш клиент подключился к HAProxy, отправил сообщение, а затем отключился (не оставляйте соединение открытым). Подключитесь заново, чтобы отправить следующее сообщение, затем отключитесь.
Каждый раз при повторном подключении HAProxy будет / должен перемещать вас на другой сервер.