2011-06-27 16 views
17

Estoy trabajando para ampliar mi aplicación a varios servidores, y un requisito es que un cliente siempre se comunique con el mismo servidor (se utilizan demasiados datos en tiempo real para permitir el rebote entre servidores de manera eficiente).Balanceo de carga (HAProxy u otro) - Sesiones fijas

Mi configuración actual es un pequeño clúster de servidor (que utiliza Linode). Tengo un nodo frontend ejecutando HAProxy utilizando "fuente de equilibrio" para que una IP siempre apunte hacia el mismo nodo.

Me doy cuenta de que la "fuente de equilibrio" no es una distribución muy pareja. Con mi configuración de prueba actual (2 servidores backend), un servidor a menudo tiene 3-4x tantas conexiones cuando usa un tamaño de muestra de 80-100 direcciones IP de origen.

¿Hay alguna forma de lograr una distribución más equilibrada? Obviamente, las sesiones adhesivas prohíben un equilibrio "perfecto", pero una división de 40/60 sería preferible a una división de 25/75.

Respuesta

0

Puede ajustar el algoritmo de balanceo en HA-Proxy aunque hay algunos disponibles. Como p. roundrobin o leastconn.

Pero debe ajustar, en general, su equilibrio de acuerdo con el dominio de los usuarios para quienes 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.

25

HAProxy admite la modificación o inserción de una cookie para proporcionar la persistencia de la sesión con el parámetro cookie.

En cualquier backend o escuchar secciones, añadir lo siguiente:

cookie COOKIENAME prefix 

En este ejemplo se va a modificar una cookie puede existente añadiendo el nombre del servidor a una cookie denominada COOKIENAME. Su cliente verá algo como server1~someotherdata pero su aplicación solo verá la parte someotherdata. Entonces puede usar esto en las cookies existentes. Además, este método le permite aplicar solo la persistencia de sesión cuando esa cookie exista, lo que significa que puede equilibrar a las personas de manera uniforme en las partes estáticas de su sitio y solo aplicar adherencia cuando sea necesario, pero agregar ese nombre de cookie a la sesión.

nombre también sus servidores, por lo que sus líneas de servidores idénticos a los siguientes:

server server1 1.2.3.4 cookie server1 

Más detalle se encuentra en el HAProxy config guide, sino que también parece que se puede utilizar el parámetro de configuración appsession también.

Una vez que hayas hecho esto, puedes elegir tu propio método de saldo de la lista, tiendo a usar roundrobin pero leastconn podría darte un mejor equilibrio una vez que se tengan en cuenta las sesiones adhesivas.


Más de documentación para que sea más fácil encontrar 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 
Cuestiones relacionadas