Saltar al contenido
Infrastructure 2024-12-28 10 min de lectura

HAProxy: balanceo de carga en Linux paso a paso

Cuando un solo servidor ya no da abasto con el volumen de solicitudes que recibe tu aplicación, el balanceo de carga deja de ser una opción y se convierte en una necesidad. HAProxy es una de las soluciones de código abierto más usadas para este propósito, capaz de manejar miles de conexiones simultáneas con un consumo de recursos mínimo. Esta guía cubre desde la instalación hasta configuraciones avanzadas: algoritmos de balanceo, HTTPS, panel de estadísticas y buenas prácticas para producción.

HAProxy: balanceo de carga en Linux paso a paso
#Infrastructure#HAProxy#Balanceo de Carga#Alta Disponibilidad
J John Coveña
John Coveña
Fundador de Terranode · Infraestructura y redes

Qué necesitas antes de empezar

  • Al menos dos servidores backend que atenderán las solicitudes reales de tu aplicación.
  • Un servidor frontend donde instalarás HAProxy, que actuará como punto de entrada único.
  • Acceso SSH con privilegios de administrador en todos los servidores involucrados.
  • Conocimientos básicos de redes y Linux para interpretar y ajustar la configuración.

Ventajas de usar HAProxy

  • Alta disponibilidad: redirige automáticamente el tráfico a los servidores que están disponibles, evitando caídas si uno falla.
  • Escalabilidad: maneja miles de conexiones simultáneas con un uso de CPU y memoria muy eficiente.
  • Flexibilidad de protocolos: es compatible con HTTP, TCP y terminación SSL/TLS.
  • Monitoreo integrado: incluye un panel de estadísticas en tiempo real para visualizar el estado de cada backend.

Paso 1: Instalación de HAProxy

En distribuciones basadas en Debian/Ubuntu:

bash
sudo apt update
sudo apt install haproxy -y

En distribuciones basadas en Red Hat (AlmaLinux, Rocky Linux, RHEL):

bash
sudo dnf install haproxy -y

Verifica que la instalación fue exitosa consultando la versión:

bash
haproxy -v

Paso 2: Configuración básica del balanceador

Edita el archivo principal de configuración:

bash
sudo nano /etc/haproxy/haproxy.cfg

Y define los bloques global, defaults, frontend y backend:

text
global
    log /dev/log local0
    maxconn 2000
    daemon

defaults
    log global
    mode http
    option httplog
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

frontend http_front
    bind *:80
    default_backend http_back

backend http_back
    balance roundrobin
    server server1 192.168.1.101:80 check
    server server2 192.168.1.102:80 check

Antes de aplicar los cambios, valida la sintaxis del archivo para evitar dejar el servicio caído por un error tipográfico:

bash
sudo haproxy -c -f /etc/haproxy/haproxy.cfg

Si la validación es correcta, reinicia el servicio:

bash
sudo systemctl restart haproxy

Algoritmos de balanceo disponibles

El algoritmo decide a qué servidor va cada petición, y la elección correcta depende de si tus peticiones duran todas lo mismo y de si tu aplicación guarda sesiones en memoria. Se define con la directiva balance dentro del bloque backend:

AlgoritmoCómo reparteCuándo elegirlo
roundrobinPor turnos, uno tras otroPeticiones de duración parecida; es el valor por defecto
leastconnAl servidor con menos conexiones abiertasPeticiones de duración muy variable: descargas, WebSockets, informes
sourceSegún la IP del cliente, siempre al mismo servidorAplicaciones que guardan la sesión en memoria del servidor
uriSegún la URL solicitadaCachés, para que cada recurso caiga siempre en el mismo nodo

Un detalle que sorprende a mucha gente: roundrobin reparte peticiones, no carga. Si una petición tarda 10 milisegundos y la siguiente 30 segundos, repartir por turnos deja un servidor libre y otro ahogado. En cuanto la duración de las peticiones sea heterogénea, leastconn es la opción correcta.

  • Round Robin (predeterminado): distribuye las solicitudes de forma secuencial entre todos los servidores.
