
Equilibrio de carga con HAProxy
HAProxy es una herramienta de software libre que funciona como balanceador de carga y servidor proxy inverso para aplicaciones basadas en TCP y HTTP. La herramienta distribuye las solicitudes de conexión entre múltiples nodos de servidor. Con un uso de recursos muy reducido, permite manejar enormes volúmenes de tráfico HTTP y HTTPS. Además, HAProxy realiza comprobaciones de salud de los servidores y redirige a los usuarios a un nodo operativo en caso de que uno de los servidores esté caído, lo cual lo convierte en una solución útil para la conmutación por error.
Asumiendo los beneficios mencionados, hemos configurado HAProxy para distribuir las conexiones para el RDBMS MySQL y nuestra interfaz de usuario.
Dentro de este artículo, consideraremos los pasos para realizar el equilibrio de carga para tres proxies de DataSunrise en modo de alta disponibilidad en las siguientes direcciones: 192.168.1.100, 192.168.1.101, 192.168.1.102.
Requisitos previos
Existen varios pasos que se deben realizar antes de comenzar a trabajar con HAProxy.
Antes de configurar el equilibrio de carga, es necesario instalar DataSunrise en modo de alta disponibilidad en varios servidores. Para implementar el modo de alta disponibilidad en DataSunrise, realice lo siguiente:
- El asistente de instalación de DataSunrise le permite seleccionar la ubicación local o remota para una pestaña de configuración. Seleccione Remoto.
- En la pestaña Detalles del servidor DataSunrise, especifique los datos de la instancia actual de DataSunrise: nombre del servidor, nombre del host donde está instalada la instancia de DataSunrise, número de puerto de la interfaz web de la instancia (11000, por defecto).
- En la pestaña Ubicación del Diccionario, especifique la base de datos para almacenar la configuración de DataSunrise (Diccionario). Todos los servidores configurados para usar esta base de datos compartirán los mismos ajustes de configuración comunes (incluyendo credenciales comunes para acceder a las interfaces web).
Consulte la Guía de administración de DataSunrise para obtener instrucciones más detalladas sobre el modo de alta disponibilidad de DataSunrise. Asegúrese también de que la misma versión del producto esté instalada en todos los servidores.
Crear instancia
A continuación, necesitamos crear una instancia de DataSunrise en el host virtual donde está instalado MySQL y abrir proxies en las máquinas que se conectarán a la base de datos MySQL.
Para crear una instancia, realice lo siguiente en la máquina principal:
- Ingrese a la interfaz gráfica de DataSunrise y vaya a la subsección de Bases de datos en la sección de Configuraciones.
- Haga clic en el botón Base de datos +.
- Ingrese el nombre del host, el número de puerto y otra información requerida.
- Una vez creada la instancia, seleccione la instancia recién creada de la lista y haga clic en Editar.
- Se abrirá una ventana con la configuración de la instancia, haga clic en el botón Proxy +.
- Especifique el servidor, el nombre del host y el número de puerto (mysql0, 192.168.1.100, 3306 respectivamente) y haga clic en Guardar.
- Abra proxies en las máquinas esclavas en la misma instancia, especificando el nombre de servidor y el nombre del host correspondiente para cada proxy.
Al final, la configuración de la instancia se verá de la siguiente manera:

Configuración de HAProxy para MySQL
Configurar HAProxy para sistemas de gestión de bases de datos es bastante sencillo. A continuación, configuraremos HAProxy para que funcione como distribuidor de conexiones para los proxies de DataSunrise (192.168.1.100:3306, 192.101.1.101:3306, 192.168.1.102:3306).
Después de instalar HAProxy, abra el archivo /etc/haproxy/haproxy.cfg mencionado anteriormente y edite el bloque de configuración ‘listen’ de la siguiente manera:
listen af_mysql_balancer
mode tcp
bind *:3306
balance leastconn
server mysql0 192.168.1.100:3306 check
server mysql1 192.168.1.101:3306 check
server mysql2 192.168.1.102:3306 check
HAProxy realizará comprobaciones de salud y distribuirá las conexiones de acuerdo con el número de conexiones en el nodo del servidor, dirigiendo al usuario al servidor con la menor cantidad de conexiones.
balance <algorithm> es para seleccionar los algoritmos de balanceo.
roundrobin | Round Robin es el algoritmo predeterminado, selecciona los servidores por turno. |
leastconn | Con este algoritmo, HAProxy dirige cada nueva conexión al servidor con la menor cantidad de conexiones. |
source | El algoritmo dirige a los usuarios a los servidores basado en un hash de la dirección IP del usuario. |
Para la lista completa de algoritmos de balanceo, consulte el Manual de configuración de HAProxy.
En caso de que el servidor actualmente usado por un usuario esté caído, la conexión se cerrará. El usuario tendrá que reconectarse y HAProxy abrirá una nueva conexión a la base de datos con el servidor que esté operativo y tenga la menor cantidad de conexiones.

