Balanceador de cargas con Haproxy


En el trabajo se tiene un problema, servidores web implementados con websphere que suelen saturarse, ya sea en el número de usuarios o en requerimientos de hardware.

Actualmente se implementa una forma de enrutar a diferentes servidores basado en un round-robin simple sin embargo es complicado implementar un contador de tiempo en este caso por la alta cantidad de usuarios, además resulta innecesario al contar con balanceadores de carga que implementan una serie de algoritmos de forma completa.

Una solución sencilla entonces es tener un balanceador (LB1) que reciba las peticiones de los clientes, el cual opere de la siguiente manera (imagen obtenida de Internet, pero no recuerdo el sitio😦 ):

  • Si una petición no contiene una cookie de asignación de servidor, será enviado a un servidor válido.
  • Se regresa una cookie llamada SERVERID con el cual es posible organizar la respuesta del servidor y continuar la conexión si este ofrece keepalive (HTTP 1.1).
  • Cuando el cliente haga una nueva petición la cookie SERVERID hará que la sesión del usuario pueda pasar a cualquier servidor de la granja o que permanezca directamente en el primer servidor asignado. La cookie nunca es enviada fuera de LB1 por lo que no existe riesgo de seguridad.
  • Si un servidor es retirado, saturado o simplemente cae de la red, las peticiones serán reasignadas a otro servidor inmediatamente y sin tener que volver a iniciar la sesión.

El software Haproxy da la oportunidad de elegir entre varios métodos de balanceo:

  • Round Robin
  • Número de conexiones
  • Fuente de la petición
  • URI
  • Parámetros en la URL

Además puede ajustar el número máximo y mínimo de conexiones concurrentes a manejar, tiempo de vida de las conexiones con el cliente y el servidor, gestión de colas, emular servidores virtuales, configurar servidores de respaldo y crear granjas de balanceadores, así se afianza la disponibilidad del servicio. Además brinda un monitor de los servidores virtuales y los servidores físicos.

Haproxy funciona en la en la capa 4 del modelo OSI y puede escalar parcialmente a la capa 7, por lo que puede optimizar el protocolo TCP y reconocer opciones de HTTP.

Haproxy actualmente está configurado así:

# El frontend es el servidor virtual

frontend FONDOS 172.16.6.105:7070

# Escucha a otros puertos que corresponden a los servidores reales

bind :9093

bind :9097,:9098

# Lee la URI y decide una acción

acl fondos2_rule url_dir FONDOS2

use_backend FONDOS2 if fondos2_rule

default_backend FONDOS

# El backend es una granja de servidores

backend FONDOS

# Se crea una cookie que mantendrá la asignación del servidor

cookie SERVERID insert nocache indirect

server epmwserv epmwserv.main.unlugar.mx:9093 cookie K check

server hrmsepws hrmsepws.main.unlugar.mx:9093 cookie L check

backend FONDOS2

cookie SERVERID insert nocache indirect

server epmwserv epmwserv.main.unlugar.mx:9098 cookie M check

server hrmsepws hrmsepws.main.unlugar.mx:9097 cookie N check

Ventajas:

  • La IP de Haproxy es 172.16.6.105 y existe un servidor virtual llamado FONDOS que escucha el puerto 7070, esta es la entrada general.
  • El servidor virtual tiene 2 granjas de servidores (FONDOS y FONDOS2).
  • Dependiendo de la URI el servidor virtual eligirá una granja de servidores para responder la petición, la condición es si el servicio está contenido en FONDOS, ejemplo: /psp/FONDOS/?cmd=login&languageCd=ESP o FONDOS2, ejemplo: /psp/FONDOS2/?cmd=login&languageCd=ESP
  • Las conexiones atendidas son cerradas, por lo que se reduce el riesgo de la denegación de servicio.
  • Es posible crear colas y balanceo por pesos si es que se supera el número de conexiones posibles.
  • Permite tener periodos de mantenimiento donde el servidor sea deshabilitado totalmente o solo para nuevas conexiones.

Notas:

  • Si un cliente usa HTTP/1.1 solo la primera respuesta será analizada e ignorará la cookie. Además ocupará permanentemente los recursos de red. La solución es deshabilitar las conexiones permanentes con la opción httpclose.
  • LB1 es un servidor sensible. Todas las conexiones pasan permanentemente por el proxy, si este cae las conexiones establecidas se perderán también. Es recomendable usar un respaldo permanente.
  • El cambio de configuración del proxy llevará a la caida del servicio, esto es evitable si se actualiza la configuración sin que el servidor se detenga:

haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid –sf $(/var/run/haproxy.pid)

Por hacer:

Hacer que FONDOS y FONDOS2 trabajen como una sola aplicación porque de hecho contienen lo mismo, solo de que subcarpeta donde están instalados es diferente.

Recursos:

Archivo de configuración completo de Haproxy

Comando de reinicio de Haproxy

Fuentes:

http://haproxy.1wt.eu/download/1.4/doc/configuration.txt

http://www.exceliance.fr/en/ART-2006-making%20applications%20scalable%20with%20LB.pdf

2 Respuestas a “Balanceador de cargas con Haproxy

  1. Hola Soy nuevo en esto, me gustaría saber si dentro de hearbeat o hatproxy se puede establecer algún tipo de algoritmo de balanceo de carga como round robin entre otros … Muchas gracias saludos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s