Que es el balanceo de carga

El balanceo de carga (load balancing) es una tecnica que distribuye el trafico de red entrante entre multiples servidores backend para evitar que un solo servidor se sature, maximizar la utilizacion de recursos, garantizar la alta disponibilidad del servicio y permitir la escalabilidad horizontal de la infraestructura. Un balanceador de carga actua como punto de entrada unico para los clientes y decide a cual de los servidores backend enviar cada solicitud segun el algoritmo de distribucion configurado.

El balanceo de carga es esencial para aplicaciones web con alto trafico que requieren alta disponibilidad, donde la caida de un servidor no debe afectar el servicio al usuario final.

Algoritmos de distribucion de trafico

Algoritmo Como funciona Mejor para
Round Robin Distribuye secuencialmente entre los servidores en orden Servidores con capacidad similar y solicitudes homogeneas
Least Connections Envia al servidor con menos conexiones activas Solicitudes con tiempos de procesamiento variables
IP Hash El mismo cliente siempre va al mismo servidor (afinidad) Aplicaciones que requieren sesiones persistentes
Weighted Round Robin Distribuye segun el peso asignado a cada servidor Servidores con capacidad diferente
Least Response Time Envia al servidor con menor tiempo de respuesta Entornos con servidores de rendimiento variable

Configurar balanceo de carga con Nginx

Nginx puede funcionar como balanceador de carga eficiente. La configuracion se realiza en el archivo del sitio en /etc/nginx/sites-available/:

# Definir el grupo de servidores backend
upstream backend_pool {
    # Algoritmo predeterminado: Round Robin
    server 192.168.1.10:80;
    server 192.168.1.11:80;
    server 192.168.1.12:80;

    # Con pesos diferentes
    # server 192.168.1.10:80 weight=3;
    # server 192.168.1.11:80 weight=1;

    # Keepalive para reutilizar conexiones
    keepalive 32;
}

server {
    listen 80;
    server_name ejemplo.com;

    location / {
        proxy_pass http://backend_pool;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Verificacion de salud de los backends (Health Checks)

upstream backend_pool {
    server 192.168.1.10:80 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:80 max_fails=3 fail_timeout=30s;
    # Servidor de respaldo, solo activo si los otros fallan
    server 192.168.1.12:80 backup;
}

Consideraciones importantes

  • El balanceador de carga debe tener redundancia propia (al menos dos instancias con failover) para no convertirse en un punto unico de fallo.
  • Si la aplicacion web usa sesiones de usuario almacenadas en el servidor, usar el algoritmo IP Hash o centralizar las sesiones en Redis o Memcached para que cualquier servidor pueda atender a cualquier usuario.
  • Configurar el balanceador de carga con SSL termination para que maneje los certificados SSL y comunique con los backends en HTTP interno, reduciendo la carga de procesamiento criptografico en los servidores de aplicacion.
Was this answer helpful? 0 Users Found This Useful (0 Votes)