HAProxy не балансирует нагрузку на сервер
HAProxy не поддерживает балансировку соединений с серверами.
Имейте это в виду:
- используя HAProxy v1.3.26
- 5 одинаково сбалансированных серверных спецификаций
- алгоритм циклический, но весовые коэффициенты не применяются для каждого сервера
- Максимальное количество глобальных подключений в haproxy равно 80000
Как видно на рисунке, серверы C и D, похоже, получают гораздо больше соединений, чем другие. Из-за этой дополнительной нагрузки они продолжают падать и автоматически перезагружаются.
Я попытался прочитать официальные документы HAproxy и немного погуглил, но ничего полезного не нашел. Надеюсь, кто-то здесь может помочь.
Пара вопросов:
Почему, когда в конфиге указано использование roundrobin, спецификации сервера совпадают, а веса не применяются?
Что определяет подстолбец "max" в столбце "Sessions" (тот, который говорит 1970, 1444 и т. Д.). Серверы C, D, E находятся в диапазоне 3K, а остальные 2 чуть меньше 2K. Почему разница?
Как сохранить все это сбалансированным?
Может кто-нибудь объяснить каждый столбец? Я удивлен, что официальный документ HAproxy действительно не объясняет это.
2 ответа
Вы должны использовать метод "lessconn" вместо round robin. Он использует немного больше ресурсов процессора, но обеспечивает лучшую балансировку нагрузки, если ваши сеансы не очень короткие.
Если вы посмотрите, на ваших серверах A,B и E открыто ~250 текущих сессий (Sessions Cur). Но C+D уже много раз. Но поскольку вы указали "циклический перебор", эти перегруженные серверы получают равномерное распределение всего нового трафика.
"lessconn" позволяет серверам восстанавливаться, если они перегружены. "roundrobin" продолжает отправлять всем трафик одинаково (накапливая больше подключений к медленному серверу), пока они не упадут.
Значения всех переменных сеанса документированы ближе к концу очень полной документации. (Поиск по "статистике и мониторингу")
Что произойдет, если вы возьмете C и D. Как меняется поведение?
Как выглядит ваша конфигурация?
Отказ от ответственности: ниже приведены мои наблюдения поведения HAProxy, а не то, что это может быть на самом деле.
HAProxy всегда использует веса из того, что я понимаю. Если вы посмотрите на свои веса на скриншоте, он говорит, что все они имеют вес 1. Запустив Roundrobin, у нас есть 4 сервера с весом 50 и один с весом 1. Четыре из веса 50 почти идеальны с точки зрения количества сессий (2-3 выкл). Сервер с весом 1 имеет правильное количество сеансов, пропорционально говоря.
Попробуйте явно установить веса на то же более высокое значение. Это должно помочь ему быть немного более мелкозернистым при расчете веса, что должно обеспечить более высокую точность. Если вес равен одному на всех из них, то он составляет 20%, что не очень точно. Теперь, если вы установите все 5 к весу 20, то это может иметь значение в 1%.
- Точно сказать не могу. Мне нужно сначала посмотреть конфигурацию.
- Я почти уверен, что столбец "max" - это максимальное количество подключений, которое он имел в любой заданной точке, а не фактический максимально допустимый.
- Мы используем циклический перебор, и он отлично работает, так что нам нужно посмотреть конфигурацию и попробовать некоторые вещи.
- Я думаю, что большинство столбцов довольно ясны. Что помогает мне, так это посмотреть расширенный столбец выше (например, Очередь, Частота сеансов и т. Д.)
Надеюсь, это даст вам несколько вещей, на которые стоит посмотреть.