Hoy vamos a hablar de cómo configurar un Balanceador de carga para un servidor. Veremos dos alternativas, configurarlo todo a mano, o desde un entorno cloud virtualizado, desde el panel de control de Arsys. Está claro que, la segunda opción, será mucho más sencilla. Aún así, con la primera se aprenderá qué está pasando realmente por debajo.

Tecnologías a usar

Para configurar el load balancer a mano, usaremos nginx.

Introducción

Balancear cargas a lo largo de múltiples instancias de aplicaciones es una técnica muy usada para optimizar la utilización de recursos, maximizar el rendimiento, reducir latencia, y asegurar tolerancia a fallos.

Nginx puede configurarse para hacer las veces de un balanceador de carga Http para distribuir el tráfico a varios servidores de aplicaciones.



Métodos de balanceo en nginx

Configuraciones por defecto

http {
    upstream myapp1 {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://myapp1;
        }
    }
}

En este ejemplo, hay 3 instancias de la misma aplicación. ejecutándose en srv1-srv3. Si no se especifíca ningún método de balanceo, se aplica round-robin. Todas las peticiones se redirigen al grupo de servidores myapp1 y nginx se encarga de realizar el balanceo Http mediante round-robin.

Balanceo Least Connected

En este método de balanceo, se permite controlar la carga que reciben los servidores. Nginx intentará no sobrecargar un servidor ocupado con demasiadas peticiones, enviándolas a los servidores menos ocupados.

Para activar este método, hay que añadir la directiva least_conn:

upstream myapp1 {
        least_conn;
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
}

Balanceo ponderado

Si se quiere dar más ponderación, es posible usar el parámetro weight en los servidores, para asignarles más “peso” a la hora de tomar decisiones de balanceo:

upstream myapp1 {
        server srv1.example.com weight=3;
        server srv2.example.com;
        server srv3.example.com;
}

Con esta configuración, 5 peticiones nuevas se distribuirán de la siguiente forma: 3 a srv1, 1 a srv2 y 1 a srv3.

Control de estado (Health checks)

Si un servidor falla, nginx lo marcará como en mal estado y evitará enviarle peticiones.

Configurar el balanceo de carga en entornos cloud

Visto cómo crear el balanceo de carga a mano, ahora pasemos a administrar y crear de forma sencilla un sistema de balanceo. En este caso usando Arsys.

Para ello, en el panel de control hacemos click en Red » Balanceadores. Allí crearemos uno nuevo

Donde se especifica el nombre, puertos y direcciones a usar.

El siguiente paso es elegir el tipo de Control de estado a realizar, y el método de balanceo (Round robin o least connections)

Por último, se especifica la aplicación que será balanceada entre todos los servidores virtuales disponibles.

Ventajas y desventajas

La opción de crear y configurar el balanceador a mano puede ser buena para aprender, pero a la larga, conforme las necesidades de la aplicación vayan aumentando será más y más tedioso. Sin embargo, con un entorno cloud, podremos crear, modificar y borrar servidores y balanceadores a golpe de click.

Referencias

Nginx Docs »» nginx.org

Índice