Haproxy: Minhas sessões são “meio que” pegajosas

2

O Pound está na frente do HAProxy para o descarregamento SSL, de modo que o HAProxy recebe solicitações HTTP de texto. Eu tenho HAProxy (v1.4.8) na frente de dois servidores web-app que hospedam o mesmo aplicativo. Abaixo está minha configuração do HAProxy.

Atualmente, um cliente atinge o HAProxy e pode acessar qualquer servidor para sua solicitação inicial "GET /" para a raiz do site. Por exemplo, um cliente atinge ServerA, a partir desse ponto eles sempre podem ser atendidos por ServerA ou ServerB, que sempre, a sessão será pega para A ou B. Também acontece o inverso; uma solicitação inicial de clientes pode entrar no ServerB, após essa solicitação inicial eles sempre serão atendidos pelo ServerB ou ServerA. A sessão permanece, mas às vezes há essa alteração após a solicitação inicial, para o servidor oposto para todas as solicitações futuras.

Abaixo está minha configuração do HAProxy. Eu escrevi isso incorretamente?

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

Obrigado.

    
por jwbensley 17.10.2012 / 19:48

2 respostas

1

Eu não estou super feliz com isso, mas funciona de forma confiável; Inseri um cookie nas solicitações do cliente em vez de rastrear o ID de sessão do 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
    
por 18.10.2012 / 15:22
2

se o seu aplicativo for sensível a usuários que trocam de servidores de aplicativos durante uma sessão, você deseja que o tempo de espera fixo seja definido pelo menos até o vencimento do cookie de sessão.

sua tabela fixa está definida para expirar as entradas após 30 minutos. Assim, enquanto seus usuários podem continuar a enviar o mesmo id de sessão, se eles pausarem por mais de 30 minutos, a conexão será reequilibrada. Se você não gosta desse comportamento, uma configuração de 4 horas ou mais provavelmente é apropriada para você. Como eu disse acima em negrito, no mínimo você quer que o tempo de espera fixo seja definido pelo menos até o tempo de expiração do cookie de sessão.

quando você usa a opção cookie server insert , você está adicionando um cozimento sem tempo de expiração. e esse cookie diz qual servidor usar. já que não há expiração, o cliente nunca será movido para outro servidor.

mas você também precisa se perguntar por que se importa. Mudar para outro servidor tem um impacto enorme na experiência do usuário? Nesse caso, talvez você deva considerar isso uma falha em seu aplicativo da Web e abordá-lo nessa camada. Eu posso estar errado, mas é algo para se pensar.

    
por 18.10.2012 / 15:37