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

Неожиданное поведение при динамическом добавлении узла на сервере HAproxy

Я хотел использовать HAProxy в своем веб-приложении для балансировки нагрузки. Я пытаюсь динамически добавить новый узел rabbitmq на сервер HAProxy с помощью команды: haproxy -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid). Я использую режим tcp-соединения с leastconn алгоритм балансировки в балансировке нагрузки. Ожидается, что когда в одном rabbitmq есть 3 соединения, я добавляю новый сервер кролика в сервер HAProxy. поэтому следующее соединение перейдет на 2-й сервер rabbitmq, чего в моем случае не происходит. Он беспорядочно раздает соединение.

Вот мой файл конфигурации:

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout      5000
        clitimeout 5000
        srvtimeout 5000
listen rabbitmq 0.0.0.0:5672
         mode    tcp
         stats   enable
         balance leastconn
        option tcplog
        server  rabbit01 xx.xx.xx.xx:5672 check
        server  rabbit02 xx.xx.xx.xx:5672 check
listen tomcatq 0.0.0.0:80
         mode    http
         stats   enable
         balance roundrobin
         stats refresh 10s
        stats refresh 10s
        stats uri     /lb?stats
        stats auth    admin:admin
         option httplog         

Какая проблема вызывает такое поведение? Любое предложение будет оценено по достоинству.

Не уверен, как добавить узел в haproxy. Новый узел уже существует в haproxy.cfg? Если вы добавите узел с помощью команды: haproxy -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid), haproxy перезапустится, вся информация о подключении будет удалена. Таким образом, новое соединение не может быть отправлено на второй сервер rabbitmq.

В Документы HAProxy сказать относительно leastconn алгоритм балансировки:

Использование этого алгоритма рекомендуется там, где ожидаются очень длинные сеансы, такие как LDAP, SQL, TSE и т. Д., Но он не очень хорошо подходит для протоколов, использующих короткие сеансы, таких как HTTP.

Я не уверен, как работает AMQP, но не думаю, что вы увидите идеальные результаты, особенно при небольшом количестве подключений с минимальным подключением. Судя по вашим данным, не похоже, что вы добавляете узел динамически, на самом деле кажется, что вы перезапускаете экземпляр HAProxy?