Haproxy: мои сеансы "своего рода" липкие
Pound находится перед HAProxy для разгрузки SSL, поэтому HAProxy получает HTTP-запросы обычного текста. У меня есть HAProxy (v1.4.8) напротив двух серверов веб-приложений, на которых размещено одно и то же приложение. Ниже мой конфиг HAProxy.
В настоящее время клиент обращается к HAProxy и может перейти на любой сервер для своего первоначального запроса "GET /" для корня сайта. Например, клиент нажимает на ServerA, с этого момента он может всегда обслуживаться ServerA или ServerB, что всегда означает, что сеанс будет привязан к A или B. Также происходит обратное; Первоначальный запрос клиента может поступить на Сервер B, после этого первоначального запроса они всегда будут обслуживаться Сервером B или Сервером A. Сеанс прилипает, но иногда происходит изменение после первоначального запроса на противоположный сервер для всех будущих запросов.
Ниже мой конфиг HAProxy. Я написал это неправильно?
listen app-servers 127.0.0.1:80
cookie ASP.NET_SessionId prefix
balance url_param ASP.NET_SessionId
balance roundrobin
option persist
option redispatch
# Balance based on ASP .NET sesssion ID
appsession ASP.NET_SessionId len 64 timeout 30m request-learn prefix
# Active WebApp servers
server appserver1 10.0.0.1:80
server appserver2 10.0.0.2:80
Спасибо.
2 ответа
Я не очень доволен этим, но это реально работает; Я вставил cookie в клиентские запросы вместо отслеживания идентификатора сеанса ASP .NET:
listen app-servers 127.0.0.1:80
cookie server insert
balance roundrobin
option persist
option redispatch
server appserver1 10.0.0.1:80 cookie srv1
server appserver2 10.0.0.2:80 cookie srv2
если ваше приложение чувствительно к тому, что пользователи переключают серверы приложений во время сеанса, то вы хотите, чтобы время удержания было установлено равным, по крайней мере, времени истечения срока действия файла cookie сеанса.
Ваша липкая таблица устарела записи через 30 минут. поэтому, пока ваши пользователи могут продолжать отправлять один и тот же идентификатор сеанса, если они приостановят работу более чем на 30 минут, их соединение будет перебалансировано. если вам не нравится это поведение, вам может подойти установка 4 часа или больше. как я сказал выше жирным шрифтом, как минимум, вы хотите, чтобы время удержания было установлено равным, по крайней мере, времени истечения срока действия файла cookie сеанса.
когда вы используете cookie server insert
вариант, вы добавляете готовку без срока годности. и этот cookie говорит, какой сервер использовать. так как нет срока действия, клиент никогда не будет перемещен на другой сервер.
но вы также должны спросить себя, почему вы заботитесь. оказывает ли переключение на другой сервер огромное влияние на работу пользователя? Если это так, возможно, вам следует рассмотреть это как недостаток в вашем веб-приложении и обратиться к нему на этом уровне. я могу ошибаться, но об этом стоит подумать.