Twitter Flickr Pinterest LinkedIn YouTube Google Maps E-mail RSS
formats

Esquema de uso de un balanceador de Carga MySQL con HAProxy

Publicado en 18 junio, 2025, por en Mysql.
Anuncios

En la era de las aplicaciones conectadas 24/7, el rendimiento y la disponibilidad de las bases de datos son aspectos cruciales. Cuando una única instancia MySQL empieza a recibir cientos o miles de conexiones simultáneas, se convierte en un cuello de botella que puede poner en riesgo la experiencia de los usuarios o incluso provocar caídas del sistema.

Para solucionar esto, una estrategia común y eficiente es implementar un balanceador de carga que distribuya las conexiones entre varios servidores de bases de datos. Esta arquitectura mejora el rendimiento general, permite escalar horizontalmente y aporta alta disponibilidad.

Entre las herramientas más utilizadas para este propósito destaca HAProxy (High Availability Proxy), un proxy TCP/HTTP de alto rendimiento y muy liviano, que permite distribuir de forma inteligente las conexiones entrantes hacia diferentes nodos MySQL, ya sea en configuración maestro-esclavo o multi-master.

En esta entrada aprenderás cómo se estructura un entorno con HAProxy como punto central de entrada para una arquitectura MySQL distribuida. No nos enfocaremos en comandos ni instalación paso a paso, sino en entender el flujo, los componentes y las ventajas prácticas de este enfoque.


🧱 Arquitectura del sistema

Supongamos que tenemos el siguiente entorno:

Componente IP Puerto Rol
Aplicación web Cliente
HAProxy 192.168.1.100 3307 Balanceador
MySQL Master 192.168.1.10 3306 Escritura
MySQL Slave 192.168.1.11 3306 Lectura

📐 Esquema Visual del Flujo

 

 

🔄 Flujo de funcionamiento

  1. La aplicación se conecta únicamente a HAProxy (IP 192.168.1.100, puerto 3307).
  2. HAProxy recibe cada conexión y la redirige a uno de los servidores MySQL según su configuración.
    • En modo simple: balanceo round-robin entre todos los nodos disponibles.
    • En modo avanzado: se pueden usar puertos o usuarios distintos para separar lecturas y escrituras.
  3. El servidor MySQL Master ejecuta operaciones de escritura (INSERT, UPDATE, DELETE).
  4. El servidor MySQL Slave responde a consultas de lectura (SELECT), evitando cargar al maestro.
  5. El balanceo es totalmente transparente para la aplicación: no necesita conocer cuántos servidores hay detrás ni su rol.

🧠 Mejora recomendada: separación por puertos

Una práctica común en entornos productivos es crear dos frontends en HAProxy:

  • 🔵 Puerto 3308 → Solo para lecturas (dirigido a los slaves)
  • 🔴 Puerto 3309 → Solo para escrituras (dirigido al master)

Así, la aplicación puede conectarse a un puerto u otro dependiendo del tipo de operación, permitiendo un control total desde la capa lógica del sistema.


✅ Ventajas de usar HAProxy para MySQL

  • Alta disponibilidad: si un nodo falla, las conexiones se redirigen automáticamente a otros disponibles.
  • Escalabilidad horizontal: se pueden agregar más réplicas de lectura sin reconfigurar la aplicación.
  • Transparencia: la aplicación sigue conectándose a un único punto.
  • Flexibilidad: puedes configurar reglas, pesos, salud de nodos, failover automático y más.
  • Ligereza y velocidad: HAProxy maneja miles de conexiones con consumo mínimo de recursos.

 

¡Perfecto! Aquí tienes la parte que faltaba: cómo implementar paso a paso el esquema de balanceo de carga MySQL con HAProxy. Este bloque completa la entrada anterior y está pensado para ser claro, funcional y apto para entornos reales.


🛠️ Cómo implementar un balanceador de carga MySQL con HAProxy

