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

haproxy и постоянные соединения

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

Сейчас я считать что когда пользователь обновляет страницу, она отправляется на один из этих серверов, но если он отправляется на другой сервер, он, конечно, теряет сеанс, не так ли?

Главный вопрос заключается в следующем: как сделать так, чтобы клиент подключался к одному серверу?

Вот моя конфигурация для бэкэнда.

backend social_backend
mode http
option httplog
option http-server-close
option forceclose
no option httpclose
balance roundrobin
option forwardfor
timeout queue 5000
timeout server 86400000
timeout connect 86400000
timeout check 1s

server socket1 10.10.10.1:81 weight 1 maxconn 1024 check
server socket2 10.10.10.2:81 weight 1 maxconn 1024 check
server socket3 10.10.10.3:81 weight 1 maxconn 1024 check

Вам нужны "липкие сеансы", и вы можете использовать appsession параметр в HAProxy, чтобы включить это:

appsession <cookie> len <length> timeout <holdtime> 
           [request-learn] [prefix] [mode <path-parameters|query-string>]

Когда файл cookie приложения определен в бэкэнде, HAProxy проверяет, когда сервер устанавливает такой файл cookie, и сохраняет его значение в таблице и связывает его с идентификатором сервера. Будет сохранено до символов от значения. При каждом подключении haproxy будет искать этот файл cookie как в заголовках «Cookie:», так и в качестве параметра URL (в зависимости от используемого режима). Если известное значение найдено, клиент будет направлен на сервер, связанный с этим значением. В противном случае применяется алгоритм балансировки нагрузки. Файлы cookie автоматически удаляются из памяти, если они не использовались дольше, чем.

Определение файла cookie приложения ограничено одним для каждой серверной части.

Пример: appsession JSESSIONID len 52, тайм-аут 3 часа

Обратитесь к HAProxy документация Больше подробностей.