Cómo Usar Nginx como un Equilibrador de Carga HTTP en Linux

Cuando se trata de configurar múltiples servidores de aplicaciones para redundancia, el balanceo de carga es un mecanismo comúnmente utilizado para distribuir de manera eficiente las solicitudes de servicio entrantes o el tráfico de red a través de un grupo de servidores de back-end.

El balanceo de carga tiene varias ventajas, incluyendo el aumento de la disponibilidad de la aplicación a través de la redundancia, mayor fiabilidad y escalabilidad (se pueden agregar más servidores a la mezcla cuando el tráfico aumenta). También conlleva una mejora del rendimiento de la aplicación y muchos otros beneficios.

Lectura recomendada: La Guía Definitiva para Asegurar, Fortalecer y Mejorar el Rendimiento del Servidor Web Nginx

Nginx se puede implementar como un eficiente balanceador de carga HTTP para distribuir el tráfico de red entrante y la carga de trabajo entre un grupo de servidores de aplicaciones, devolviendo en cada caso la respuesta del servidor seleccionado al cliente correspondiente.

Los métodos de balanceo de carga que admite Nginx son:

  • round-robin – que distribuye las solicitudes a los servidores de aplicaciones de manera secuencial. Se utiliza por defecto cuando no se especifica ningún método,
  • el menos conectado – asigna la siguiente solicitud a un servidor menos ocupado (el servidor con el menor número de conexiones activas),
  • ip-hash – donde se utiliza una función hash para determinar qué servidor debe seleccionarse para la próxima solicitud basada en la dirección IP del cliente. Este método permite la persistencia de sesión (vincular un cliente a un servidor de aplicación específico).

Además, puedes usar pesos de servidor para influir en los algoritmos de equilibrio de carga de Nginx a un nivel más avanzado. Nginx también admite comprobaciones de salud para marcar un servidor como fallido (durante un período de tiempo configurable, el valor predeterminado es de 10 segundos) si su respuesta falla con un error, evitando así seleccionar ese servidor para las solicitudes entrantes posteriores durante algún tiempo.

Esta guía práctica muestra cómo utilizar Nginx como un balanceador de carga HTTP para distribuir las solicitudes entrantes del cliente entre dos servidores, cada uno con una instancia de la misma aplicación.

Para fines de prueba, cada instancia de aplicación está etiquetada (en la interfaz de usuario) para indicar el servidor en el que se está ejecutando.

Configuración del Entorno de Pruebas

Load Balancer: 192.168.58.7
Application server 1: 192.168.58.5
Application server 2: 192.168.58.8

En cada servidor de aplicación, cada instancia de aplicación está configurada para ser accedida utilizando el dominio tecmintapp.lan. Suponiendo que este es un dominio completamente registrado, agregaríamos lo siguiente en la configuración DNS.

A Record   		@   		192.168.58.7

Este registro indica a las solicitudes del cliente a dónde dirigirse el dominio, en este caso, al balanceador de carga (192.168.58.7). Los registros A de DNS solo aceptan valores IPv4. Alternativamente, el archivo /etc/hosts en las máquinas cliente también puede usarse con fines de prueba, con la siguiente entrada.

192.168.58.7  	tecmintapp.lan

Configuración del Balanceo de Carga de Nginx en Linux

Antes de configurar el equilibrio de carga de Nginx, debes instalar Nginx en tu servidor utilizando el gestor de paquetes predeterminado para tu distribución, como se muestra a continuación.

$ sudo apt install nginx   [On Debian/Ubuntu]
$ sudo yum install nginx   [On CentOS/RHEL]   

Luego, crea un archivo de bloque de servidor llamado /etc/nginx/conf.d/loadbalancer.conf (dale un nombre de tu elección).

$ sudo vi /etc/nginx/conf.d/loadbalancer.conf

Después, copia y pega la siguiente configuración en él. Esta configuración se establece por defecto en round-robin ya que no se define ningún método de equilibrio de carga.

 
upstream backend {
        server 192.168.58.5;
        server 192.168.58.8;
    }
	
    server {
        listen      80 default_server;
        listen      [::]:80 default_server;
        server_name tecmintapp.lan;

        location / {
	        proxy_redirect      off;
	        proxy_set_header    X-Real-IP $remote_addr;
	        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
	        proxy_set_header    Host $http_host;
		proxy_pass http://backend;
	}
}

En la configuración anterior, la directiva proxy_pass (que debe especificarse dentro de una ubicación, / en este caso) se utiliza para pasar una solicitud a los servidores proxy HTTP referenciados con la palabra backend, en la directiva upstream (utilizada para definir un grupo de servidores). Además, las solicitudes se distribuirán entre los servidores utilizando un mecanismo de equilibrio de carga de round-robin ponderado.

Para emplear el mecanismo de menor conexión, utiliza la siguiente configuración

upstream backend {
        least_conn;
        server 192.168.58.5;
        server 192.168.58.8;
    }

Y para habilitar el mecanismo de persistencia de sesión ip_hash, utiliza:

upstream backend {
	ip_hash;
        server 192.168.58.5;
        server 192.168.58.8;
    }

También puedes influir en la decisión de equilibrio de carga utilizando pesos de servidor. Utilizando la siguiente configuración, si hay seis solicitudes de clientes, el servidor de aplicaciones 192.168.58.5 recibirá 4 solicitudes y 2 irán a 192.168.58.8.

upstream backend {
        server 192.168.58.5	weight=4;
        server 192.168.58.8;
    }

Guarda el archivo y sal de él. Luego, asegúrate de que la estructura de configuración de Nginx sea correcta después de agregar los cambios recientes, ejecutando el siguiente comando.

$ sudo nginx -t

Si la configuración es correcta, reinicia y habilita el servicio de Nginx para aplicar los cambios.

$ sudo systemctl restart nginx
$ sudo systemctl enable nginx

Prueba de Equilibrio de Carga de Nginx en Linux

Para probar el equilibrio de carga de Nginx, abre un navegador web y utiliza la siguiente dirección para navegar.

http://tecmintapp.lan

Una vez que se cargue la interfaz del sitio web, toma nota de la instancia de la aplicación que se ha cargado. Luego, actualiza continuamente la página. En algún momento, la aplicación debería cargarse desde el segundo servidor, lo que indica el equilibrio de carga.

Check Nginx Load Balancing in Linux

Acabas de aprender cómo configurar Nginx como un equilibrador de carga HTTP en Linux. Nos gustaría conocer tus opiniones sobre esta guía, y especialmente sobre el uso de Nginx como equilibrador de carga, a través del formulario de comentarios a continuación. Para obtener más información, consulta la documentación de Nginx sobre el uso de Nginx como un equilibrador de carga HTTP.

Source:
https://www.tecmint.com/use-nginx-as-http-load-balancer-in-linux/