Aquí te explico cómo montar el entorno completo paso a paso, desde la instalación de HAProxy hasta la conexión desde la aplicación.


✅ Requisitos previos

  • Un servidor MySQL Master (IP: 192.168.1.10)
  • Un servidor MySQL Slave con replicación configurada (IP: 192.168.1.11)
  • Un servidor para HAProxy (IP: 192.168.1.100)
  • Un usuario MySQL común en ambos nodos (root, por ejemplo)
  • Sistema operativo Ubuntu/Debian en el balanceador

📦 Paso 1: Instalar HAProxy

En el servidor que actuará como balanceador:


1
2
sudo apt update
sudo apt install haproxy -y

🔐 Paso 2: Crear usuario de salud para HAProxy en MySQL

En master y slave, ejecuta:


1
CREATE USER 'haproxy_check'@'%' IDENTIFIED BY 'check';

Este usuario se usa para verificar si el nodo está disponible.


🧩 Paso 3: Configurar HAProxy

Edita el archivo /etc/haproxy/haproxy.cfg y reemplázalo por esta configuración básica:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
global
    log /dev/log local0
    maxconn 2000
    daemon

defaults
    mode tcp
    log global
    option tcplog
    timeout connect 5s
    timeout client  1m
    timeout server  1m

frontend mysql_front
    bind *:3307
    default_backend mysql_back

backend mysql_back
    mode tcp
    balance roundrobin
    option mysql-check user haproxy_check
    server mysql-master 192.168.1.10:3306 check
    server mysql-slave  192.168.1.11:3306 check

🔄 Paso 4: Reiniciar y habilitar HAProxy


1
2
sudo systemctl restart haproxy
sudo systemctl enable haproxy

🔎 Paso 5: Probar la conexión

Desde cualquier cliente MySQL o desde la app:


1
mysql -u root -p -h 192.168.1.100 -P3307

Prueba varias veces, ejecuta SELECT o SHOW PROCESSLIST, y verás cómo las conexiones van rotando entre los nodos disponibles.


🧠 Mejora opcional: puertos separados para lectura y escritura

Si quieres separar explícitamente:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
frontend mysql_read
    bind *:3308
    default_backend mysql_reads

frontend mysql_write
    bind *:3309
    default_backend mysql_writes

backend mysql_reads
    balance roundrobin
    option mysql-check user haproxy_check
    server slave1 192.168.1.11:3306 check

backend mysql_writes
    balance roundrobin
    option mysql-check user haproxy_check
    server master 192.168.1.10:3306 check

Luego:

  • App de lectura → 192.168.1.100:3308
  • App de escritura → 192.168.1.100:3309

📌 Resultado final

Tu aplicación ya se puede conectar a un solo punto (192.168.1.100:3307) y HAProxy gestionará el resto:

  • Repartiendo carga
  • Verificando salud de los nodos
  • Aislando nodos caídos
  • Escalando sin tocar la app

 


📝 Conclusión

Entender el esquema de uso de HAProxy en entornos MySQL es clave para cualquier arquitecto o administrador de sistemas que busque fiabilidad, rendimiento y flexibilidad en su infraestructura. Esta solución se adapta tanto a proyectos pequeños como a grandes plataformas en producción.

Ya sea que estés implementando alta disponibilidad, escalabilidad horizontal o simplemente buscando distribuir carga de lectura, HAProxy es una herramienta robusta y bien documentada para acompañarte en ese camino.

 

Anuncios
Home Mysql Esquema de uso de un balanceador de Carga MySQL con HAProxy
© www.palentino.es, desde el 2012 - Un Blog para compartir conocimientos ...

Uso de cookies en mi sitio palentino.es

Este sitio web utiliza cookies para que tengamos la mejor experiencia de usuario. Si continúas navegando estás dando tu consentimiento para la aceptación de las mencionadas cookies y la aceptación de la política de cookies

ACEPTAR
Aviso de cookies