Я пытаюсь настроить HAProxy в качестве балансировщика нагрузки в кластере RabbitMQ. Я использую такой конфиг:
global
log /dev/log local0 debug
log /dev/log local1 debug
chroot /var/lib/haproxy
user haproxy
group haproxy
defaults
log global
retries 2
timeout connect 5000
timeout server 50000
timeout client 50000
listen rabbitmq-cluster
bind my.pu.blic.ip:5672
mode tcp
option tcpka
option redispatch
balance roundrobin
server rabbit1 rabbit1:5672 check inter 5000 downinter 500
server rabbit2 rabbit2:5672 check inter 5000 downinter 500
server rabbit3 rabbit3:5672 check inter 5000 downinter 500
Моя проблема в том, что клиенты, которые должны поддерживать соединение с сервером rabbitmq открытыми, закрывают соединение каждые 50 секунд. Есть ли вариант, который я забыл, или мне просто нужно увеличить время ожидания до более высокого значения, чтобы смягчить эту проблему?
Спасибо!
Похоже, что ваши клиенты устанавливают соединение, но после квитирования AMQP не происходит никакой другой активности (обычно потребители ждут данных из очереди, но очередь пуста).
Из опубликованной вами конфигурации тайм-аут установлен на 50 секунд, поэтому ожидается закрытие соединения через 50 секунд, если сетевая активность через это соединение отсутствует.
Чтобы справиться с этим, вы можете увеличить время ожидания до разумного для вашего варианта использования значения или включить сердцебиение (см. раздел Hearbeat), дополнительно изучите Конфигурация руководство (см. hearbeat
описание опции). В вашем случае вам нужно изменить значение сердцебиения на значение менее 50 секунд, скажем timeout
/ 3 округляется до ... скажем, 15.
Обычно, когда используются звуковые сигналы, кадры сердцебиения отправляются после интервала слышимости после последнего действия соединения. В случае сбоя трех кадров (требуется 3-кратный интервал) соединение должно быть закрыто сервером или клиентом в обязательном порядке без каких-либо подтверждений связи.