Pound находится перед HAProxy для разгрузки SSL, поэтому HAProxy получает HTTP-запросы с обычным текстом. У меня есть HAProxy (v1.4.8) перед двумя серверами веб-приложений, на которых размещено одно и то же приложение. Ниже мой конфиг HAProxy.
В настоящее время клиент обращается к HAProxy и может перейти к любому серверу для своего первоначального запроса «GET /» для корня сайта. Например, клиент попадает в ServerA, с этого момента он всегда может обслуживаться ServerA или ServerB, при этом сеанс будет привязан к A или B. Также происходит обратное; первоначальный запрос клиентов может поступать в ServerB, после этого начального запроса они всегда будут обслуживаться ServerB или ServerA. Сеанс сохраняется, но иногда это изменение происходит после первоначального запроса на противоположный сервер для всех будущих запросов.
Ниже мой конфиг 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
Спасибо.
Если ваше приложение чувствительно к тому, что пользователи переключают серверы приложений во время сеанса, вам нужно установить время липкого удержания, равное как минимум времени истечения срока действия файла cookie сеанса.
ваша липкая таблица настроена на истечение срока действия записей через 30 минут. поэтому, хотя ваши пользователи могут продолжать отправлять тот же идентификатор сеанса, если они приостанавливают работу более чем на 30 минут, их соединение будет повторно сбалансировано. если вам не нравится такое поведение, вам, вероятно, подойдет значение 4 часа или более. как я сказал выше жирным шрифтом, вы хотите, чтобы время липкого удержания было как минимум равным времени истечения срока действия файла cookie сеанса.
когда вы используете cookie server insert
вариант, вы добавляете готовку без срока годности. и этот файл cookie говорит, какой сервер использовать. поскольку нет срока действия, клиент никогда не будет перемещен на другой сервер.
но вы также должны спросить себя, почему вам это небезразлично. имеет ли переключение на другой сервер огромное влияние на работу пользователя? Если да, то, возможно, вам следует рассмотреть этот недостаток в своем веб-приложении и устранить его на этом уровне. Я могу ошибаться, но есть о чем подумать.
Я не очень этому рад, но он надежно работает; Я вставил 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