Solo para visitantes de nuestro blog Obtenga 3 meses adicionales gratis + 10% de descuento en el plan trianual YSBLOG10
Agarra el trato

¿Cómo solucionar el balanceador de carga en un servidor Linux en 2026? – Guía para principiantes

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

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.

Compartir via:

Sanjeet Chauhan

Sanjeet Chauhan es bloguero y experto en SEO, dedicado a ayudar a los sitios web a crecer orgánicamente. Comparte estrategias prácticas, consejos prácticos y conocimientos para impulsar el tráfico, mejorar el posicionamiento y maximizar la presencia online.

Deja Tu Comentario

Su dirección de correo electrónico no será publicada. Las areas obligatorias están marcadas como requeridas *

Ir al Inicio