Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

HAProxy поддерживает модификацию или вставку файла cookie для обеспечения сохранности сеанса с параметром cookie.

В разделах бэкэнд или прослушивания добавьте следующее:

cookie COOKIENAME prefix

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

Также назовите свои серверы, поэтому строки вашего сервера выглядят следующим образом:

server server1 1.2.3.4 cookie server1

Подробнее в HAProxy config guide, также похоже, что вы можете использовать параметр конфигурации appsession.

Как только вы это сделаете, вы можете выбрать свой собственный метод баланса из списка, я склонен использовать 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

Ответ 2

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

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