Cómo usar Nginx como un balanceador de carga HTTP en Linux


Cuando se trata de configurar varios servidores de aplicaciones para la redundancia, el equilibrio de carga es un mecanismo comúnmente utilizado para distribuir de manera eficiente las solicitudes de servicio entrantes o el tráfico de red en un grupo de servidores back-end.

El equilibrio de carga tiene varias ventajas, incluida una mayor disponibilidad de las aplicaciones a través de la redundancia, mayor confiabilidad y escalabilidad (se pueden agregar más servidores a la mezcla cuando aumenta el tráfico). También trae consigo un rendimiento mejorado de la aplicación y muchos otros beneficios.

Lectura recomendada: la guía definitiva para proteger, fortalecer y mejorar el rendimiento del servidor web Nginx

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

Los métodos de equilibrio de carga admitidos por Nginx son:

  • round-robin - que distribuye las solicitudes a los servidores de aplicaciones en forma de round-robin. Se utiliza de forma predeterminada cuando no se especifica ningún método,
  • menos conectado: asigna la siguiente solicitud a un servidor menos ocupado (el servidor con la menor cantidad de conexiones activas),
  • ip-hash: donde se utiliza una función hash para determinar qué servidor debe seleccionarse para la siguiente solicitud en función de la dirección IP del cliente. Este método permite la persistencia de la sesión (vincular un cliente a un servidor de aplicaciones en particular).

Además, puede utilizar los pesos del servidor para influir en los algoritmos de equilibrio de carga de Nginx a un nivel más avanzado. Nginx también admite verificaciones de estado para marcar un servidor como fallado (durante un período de tiempo configurable, el valor predeterminado es 10 segundos) si su respuesta falla con un error, por lo que evita elegir ese servidor para solicitudes entrantes posteriores durante algún tiempo.

Esta guía práctica muestra cómo usar Nginx como un balanceador de carga HTTP para distribuir las solicitudes de clientes entrantes entre dos servidores, cada uno de los cuales tiene 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.

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

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

A Record   		@   		192.168.58.7

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

192.168.58.7  	tecmintapp.lan

Configuración del equilibrio de carga de Nginx en Linux

Antes de configurar el equilibrio de carga de Nginx, debe instalar Nginx en su servidor utilizando el administrador de paquetes predeterminado para su distribución como se muestra.

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

A continuación, cree un archivo de bloque de servidor llamado /etc/nginx/conf.d/loadbalancer.conf (proporcione un nombre de su elección).

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

Luego copie y pegue la siguiente configuración en él. Esta configuración tiene como valor predeterminado el 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 mediante el word backend, en la directiva upstream (utilizada para definir un grupo de servidores). Además, las solicitudes se distribuirán entre los servidores mediante un mecanismo de equilibrio ponderado por turnos.

Para emplear el mínimo mecanismo de conexión, use 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 , use:

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

También puede influir en la decisión de equilibrio de carga utilizando pesos de servidor. Usando la siguiente configuración, si hay seis solicitudes de los clientes, al servidor de aplicaciones 192.168.58.5 se le asignarán 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;
    }

Guarde el archivo y salga de él. Luego, asegúrese 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, reinicie y habilite el servicio Nginx para aplicar los cambios.

$ sudo systemctl restart nginx
$ sudo systemctl enable nginx

Prueba del equilibrio de carga de Nginx en Linux

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

http://tecmintapp.lan

Una vez que se cargue la interfaz del sitio web, tome nota de la instancia de la aplicación que se cargó. Luego actualice continuamente la página. En algún momento, la aplicación debe cargarse desde el segundo servidor, lo que indica el equilibrio de carga.

Acaba de aprender a configurar Nginx como un equilibrador de carga HTTP en Linux. Nos gustaría conocer su opinión sobre esta guía, y especialmente sobre el empleo de Nginx como equilibrador de carga, a través del formulario de comentarios a continuación. Para obtener más información, consulte la documentación de Nginx sobre el uso de Nginx como balanceador de carga HTTP.