Назад | Перейти на главную страницу

HAProxy + RabbitMQ, поддерживайте соединения

Я пытаюсь настроить 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-кратный интервал) соединение должно быть закрыто сервером или клиентом в обязательном порядке без каких-либо подтверждений связи.