HAProxy, похоже, не поддерживает балансировку соединений с серверами.
Имейте это в виду:
Как видно на рисунке, серверы C и D, похоже, получают гораздо больше подключений, чем другие. Из-за этой дополнительной нагрузки они продолжают отключаться и автоматически перезагружаются.
Я попытался прочитать официальную документацию HAproxy и немного погуглил, но не нашел ничего полезного. Надеюсь, здесь кто-то может помочь.
Пара вопросов:
Почему это происходит, когда конфигурация говорит об использовании roundrobin, спецификации сервера такие же и веса не применяются?
Что определяет подстолбец «макс» в столбце «Сеансы» (тот, который говорит 1970, 1444 и т. Д.). Серверы C, D, E находятся в диапазоне 3К, а остальные 2 - чуть меньше 2К. Почему разница?
Как все это сбалансировать?
Может кто-нибудь объяснить каждую колонку? Я удивлен, что официальный документ 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%.
Надеюсь, вам будет на что посмотреть.