
Pound está na frente do HAProxy para descarregamento de SSL, então o HAProxy recebe solicitações HTTP de texto simples. Eu tenho o HAProxy (v1.4.8) na frente de dois servidores de aplicativos da web que hospedam o mesmo aplicativo. Abaixo está minha configuração do HAProxy.
Atualmente, um cliente acessa o HAProxy e pode ir a qualquer servidor para sua solicitação inicial "GET /" para a raiz do site. Por exemplo, um cliente acessa o ServidorA, a partir desse ponto ele pode sempre ser atendido pelo ServidorA ou pelo ServidorB, o que quer que seja, a sessão ficará fixa em A ou B. Além disso, acontece o inverso; uma solicitação inicial do cliente pode chegar ao ServidorB, após essa solicitação inicial eles sempre serão atendidos pelo ServidorB ou ServidorA. A sessão permanece, mas às vezes há essa mudança após a solicitação inicial, para o servidor adversário 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.
Responder1
se 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 pelo menos igual ao tempo de expiração do cookie da sessão.
sua tabela fixa está configurada para expirar as entradas após 30 minutos. portanto, embora seus usuários possam continuar enviando o mesmo ID de sessão, se 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 será apropriada para você. como eu disse acima em negrito, no mínimo você deseja que o tempo de espera definido seja pelo menos tão longo quanto o tempo de expiração do cookie da sessão.
ao usar a cookie server insert
opção, você está adicionando um cozimento sem prazo de validade. e esse cookie diz qual servidor usar. como 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 grande impacto na experiência do usuário? nesse caso, talvez você deva considerar isso uma falha em seu aplicativo da web e resolvê-lo nessa camada. posso estar errado, mas é algo para se pensar.
Responder2
Não estou muito feliz com isso, mas funciona de maneira confiável; Inseri um cookie nas solicitações do cliente em vez de rastrear o ID da sessão 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