Todos los demás sistemas de gestión de bases de datos se pueden configurar de la misma manera, solo es necesario cambiar los puertos.
Configuración de HAProxy como balanceador de carga para el servicio backend de DataSunrise (GUI)
En esta sección, consideraremos los pasos para realizar el equilibrio de carga para tres proxies de DataSunrise en modo de alta disponibilidad en las siguientes direcciones: 192.168.1.100, 192.168.1.101, 192.168.1.102.
Instale HAProxy en un servidor separado y abra /etc/haproxy/haproxy.cfg con cualquier editor de texto. Especifique la configuración del listener de la siguiente manera:
listen af_gui_balancer
timeout client 50000
timeout server 50000
mode http
bind *:11000 ssl crt /home/anon/proxy.pem
redirect scheme https if !{ ssl_fc }
cookie HA_BACKEND_ID insert
balance leastconn
server node0 192.168.1.100:11000 ssl verify none check cookie 0
server node1 192.168.1.101:11000 ssl verify none check cookie 1
server node2 192.168.1.102:11000 ssl verify none check cookie 2
Desglose de la configuración
Tiempo de inactividad del usuario
timeout client <timeout> – establece el período máximo de inactividad del usuario después del cual la conexión se cerrará (milisegundos).timeout server <timeout> – establece el período máximo de inactividad del servidor después del cual la conexión se cerrará (milisegundos).
Protocolo de la instancia
mode { tcp|http } – define el protocolo de la instancia. En nuestro caso, el balanceo se realizará a nivel del protocolo HTTP. La solicitud del cliente será analizada en profundidad antes de conectarse a cualquier servidor. Cualquier solicitud que no cumpla con el RFC será rechazada. Será posible el filtrado, procesamiento y conmutación en la capa 7. HAProxy también puede balancear a nivel de TCP, pero las especificidades de las aplicaciones web, que tienen una condición de sesión de usuario, hacen que sea difícil realizar un equilibrio de carga adecuado sin la oportunidad de analizar o modificar ciertas partes de las consultas HTTP. Usamos el modo http porque necesitamos que HAProxy asigne y lea la cookie de persistencia que permitirá a HAProxy determinar a qué servidor se debe dirigir el usuario. De este modo, el servidor web operará correctamente con la sesión del usuario.
Dirección y puerto de escucha
bind [<address>]:<port_range> – la opción bind define una o varias direcciones y puertos de escucha en un frontend. <address> puede ser un nombre de host, una dirección IPv4, una dirección IPv6 o ‘*’. ‘*’ significa que el puerto estará abierto en todas las direcciones IP disponibles.ssl crt /home/anon/proxy.pem – la opción ssl habilita el descifrado SSL, lo que requiere certificados. Los certificados y claves serán tomados del archivo /home/anon/proxy.pem. Los usuarios del sistema deben tener permiso de lectura para este archivo. El contenido del archivo pem debe estar en el siguiente formato:
-----BEGIN CERTIFICATE----- HLDXjCDSAkY... -----END CERTIFICATE----- -----BEGIN RSA PRIVATE KEY----- HLDEpgIBDSKC.... -----END RSA PRIVATE KEY-----
Redireccionamiento
redirect scheme https if !{ ssl_fc } la siguiente configuración redirige todas las conexiones HTTP en texto plano en el puerto 11000 al esquema HTTPS. De este modo, los usuarios no podrán utilizar el servicio de administración sin encriptación.
Cookie persistente
cookie HA_BACKEND_ID insert. La opción indicada define la cookie persistente. Después de la primera solicitud, HAProxy envía la cookie al usuario. Según el valor de la cookie, HAProxy determinará qué nodo de servidor se debe utilizar para las consultas subsiguientes del usuario. HA_BACKEND_ID es el nombre de la cookie. La opción insert define que HAProxy asignará dichos valores de cookie tras la primera consulta. El valor de la cookie persistente se utilizará hasta que el usuario borre las cookies del navegador o finalice la sesión.
Las últimas tres líneas definen las instancias.
node0 es un nombre arbitrario de la instancia utilizado únicamente para su identificación en términos de HAProxy. 192.168.1.100:11000 – la dirección y el puerto de la instancia. ssl – define que la instancia acepta conexiones https. verify [none | optional | required]. Por defecto, el ajuste se establece en none, lo que significa que el certificado SSL enviado por el servidor no será verificado, es decir, HAProxy confiará en el certificado del servicio backend de DataSunrise. La opción check habilita el mecanismo de comprobación de salud. Antes de reenviar la consulta del cliente al nodo, HAProxy verifica si el nodo está disponible. cookie <value> – este parámetro establece el valor de la cookie asignada al servidor.
Guarde los cambios en la configuración y reinicie HAProxy.
Conclusión
Como resultado, tendremos la configuración que permite a HAProxy funcionar de la siguiente manera:
- Un usuario se conecta a HAProxy.
- HAProxy realiza una comprobación de salud de los servidores.
- HAProxy direcciona al usuario al nodo del servidor con la menor carga, lo que en realidad balancea la carga.
HAProxy funciona en Linux y Solaris. Para el sistema operativo Windows, pruebe con la solución más avanzada Nginx.
Si necesita ayuda al configurar HAProxy o DataSunrise en modo de alta disponibilidad, no dude en contactarnos. Nuestros ingenieros de soporte le ayudarán.