Balanceo de Carga con HAProxy
HAProxy es una herramienta de software libre que funciona como un balanceador de carga y servidor proxy inverso para aplicaciones basadas en TCP y HTTP. La herramienta distribuye las solicitudes de conexión entre varios nodos de servidor. Con muy poco uso de recursos, te permite manejar grandes volúmenes de tráfico HTTP y HTTPS. Además, HAProxy realiza comprobaciones de salud del servidor y redirige a los usuarios a un nodo en funcionamiento en caso de que uno de los servidores esté caído, lo que lo convierte en una solución útil para failover.
Asumiendo los beneficios mencionados, hemos configurado HAProxy para distribuir conexiones para MySQL RDBMS y nuestra interfaz de usuario.
En este artículo, consideraremos los pasos para realizar el balanceo 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
Hay varios pasos a realizar antes de comenzar a trabajar con HAProxy.
Antes de configurar el balanceo de carga, es necesario instalar DataSunrise en modo de alta disponibilidad en varios servidores. Para implementar el modo de Alta Disponibilidad en DataSunrise, realiza lo siguiente:
- El asistente de instalación de DataSunrise te permite seleccionar la ubicación local o remota para una pestaña de configuración. Selecciona Remote.
- En la pestaña DataSunrise Server Details, especifica los detalles de la instancia actual de DataSunrise: nombre del servidor, nombre de 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, especifica la base de datos para almacenar la configuración de DataSunrise (Diccionario). Todos los servidores configurados para usar esta base de datos compartirán configuraciones comunes (incluyendo credenciales comunes para acceder a las interfaces web).
Consulta la Guía de Administración de DataSunrise para obtener instrucciones más detalladas sobre el modo de alta disponibilidad de DataSunrise. También asegúrate 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, realiza lo siguiente en la máquina principal:
- Entra en la interfaz gráfica de DataSunrise y ve a la subsección Bases de Datos de la sección Configuraciones.
- Haz clic en el botón Database +.
- Introduce el nombre de host, el número de puerto y otra información requerida.
- Una vez creada la instancia, selecciona la nueva instancia creada de la lista y haz clic en Editar.
- Se abrirá una ventana con las configuraciones de la instancia, haz clic en el botón Proxy +.
- Especifica el servidor, el nombre del host y el número de puerto (mysql0, 192.168.1.100, 3306 respectivamente) y haz clic en Guardar.
- Abre proxies en las máquinas esclavas en la misma instancia especificando el nombre del servidor correspondiente y el nombre del host para cada proxy.
Al final, la configuración de la instancia se verá así:
Configurando HAProxy para MySQL
Configurar HAProxy para sistemas de gestión de bases de datos es bastante simple. A continuación, configuraremos HAProxy para que funcione como un 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, abre el archivo /etc/haproxy/haproxy.cfg y edita 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, redirigiendo al usuario al servidor con el menor número de conexiones.
balance <algorithm> sirve para seleccionar algoritmos de balanceo.
roundrobin | Round Robin es el algoritmo predeterminado, selecciona los servidores por turnos. |
leastconn | Con este algoritmo, HAProxy dirige a cada nuevo usuario al servidor con el menor número de conexiones. |
source | El algoritmo para dirigir a los usuarios a los servidores basado en un hash de la dirección IP del usuario. |
En caso de que el servidor actualmente utilizado 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 en el servidor que esté activo y tenga la menor cantidad de conexiones.
Todos los demás sistemas de gestión de bases de datos pueden configurarse de la misma manera, solo es necesario cambiar los puertos.
Configurando HAProxy como un Balanceador de Carga para el Servicio Backend de DataSunrise (GUI)
En esta sección, consideraremos los pasos para realizar el balanceo 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.
Instala HAProxy en un servidor separado y abre /etc/haproxy/haproxy.cfg con cualquier editor de texto. Especifica la configuración del oyente 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 máximo período de inactividad del usuario después del cual la conexión se cerrará (milisegundos).timeout server <timeout> – establece el máximo período 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 conectar con cualquier servidor. Cualquier solicitud que no cumpla con la RFC será rechazada. El filtrado, procesamiento y conmutación de capa 7 serán posibles. 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 difícil realizar un balanceo 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 una cookie de persistencia que permitirá a HAProxy determinar a qué servidor debe dirigirse el usuario. Así, 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, dirección IPv4, 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 se tomarán del archivo /home/anon/proxy.pem. Los usuarios del sistema deben tener acceso de lectura al 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-----
Reenvío
redirect scheme https if !{ ssl_fc } la siguiente configuración reenvía todas las conexiones HTTP de texto claro en el puerto 11000 al esquema HTTPS. Así, los usuarios no podrán usar el servicio de administración sin cifrado.
Cookie Persistente
cookie HA_BACKEND_ID insert. La opción dada 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 del servidor debe usarse para las consultas posteriores del usuario. HA_BACKEND_ID es el nombre de la cookie. La opción insert define que HAProxy asignará esos valores de cookie después de la primera consulta. El valor de la cookie persistente se usa hasta que el usuario borre las cookies del navegador o finalice la sesión.
Las tres últimas líneas definen las instancias.
node0 es un nombre arbitrario de la instancia utilizado solo para identificación en términos de HAProxy. 192.168.1.100:11000 – la dirección y puerto de la instancia. ssl – define que la instancia acepta conexiones https. verify [none | optional | required]. Por defecto, la configuración 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 verificación de salud. Antes de reenviar la consulta del cliente al nodo, HAProxy verifica si el nodo está disponible. cookie <value> – el parámetro establece el valor de la cookie asignada al servidor.
Guarda los cambios de configuración y vuelve a iniciar 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 verificación de salud de los servidores.
- HAProxy redirige al usuario al nodo del servidor con la menor carga, lo que realmente equilibra la carga.
HAProxy opera en Linux y Solaris. Para el sistema operativo Windows, prueba la solución más avanzada Nginx.
Si necesitas asistencia mientras configuras HAProxy o DataSunrise en modo de alta disponibilidad, no dudes en contactarnos. Nuestros ingenieros de soporte te ayudarán.