Para reparar un balanceador de carga en un servidor Linux, verificar el estado del servicio, confirmar los puertos y las reglas del firewall, probar las comprobaciones del estado del backend, inspeccionar los registros en busca de errores y validar la sintaxis de configuración antes de volver a cargar.
Centrarse en la conectividad (DNS, enrutamiento, SSL/TLS)Persistencia de sesiones y límites de recursos. Implemente cambios de forma segura con copias de seguridad y monitoree las métricas para confirmar que el problema se haya resuelto.
Cuando su aplicación se ralentiza o se devuelve de forma intermitente Errores 502/503, el culpable es a menudo el equilibrador de cargaEn esta guía, te mostraré exactamente cómo solucionar un problema de balanceo de carga en un servidor Linux, ya sea que uses HAProxy, Nginx, Envoy o LVS/Keepalived.
Los pasos son fáciles de seguir para principiantes pero técnicamente precisos, basados en +12 años de experiencia práctica en alojamiento.
Qué cubre esta guía (Intención de búsqueda: Solución de problemas + Instrucciones)
La palabra clave principal es “arreglar” equilibrador de carga en un servidor Linux”. También aprenderá los fundamentos del equilibrio de carga de Linux, la resolución de problemas de HAProxy, Nginx correcciones del balanceador de carga, comprobaciones de estado, SSL Terminación, ajustes del firewall y alta disponibilidad (VRRP). Siga la lista de verificación, aplique las correcciones pertinentes y valide con pruebas y registros.
Síntomas de que su balanceador de carga de Linux está fallando
- Errores aleatorios 502/503/504 o "tiempo de espera agotado en sentido ascendente".
- Distribución desigual del tráfico o sobrecarga de un solo backend.
- SSL Fallos en el protocolo de enlace o certificado errores de desajuste
- Picos de alta latencia durante ráfagas de tráfico.
- La conmutación por error no ocurre en un par HA (problemas Keepalived/VRRP).
Primero comprenda su pila
- Proxy de alta disponibilidad: Balanceador de carga L4/L7 y proxy popular con comprobaciones de estado sólidas.
- Nginx: Servidor web y proxy inverso capaces de balanceo de carga L7 (HTTP/stream).
- Enviado/Traefik: Proxies L7 modernos con configuración y métricas dinámicas.
- LVS (IPVS) + Keepalived: Equilibrio de carga a nivel de kernel con HA basado en VRRP.
Identifique cuál está ejecutando y dónde se encuentran las configuraciones (p. ej., /etc/haproxy/haproxy.cfg, /etc/nginx/nginx.conf, /etc/keepalived/keepalived.conf). Conocer el componente determina la solución precisa.
Lista de verificación para la solución de problemas paso a paso
Paso 1: Verificar el servicio, los puertos y los procesos
Confirme que el balanceador de carga esté ejecutándose, escuchando en los puertos correctos (80/443 o personalizado) y que no esté bloqueado por el firewall.
sudo systemctl status haproxy nginx keepalived --no-pager
sudo ss -lntp | grep -E ':80|:443|:8443'
sudo journalctl -u haproxy -u nginx -u keepalived -b --no-pager | tail -n 50
Paso 2: DNS y comprobaciones de cordura de redes
Asegúrese de que el dominio se resuelva en la IP de su balanceador de carga y que la ruta sea accesible desde los clientes y desde el LB a los backends.
dig +short yourdomain.com
ping -c2 yourdomain.com
curl -I http://LB_IP
curl -kI https://LB_IP
nc -zv LB_IP 80
nc -zv LB_IP 443
Paso 3: Fallo en las comprobaciones de estado del backend
Si las comprobaciones de estado fallan, el LB descargará o marcará los backends como inactivos. Verifique la accesibilidad del backend y el punto final de estado esperado (p. ej., /healthz devuelve 200).
# From the LB host
curl -s -o /dev/null -w "%{http_code}\n" http://BACKEND_IP:PORT/healthz
curl -s -k -o /dev/null -w "%{http_code}\n" https://BACKEND_IP:PORT/healthz
Solucionar causas comunes: puerto incorrecto, ruta mal configurada, 403/401 debido a encabezados faltantes, falta de coincidencia de TLS o reglas de firewall en el backend.
Paso 4: SSLTLS y certificados
Los errores de handshake provocan fallos intermitentes. Compruebe la cadena de certificados, SNI y cifrados. Si termina SSL En el balanceador de carga, asegúrese de que la cadena completa esté instalada y que el dominio coincida.
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com -showcerts < /dev/null | openssl x509 -noout -subject -issuer -dates
# Nginx test
sudo nginx -t
# HAProxy test
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
Paso 5: Persistencia de la sesión (sesiones persistentes)
¿Se descartan inicios de sesión aleatoriamente? Habilite la persistencia basada en cookies (L7) o el hash consistente. Asegúrese de que todos los backends compartan el almacenamiento de sesiones (o use tokens sin estado) si no se garantiza la persistencia.
Paso 6: Cuellos de botella de rendimiento y tiempos de espera
- Aumentar la cartera de pedidos y los archivos descriptores: net.core.somaxconn, fs.file-max, ulimit -n.
- Ajustar los tiempos de espera: conectar, cliente_cuerpo, servidor, keepalive y límites de cola.
- Compruebe el backlog de SYN y los puertos efímeros: net.ipv4.tcp_max_syn_backlog, net.ipv4.ip_local_port_range.
# Quick tuning examples (test before adopting in production)
echo "net.core.somaxconn=4096" | sudo tee /etc/sysctl.d/99-lb.conf
echo "net.ipv4.tcp_max_syn_backlog=8192" | sudo tee -a /etc/sysctl.d/99-lb.conf
echo "net.ipv4.ip_local_port_range=10240 65535" | sudo tee -a /etc/sysctl.d/99-lb.conf
sudo sysctl --system
ulimit -n 100000 # set persistent limits via /etc/security/limits.conf
Paso 7: Alta disponibilidad: Keepalived/VRRP
Si una IP virtual (VIP) no conmuta por error, verifique el estado de VRRP, las prioridades y las vinculaciones de interfaz. Confirme que ambos LB puedan vincular la VIP y que se estén realizando los anuncios ARP.
sudo systemctl status keepalived --no-pager
ip a | grep "vip_address"
sudo journalctl -u keepalived -b --no-pager | tail -n 100
Correcciones comunes: configuraciones de pares de unidifusión idénticas, autenticación coincidente, nombres de interfaz adecuados y net.ipv4.ip_nonlocal_bind=1 cuando sea necesario.
Paso 8: Registros y métricas para inspeccionar
- Proxy de alta disponibilidad: Errores 503, “no hay servidor disponible”, registros de verificación de estado.
- Nginx: El sistema ascendente agotó el tiempo de espera. SSL errores, fallos de conexión con el servidor de origen.
- kernel: restablecimientos de conexión, retransmisiones TCP.
- Métricas del sistema: CPU robo, presión de memoria, espera de E/S.
sudo tail -f /var/log/haproxy.log /var/log/nginx/error.log
sudo dmesg | tail
sudo top | head -n 20
Correcciones para balanceadores de carga populares de Linux
HAProxy: Patrones de corrección comunes
Temas: Errores 503, colas, servidores backend defectuosos, SSL Errores. Validar la configuración, los tiempos de espera y las comprobaciones de estado. Utilizar tablas persistentes para garantizar la persistencia de los datos si es necesario.
# Validate config, then reload
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl reload haproxy
# Example: strengthen timeouts and health checks
# /etc/haproxy/haproxy.cfg
defaults
timeout connect 5s
timeout client 30s
timeout server 30s
backend app_pool
balance roundrobin
option httpchk GET /healthz
http-check expect status 200
server app1 10.0.0.11:8080 check
server app2 10.0.0.12:8080 check
# Sticky sessions
backend app_pool
cookie SRV insert indirect nocache
server app1 10.0.0.11:8080 check cookie app1
server app2 10.0.0.12:8080 check cookie app2
Nginx: Aguas arriba y SSL Correcciones
Temas: Tiempo de espera de subida agotado, 502 Puerta de enlace incorrecta, HTTP/HTTPS mixto, encabezados de proxy faltantes. Validar la sintaxis, aumentar los búferes/tiempos de espera y asegurar el protocolo de subida correcto.
# Test, then reload
sudo nginx -t
sudo systemctl reload nginx
# /etc/nginx/conf.d/lb.conf
upstream backend_pool {
server 10.0.0.11:8080 max_fails=3 fail_timeout=10s;
server 10.0.0.12:8080 max_fails=3 fail_timeout=10s;
# ip_hash; # enable if you need sticky sessions
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://backend_pool;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 5s;
proxy_read_timeout 30s;
proxy_send_timeout 30s;
}
location = /healthz { return 200; }
}
Keepalived + VRRP: Conmutación por error confiable
Asegúrese de que ambos nodos usen el mismo VRID, las mismas contraseñas (si se usan) y la interfaz correcta. Si usa unidifusión, enumere los pares con precisión. En algunas distribuciones, habilitar el enlace no local facilita el enlace VIP.
# /etc/keepalived/keepalived.conf (example)
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass strongpass
}
virtual_ipaddress {
10.0.0.10/24 dev eth0
}
track_script {
chk_haproxy
}
}
vrrp_script chk_haproxy {
script "pidof haproxy"
interval 2
weight 10
}
Consideraciones sobre seguridad y firewall
- Abra los puertos necesarios en firewalld/iptables (80, 443, puertos de comprobación de estado).
- Permitir puertos backend en el host LB y en los servidores backend.
- Si se aplica SELinux, agregue contextos adecuados en lugar de deshabilitarlo.
# firewalld
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
# iptables (legacy example)
sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT
sudo service iptables save
# SELinux port context (example for custom port 8443)
sudo semanage port -a -t http_port_t -p tcp 8443
Pruebas, validación y reversiones seguras
- Siempre verifique la sintaxis antes de recargar: haproxy -c -f, nginx -t.
- Realice una copia de seguridad de las configuraciones: archivo cp archivo.bak.$(fecha +%F-%H%M).
- Recargue, no reinicie, para evitar tiempos de inactividad innecesarios.
- Realizar pruebas de humo: rizo de múltiples regiones o ISP.
- Supervise las tasas de error, la latencia y el estado del backend después de los cambios.
curl -s -o /dev/null -w "%{http_code} %{time_total}\n" -H "Host: yourdomain.com" http://LB_IP/
ab -n 500 -c 50 http://yourdomain.com/ # or use wrk/hey for modern load tests
Endurecimiento proactivo y observabilidad
- Habilitar métricas: Exportador HAProxy Prometheus, Nginx stub_status/Exportador.
- Centralice los registros con campos estructurados (request_time, upstream_status).
- Escale automáticamente los backends o agregue nodos cuando aumenten los tiempos de cola.
- Implemente implementaciones canarias y azul/verde para implementaciones más seguras.
- Programe renovaciones periódicas de certificados y auditorías de configuración.
Cuándo escalar o reparar
Si la configuración es correcta pero la latencia y los errores 5xx persisten bajo carga, es probable que necesite escalar:
- Escalar horizontalmente: agregue más nodos backend o una segunda capa LB.
- Aumentar proporcionalmente: incrementar CPU/RAM o bien, cambiar a instancias optimizadas.
- Utilice anycast o un balanceador de carga en la nube para la distribución global.
Escenarios del mundo real y resoluciones rápidas
- Pico repentino de 503 en HAProxy: El punto final de estado del backend comenzó a devolver el error 401 después del lanzamiento de una aplicación. Se solucionó permitiendo la IP del LB o agregando el encabezado/token requerido a httpchk.
- Nginx Se agotó el tiempo de espera en la conexión ascendente: Los backends se ralentizaron con picos de tráfico. Se solucionó aumentando temporalmente el tiempo de espera de proxy_read_timeout a 60 s y escalando los nodos de la aplicación.
- Conmutación por error de VRRP bloqueada: El nombre de interfaz de la secundaria era incorrecto tras actualizar el sistema operativo. Se solucionó modificando la interfaz y reiniciando Keepalived.
Recomendación suave: ayuda experta de YouStable
Si prefieres no depurar la producción a las 2 a. m., YouStable, managed alojamiento El equipo puede diseñar, implementar y monitorear balanceadores de carga Linux con HAProxy/Nginx/Manténgalos vivos, implemente la observabilidad y mantenga los SLA. Adaptamos las comprobaciones de estado, SSLy adaptando las políticas a tu aplicación para que los incidentes sean poco frecuentes y la recuperación sea rápida.
Preguntas Frecuentes
1. ¿Cómo soluciono el error 502 Bad Gateway en un balanceador de carga de Linux?
Compruebe que los servidores backend sean accesibles y estén escuchando, verifique el protocolo ascendente (HTTP frente a HTTPS) e inspeccione los tiempos de espera. Para NginxRevise el archivo error.log para detectar errores como "conexión cerrada prematuramente con el servidor" o "tiempo de espera agotado con el servidor". Para HAProxy, busque errores 502/503 en haproxy.log. Valide las configuraciones con nginx -t o haproxy -c -f antes de recargar.
2. ¿Por qué fallan mis controles de salud aunque la aplicación esté activa?
Razones comunes: URL de estado incorrecta, autenticación requerida, redirecciones (3xx), incompatibilidad de TLS (comprobación HTTP con el backend HTTPS) o bloqueos del firewall. Asegúrese de que el endpoint devuelva 200 OK rápidamente y que el LB envíe los encabezados o tokens necesarios.
3. ¿Cómo puedo habilitar las sesiones persistentes en HAProxy o Nginx?
En HAProxy, utilice la persistencia basada en cookies (inserción de cookie SRV y valores de cookies por servidor). NginxHabilite ip_hash para mantener la sesión activa o utilice un módulo de hash consistente. Asegúrese de que los datos de sesión se compartan o no tengan estado para evitar la pérdida de datos durante la conmutación por error.
4. ¿Qué reglas de firewall son necesarias para un balanceador de carga de Linux?
Permita la entrada 80/443 en el LB, permita la salida del LB a los puertos backend (p. ej., 8080/8443) y permita los puertos de comprobación de estado si son independientes. En CentOS/RHEL, use firewall-cmd; en Ubuntu/Debian, use ufw o iptables. No olvide los contextos de puerto de SELinux para los puertos personalizados.
5. ¿Cómo puedo aplicar cambios de forma segura sin tiempo de inactividad?
Realice una copia de seguridad de las configuraciones, valide la sintaxis (nginx -t, haproxy -c -f) y recargue el servicio (systemctl reload). Para cambios importantes, vacíe un nodo LB en un par de alta disponibilidad (HA), aplique los cambios, valide y luego realice la migración. Supervise las métricas y los registros inmediatamente después de la implementación.