Búsqueda de sitios web

Cómo utilizar Nginx como equilibrador de carga HTTP en Linux


Cuando se trata de configurar múltiples servidores de aplicaciones para redundancia, el equilibrio de carga es un mecanismo comúnmente utilizado para distribuir eficientemente las solicitudes de servicio entrantes o el tráfico de red entre 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 combinación cuando aumenta el tráfico). También aporta un rendimiento mejorado de la aplicación y muchos otros beneficios.

Lectura recomendada: La guía definitiva para proteger, reforzar 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, devolviendo en cada caso la respuesta del servidor seleccionado al cliente apropiado.

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

  • round-robin: distribuye las solicitudes a los servidores de aplicaciones en forma round-robin. Se utiliza por defecto cuando no se especifica ningún método,
  • 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 se debe seleccionar 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 en un nivel más avanzado. Nginx también admite comprobaciones de estado para marcar un servidor como fallido (durante un período de tiempo configurable, el valor predeterminado es 10 segundos) si su respuesta falla con un error, por lo que evita seleccionarlo. servidor para solicitudes entrantes posteriores durante algún tiempo.

Esta guía práctica muestra cómo utilizar Nginx como un equilibrador de carga HTTP para distribuir las solicitudes entrantes de los clientes 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.

Configuración del entorno de prueba

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 acceder a ella mediante el dominio tecmintapp.lan. Suponiendo que se trata de un dominio completamente registrado, agregaríamos lo siguiente en la configuración de DNS.

A Record   		@   		192.168.58.7

Este registro indica a las solicitudes de los clientes hacia dónde debe dirigir el dominio, en este caso, el equilibrador 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 bloqueo del servidor llamado /etc/nginx/conf.d/loadbalancer.conf (asigne 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 por defecto es 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 a los que se hace referencia mediante la palabra 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 por turnos ponderado.

Para emplear el mecanismo de conexión mínimo, utilice 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 los pesos del servidor. Usando la siguiente configuración, si hay seis solicitudes de 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. 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 está bien, 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 utilice la siguiente dirección para navegar.

http://tecmintapp.lan

Una vez que se carga la interfaz del sitio web, tome nota de la instancia de la aplicación que se ha cargado. Luego actualice 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.

Acaba de aprender cómo configurar Nginx como 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 equilibrador de carga HTTP.