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 говорит, какой сервер использовать. так как нет срока действия, клиент никогда не будет перемещен на другой сервер.

но вы также должны спросить себя, почему вы заботитесь. оказывает ли переключение на другой сервер огромное влияние на работу пользователя? Если это так, возможно, вам следует рассмотреть это как недостаток в вашем веб-приложении и обратиться к нему на этом уровне. я могу ошибаться, но об этом стоит подумать.

Другие вопросы по тегам