Балансировка нагрузки (HAProxy или другое) - липкие сессии - PullRequest
17 голосов
/ 27 июня 2011

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

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

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

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

Ответы [ 2 ]

25 голосов
/ 29 июня 2011

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

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

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
0 голосов
/ 27 июня 2011

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

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

...