Load Balancing con HAProxy y Health Checks
Configura HAProxy como load balancer de alto rendimiento con health checks activos, sticky sessions y SSL termination para distribucion resiliente de servicios
Nota para desarrolladores hispanohablantes: Esta guía incluye ejemplos y convenciones de nomenclatura adaptadas a equipos que trabajan en español. Cuando existen diferencias significativas en terminología técnica entre el inglés y el español, se indican explícitamente para facilitar la comunicación en equipos multiculturales.
Load Balancing con HAProxy y Health Checks
Distribuye trafico entrante entre multiples servidores backend usando HAProxy, un load balancer TCP/HTTP de alto rendimiento. Esta recipe cubre distribucion round-robin, health checks activos, sticky sessions y SSL termination para resiliencia production-grade.
Cuando Usar Esto
- Corres multiples instancias de aplicacion y necesitas distribuir trafico equitativamente
- Los servicios deben removerse automaticamente de rotacion cuando esten unhealthy
- SSL termination deberia ocurrir en el edge, no en cada servidor de aplicacion
Solucion
1. Configuracion Basica de HAProxy
# haproxy.cfg
global
log stdout local0
maxconn 4096
defaults
mode http
timeout connect 5s
timeout client 30s
timeout server 30s
option httpchk GET /health
frontend web_frontend
bind *:80
default_backend app_servers
backend app_servers
balance roundrobin
server web1 10.0.1.10:3000 check
server web2 10.0.1.11:3000 check
server web3 10.0.1.12:3000 check
2. Health Checks Activos
backend app_servers
balance roundrobin
option httpchk GET /health
# Marca como down despues de 2 checks fallidos; up despues de 3 exitosos
default-server inter 5s fall 2 rise 3
server web1 10.0.1.10:3000 check
server web2 10.0.1.11:3000 check
server web3 10.0.1.12:3000 check
3. Sticky Sessions con Cookies
backend app_servers
balance roundrobin
cookie SERVERID insert indirect nocache
server web1 10.0.1.10:3000 check cookie web1
server web2 10.0.1.11:3000 check cookie web2
server web3 10.0.1.12:3000 check cookie web3
4. SSL Termination
frontend web_frontend
bind *:443 ssl crt /etc/ssl/certs/site.pem
http-request redirect scheme https unless { ssl_fc }
default_backend app_servers
5. Dashboard de Stats
listen stats
bind *:8404
stats enable
stats uri /stats
stats refresh 10s
Como Funciona
- Frontend escucha en un puerto y recibe conexiones de clientes
- Backend define el pool de servidores y el algoritmo de balanceo
- Health checks envian requests periodicos; servidores fallidos se remueven
- Cookie insertion pinnea un usuario a un backend especifico para session affinity
Variacion: Load Balancing Ponderado
backend app_servers
balance roundrobin
server web1 10.0.1.10:3000 check weight 3
server web2 10.0.1.11:3000 check weight 2
server web3 10.0.1.12:3000 check weight 1
Consideraciones de Produccion
- Corre HAProxy en active-passive con keepalived para failover
- Usa
leastconnpara conexiones WebSocket de larga duracion - Habilita compresion con
compression algo gzip
Errores Comunes
- Olvidar exponer un endpoint
/healthen las aplicaciones - Usar source IP affinity detras de NAT donde todos los clientes comparten una IP
- No monitorear la pagina de stats para degradacion de backends
FAQ
P: En que se diferencia de Nginx? R: HAProxy se especializa en load balancing layer 4/7 con granularidad superior de health checks. Nginx es un servidor web de proposito general que tambien hace proxy.
P: Puedo usar HAProxy con Docker?
R: Si. Usa la imagen oficial haproxy y monta tu haproxy.cfg como volumen.