load-balancing - sessions - haproxy tutorial
Equilibrio de carga(HAProxy u otro)-Sesiones pegajosas (2)
Estoy trabajando para escalar mi aplicación a múltiples servidores, y un requisito es que un cliente siempre se esté comunicando con el mismo servidor (se usan demasiados datos en vivo para permitir el rebote entre servidores de manera eficiente).
Mi configuración actual es un pequeño grupo de servidores (usando Linode). Tengo un nodo frontend que ejecuta HAProxy usando "fuente de balance" para que una IP siempre apunte hacia el mismo nodo.
Estoy notando que la "fuente de balance" no es una distribución muy uniforme. Con mi configuración de prueba actual (2 servidores backend), un servidor a menudo tiene 3-4 veces más conexiones cuando se utiliza un tamaño de muestra de 80-100 IP de origen.
¿Hay alguna manera de lograr una distribución más equilibrada? Obviamente, las sesiones pegajosas prohíben un balance "perfecto", pero se preferiría una división 40/60 a una división 25/75.
Puede ajustar el algoritmo de balanceo en HA-Proxy aunque hay algunos disponibles. Como por ejemplo, Roundrobin o Lessconn.
Pero necesita ajustar en general su equilibrio de acuerdo con el dominio de los usuarios para los que se sirve el contenido. La mayoría de las veces necesita hacer pruebas empíricas y reiterar su decisión de acuerdo con sus hallazgos.
HAProxy admite la modificación o inserción de una cookie para proporcionar persistencia de sesión con el parámetro cookie
.
En las secciones backend o listen, agregue lo siguiente:
cookie COOKIENAME prefix
Este ejemplo modificará una cookie existente al agregar el nombre del servidor a una cookie llamada COOKIENAME
. Su cliente verá algo como server1~someotherdata
pero su aplicación solo verá la parte someotherdata
. Así que puedes usar esto en las cookies existentes. Además, este método le permite imponer únicamente la persistencia de la sesión cuando existe esa cookie, lo que significa que aún puede equilibrar de manera uniforme a las personas en torno a las partes estáticas de su sitio y solo imponer la adherencia cuando sea necesario, pero agregando ese nombre de cookie a la sesión.
También nombre sus servidores, por lo que sus líneas de servidor se parecen a lo siguiente
server server1 1.2.3.4 cookie server1
Más detalles se encuentran en la guía de configuración de HAProxy , también parece que puede usar el parámetro de configuración de la appsession
también.
Una vez que haya hecho esto, puede elegir su propio método de balanceo de la lista, tiendo a usar roundrobin
pero menos leastconn
puede darle un mejor balance una vez que se toman en cuenta las sesiones adhesivas.
Más de la documentación para facilitar la búsqueda de la sección de referencia:
cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ]
[ postonly ] [ preserve ] [ domain <domain> ]*
[ maxidle <idle> ] [ maxlife <life> ]
Enable cookie-based persistence in a backend.
May be used in sections : defaults | frontend | listen | backend
yes | no | yes | yes