text
balance roundrobin
  • Least Connections: envía cada nueva solicitud al servidor con menos conexiones activas en ese momento, ideal cuando las peticiones tienen duraciones muy variables.
text
balance leastconn
  • Source: asigna un mismo cliente siempre al mismo servidor backend en función de su IP de origen, útil cuando necesitas persistencia de sesión sin usar cookies.
text
balance source

Habilitar el panel de estadísticas

HAProxy incluye un panel web para monitorear en tiempo real el estado de cada servidor backend, tráfico y errores. Agrégalo a tu configuración:

bash
sudo nano /etc/haproxy/haproxy.cfg
text
listen stats
    bind *:8080
    stats enable
    stats uri /stats
    stats auth admin:adminpassword
bash
sudo systemctl restart haproxy

Accede al panel desde http://tu-servidor:8080/stats con las credenciales que definiste. Cambia adminpassword por una contraseña robusta antes de exponer este panel en producción.

Configurar HTTPS en HAProxy

Para producción, lo ideal es usar un certificado válido de Let's Encrypt, pero para pruebas puedes generar uno autofirmado:

bash
sudo openssl req -x509 -newkey rsa:2048 -keyout /etc/ssl/private/haproxy.key -out /etc/ssl/certs/haproxy.crt -days 365 -nodes

cat /etc/ssl/private/haproxy.key /etc/ssl/certs/haproxy.crt > /etc/ssl/private/haproxy.pem

Luego agrega un frontend HTTPS que use ese certificado combinado:

text
frontend https_front
    bind *:443 ssl crt /etc/ssl/private/haproxy.pem
    default_backend http_back
bash
sudo systemctl restart haproxy

Casos de uso prácticos

  • Escalabilidad de comercio electrónico: durante una campaña de ventas con picos de tráfico, HAProxy distribuye las solicitudes equitativamente para evitar que un solo servidor colapse.
  • Alta disponibilidad real: si un servidor backend falla o deja de responder al check de salud, HAProxy deja de enviarle tráfico automáticamente y lo redirige a los servidores disponibles.
  • Optimización de recursos: usando leastconn, los servidores con menor carga reciben las nuevas solicitudes de forma prioritaria, evitando cuellos de botella.

Buenas prácticas para producción

  • Monitorea el panel de estadísticas regularmente para identificar cuellos de botella o backends que fallan con frecuencia.
  • Prueba tu configuración con herramientas como curl apuntando directamente al balanceador para confirmar que el tráfico se distribuye como esperas.
  • Mantén HAProxy actualizado: cada nueva versión suele incluir mejoras de rendimiento y parches de seguridad importantes.
  • Define timeout realistas según el comportamiento de tu aplicación; timeouts demasiado cortos pueden cortar solicitudes legítimas, y demasiado largos pueden dejar conexiones colgadas consumiendo recursos.

HAProxy combina alta disponibilidad, escalabilidad y flexibilidad de protocolos en una herramienta ligera y probada en producción por empresas de todos los tamaños. Empezar con una configuración roundrobin simple y el panel de estadísticas ya te da una base sólida; a partir de ahí puedes sumar HTTPS, algoritmos más específicos y comprobaciones de salud según crezcan las necesidades.

Antes de montarlo, una pregunta honesta: ¿tu problema es realmente de capacidad? Si un solo servidor va lento pero su CPU está al 30 %, el balanceador no arregla nada y suma una pieza más que mantener; el cuello de botella suele estar en consultas a la base de datos sin índice o en la falta de caché, algo que resolvemos en la guía de caching con Nginx. El balanceo tiene sentido cuando un servidor ya está saturado de verdad, o cuando necesitas que el servicio siga en pie si uno cae. Para ese segundo caso hacen falta al menos dos VPS o servidores dedicados detrás del balanceador. Si tienes dudas durante la implementación, nuestro equipo de soporte técnico está disponible 24/7 para ayudarte.

¿Listo para llevar tu sitio al siguiente nivel?

Hosting con LiteSpeed, NVMe y soporte 24/7 desde $3/mes.

Ver planes de hosting

Preguntas frecuentes