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

HAProxy - неравномерное распределение нагрузки

В настоящее время я тестирую haproxy для балансировки нагрузки нашего информационного бюллетеня. Мы создаем индивидуальную рассылку новостей для наших клиентов.

Для этого мы используем два веб-сервера (идентичные машины) и один «почтовый движок». Почтовый движок обращается к веб-серверам, которые затем возвращают персонализированный информационный бюллетень в формате html.

Теперь проблема в том, что у одного веб-сервера загрузка процессора около 75%, а на другом - только 15%. Если посмотреть на «Скорость сеанса» при тестировании, на обоих серверах «Скорость сеанса -> Cur» все время находится между 3 и 4.

Но если посмотреть на «Сеансы», то здесь «Сеансы -> Cur» имеют всего 10, веб-сервер 1 имеет «Cur» 8, а другой веб-сервер имеет значение от 0 до 2.

Почему на первом веб-сервере будет 8 сеансов, а на другом 0–2?

Вот мой конфиг:

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        timeout connect 5000
        timeout client  50000
        timeout server  50000

listen mailgenerator 10.46.70.75:80
        mode http
        stats enable
        balance roundrobin
        option httpclose
        option forwardfor
        option httpchk HEAD /robots.txt
        server mail1 192.168.70.11:80 check weight 100
        server mail2 192.168.70.12:80 check weight 100

Если вы используете циклический перебор, то соединения будут распределяться равномерно по мере их поступления, независимо от нагрузки. Поэтому, если у вас более медленный сервер или медленный процесс, он может создать очередь на одном, в то время как другой будет свободен.

Вы можете получить гораздо более равномерное распределение, если используете балансировку с наименьшим количеством соединений и установите низкое значение maxconn для каждого сервера, чтобы соединения помещались в очередь в haproxy, а не на каждом сервере.

Для http текущие сеансы мало что значат. Сеансы Total и LbTot лучше отражают балансировку серверов. Если эти числа достаточно четные, это может быть что-то на одном сервере, заставляющее его обрабатывать свои запросы медленнее, что приводит к увеличению нагрузки.