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

HAProxy неправильно балансирует нагрузку на сервер

HAProxy, похоже, не поддерживает балансировку соединений с серверами.

Имейте это в виду:

Как видно на рисунке, серверы C и D, похоже, получают гораздо больше подключений, чем другие. Из-за этой дополнительной нагрузки они продолжают отключаться и автоматически перезагружаются.

Я попытался прочитать официальную документацию HAproxy и немного погуглил, но не нашел ничего полезного. Надеюсь, здесь кто-то может помочь.

Пара вопросов:

  1. Почему это происходит, когда конфигурация говорит об использовании roundrobin, спецификации сервера такие же и веса не применяются?

  2. Что определяет подстолбец «макс» в столбце «Сеансы» (тот, который говорит 1970, 1444 и т. Д.). Серверы C, D, E находятся в диапазоне 3К, а остальные 2 - чуть меньше 2К. Почему разница?

  3. Как все это сбалансировать?

  4. Может кто-нибудь объяснить каждую колонку? Я удивлен, что официальный документ HAproxy этого не объясняет.

Вместо циклического перебора следует использовать метод «минимум соединения». Он использует немного больше ЦП, но лучше балансирует нагрузку, если ваши сеансы не очень короткие.

Если вы посмотрите, на ваших серверах A, B и E открыто ~ 250 текущих сессий (Sessions Cur). Но у C + D во много раз больше. Но поскольку вы указали «циклический перебор», эти перегруженные серверы получают равномерное распределение всего нового трафика.

"leastconn" позволяет серверам восстановиться, если они будут перегружены. «roundrobin» продолжает посылать трафик всем одинаково (наращивая количество подключений к медленному серверу), пока они не упадут.

Значения всех переменных сеанса документируются ближе к концу очень полная документация. (Ищите "статистика и мониторинг")

Что будет, если убрать C и D. Как меняется поведение?

Как выглядит ваша конфигурация?

Отказ от ответственности: ниже представлены мои наблюдения за поведением HAProxy, а не за тем, чем оно могло бы быть на самом деле.

Насколько я понимаю, HAProxy всегда использует веса. Если вы посмотрите на свои веса на скриншоте, там говорится, что все они имеют вес 1. Запустив roundrobin, у нас есть 4 сервера с весом 50 и один с весом 1. Четыре сервера с весом 50 почти идеальны с точки зрения количества сеансов ( 2-3 шт.). Сервер с весом 1 имеет правильное количество сессий пропорционально говоря.

Попробуйте явно установить для весов такое же более высокое значение. Это должно помочь ему быть более точным при расчете веса, что должно обеспечить более высокую точность. Если вес один для всех, то это 20%, что не очень точно. Теперь, если вы установите для всех 5 вес 20, тогда он сможет работать с 1%.

  1. Точно сказать не могу. Сначала мне нужно увидеть конфигурацию.
  2. Я почти уверен, что столбец «max» - это максимальное количество подключений, которые он имел в одной любой заданной точке, а не фактический максимально допустимый.
  3. Мы используем циклический перебор, и он отлично работает, поэтому нам снова нужно посмотреть конфигурацию и попробовать кое-что.
  4. Я думаю, что большинство столбцов довольно ясны. Что мне помогает, так это посмотреть на расширенный столбец выше (например, очередь, скорость сеанса и т. Д.)

Надеюсь, вам будет на что посмотреть.