
Pound está delante de HAProxy para la descarga de SSL, por lo que HAProxy recibe solicitudes HTTP de texto sin formato. Tengo HAProxy (v1.4.8) frente a dos servidores de aplicaciones web que alojan la misma aplicación. A continuación se muestra mi configuración de HAProxy.
Actualmente, un cliente accede a HAProxy y puede ir a cualquier servidor para realizar su solicitud inicial "GET /" para la raíz del sitio. Por ejemplo, un cliente accede al ServidorA, a partir de ese momento siempre puede ser atendido por el ServidorA o el ServidorB, cualquiera que sea el caso, la sesión estará fijada en A o B. También sucede lo contrario; la solicitud inicial de un cliente puede llegar al ServidorB, después de esta solicitud inicial siempre serán atendidas por el ServidorB o el ServidorA. La sesión se mantiene, pero a veces se produce este cambio después de la solicitud inicial, al servidor contrario para todas las solicitudes futuras.
A continuación se muestra mi configuración de HAProxy. ¿He escrito esto incorrectamente?
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
Gracias.
Respuesta1
Si su aplicación es sensible a que los usuarios cambien de servidor de aplicaciones durante una sesión, entonces desea que el tiempo de espera fija sea al menos tan largo como el tiempo de vencimiento de la cookie de sesión.
su mesa adhesiva está configurada para que las entradas caduquen después de 30 minutos. Entonces, si bien sus usuarios pueden continuar enviando la misma identificación de sesión, si hacen una pausa durante más de 30 minutos, su conexión se reequilibrará. Si no le gusta este comportamiento, probablemente una configuración de 4 horas o más sea adecuada para usted. Como dije anteriormente en negrita, como mínimo desea que el tiempo de espera fija sea al menos tan largo como el tiempo de vencimiento de la cookie de sesión.
cuando usas la cookie server insert
opción, estás agregando una cocción sin tiempo de vencimiento. y esa cookie dice qué servidor usar. Como no hay vencimiento, el cliente nunca será trasladado a otro servidor.
pero también debes preguntarte por qué te importa. ¿Cambiar a otro servidor tiene un gran impacto en la experiencia del usuario? Si es así, tal vez debería considerar esto como una falla en su aplicación web y solucionarlo en esa capa. Podría estar equivocado, pero es algo en lo que pensar.
Respuesta2
No estoy muy contento con esto, pero realmente funciona; Inserté una cookie en las solicitudes del cliente en lugar de rastrear el ID de sesión de 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