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

Я работаю над масштабированием своего приложения на несколько серверов, и одно из требований заключается в том, чтобы клиент всегда общался с одним и тем же сервером (слишком много оперативных данных используется для эффективного отскока между серверами).

Моя текущая настройка - небольшой кластер серверов (использующий Linode). У меня есть интерфейсный узел, на котором выполняется HAProxy с использованием "источника баланса", так что IP-адрес всегда направлен на один и тот же узел.

Я заметил, что "источник баланса" не очень равномерное распределение. С моей текущей тестовой настройкой (2 бэкэнд-сервера) один сервер часто имеет в 3-4 раза больше подключений при использовании выборки размером 80-100 исходных IP-адресов.

Есть ли способ добиться более сбалансированного распределения? Очевидно, что липкие сессии запрещают "идеальный" баланс, но разделение 40/60 предпочтительнее, чем разделение 25/75.

2 ответа

HAProxy поддерживает изменение или вставку файла cookie, чтобы обеспечить постоянство сеанса с cookie параметр.

В разделах backend или listen добавьте следующее:

cookie COOKIENAME prefix

Этот пример изменит существующий файл cookie, добавив имя сервера в файл cookie с именем COOKIENAME, Ваш клиент увидит что-то вроде server1~someotherdata но ваше приложение увидит только someotherdata часть. Таким образом, вы можете использовать это на существующих куки. Кроме того, этот метод позволяет принудительно устанавливать постоянство сеанса только в том случае, если существует этот файл cookie. Это означает, что вы все равно можете равномерно распределять людей вокруг статических частей вашего сайта и применять липкость только при необходимости, но добавляя это имя файла cookie в сеанс.

Также назовите ваши серверы, чтобы ваши строки выглядели так:

server server1 1.2.3.4 cookie server1

Более подробную информацию можно найти в руководстве по настройке HAProxy, также вы можете использовать appsession параметр config также.

Как только вы это сделаете, вы можете выбрать свой собственный метод баланса из списка, я склонен использовать roundrobin но leastconn может дать вам лучший баланс, когда липкие сессии будут приняты во внимание.


Больше из документации, чтобы облегчить поиск справочного раздела:

cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ]
              [ postonly ] [ preserve ] [ domain <domain> ]*
              [ maxidle <idle> ] [ maxlife <life> ]
  Enable cookie-based persistence in a backend.
  May be used in sections :   defaults | frontend | listen | backend
                                 yes   |    no    |   yes  |   yes

Вы можете настроить алгоритм балансировки в HA-Proxy, хотя некоторые из них доступны. Как, например, Roundrobin или Loneconn.

Но вам нужно в целом настроить балансировку в соответствии с доменом пользователей, которым предоставляется контент. В большинстве случаев вам нужно проводить эмпирические тесты и повторять свое решение в соответствии с вашими выводами.

Другие вопросы по тегам