GNU/Linux >> Tutoriales Linux >  >> Linux

Equilibrio de carga Nginx

El equilibrio de carga entre múltiples aplicaciones, backends y servidores es parte del proceso de optimización de recursos, mejora del rendimiento y tolerancia a fallas del servicio.

Nginx como balanceador de carga

Este servidor web es considerado una de las soluciones más populares y productivas debido a que cuenta con la más amplia funcionalidad y flexibilidad a la hora de configurar. Por lo tanto, Nginx se usa a menudo para equilibrar la carga.

Existen varios enfoques e implementaciones, pero primero verifique la disponibilidad del módulo ngx_http_upstream_module:

# nginx -v

Si falta, tendrá que reconstruir Nginx agregando este módulo. Después de eso, puede comenzar a configurar el servidor web. Para habilitar el equilibrio, agregue la directiva ascendente (sección http) al archivo de configuración de Nginx:

upstream backend  {
  server backend1.somesite.com;
  server backend2.somesite.com;
  server backend3.somesite.com;
}

Ahora debe especificar la redirección del grupo necesario:

server {
  location / {
    proxy_pass  http://backend;
  }
}

Además, Nginx admite parámetros adicionales y métodos de equilibrio de carga.

Elegir un método de equilibrio

Nginx ofrece varios métodos de equilibrio de carga.

Todos contra todos

De forma predeterminada, el servidor web distribuye las solicitudes de manera uniforme entre los backend (pero teniendo en cuenta los pesos). Este es un método estándar en Nginx, por lo que no hay una directiva de inclusión.

menos_conexion

Las solicitudes se envían primero al backend con la menor cantidad de conexiones activas (pero teniendo en cuenta los pesos):

upstream backend {
    least_conn;

    server backend1.somesite.com;
    server backend2.somesite.com;
}

Hash y hash de IP

Con este método, puede crear una especie de conexión persistente entre clientes y backends. Para cada solicitud, Nginx calcula un hash que consta de texto, variables del servidor web o una combinación de ellos y luego lo asigna a los backends:

upstream backend {
   hash $scheme$request_uri;

   server backend1.somesite.com;
   server backend2.somesite.com;
   server backend3.somesite.com;
}

El hash de IP solo funciona con HTTP, esta es una opción predefinida en la que el hash se calcula por la dirección IP del cliente:

upstream backend {
   ip_hash;

   server backend1.somesite.com;
   server backend2.somesite.com;
   server backend3.somesite.com;
}

Peso trasero

Si ciertos backends en la pila son más poderosos que otros, entonces los pesos son útiles:

upstream backend {
    server backend1.somesite.com weight=10;
    server backend2.somesite.com weight=5;
    server backend3.somesite.com;
    server 192.0.0.1 backup;
}

En este ejemplo, de cada 16 solicitudes, el primer backend procesará 10, el segundo 5 y el tercero 1. En este caso, el servidor de respaldo recibirá solicitudes solo si los tres backends principales no están disponibles.

Monitoreo

Si Nginx cree que el servidor backend no está disponible, deja de enviarle solicitudes temporalmente. Dos directivas son responsables de esto:

  • max_fails — establece el número de intentos de conexión fallidos, después de los cuales el backend se considera no disponible durante un tiempo determinado;
  • fail_timeout — tiempo durante el cual el servidor se considera no disponible.

Los parámetros se ven así:

upstream backend {                
    server backend1.somesite.com;
    server backend2.somesite.com max_fails=3 fail_timeout=30s;
    server backend3.somesite.com max_fails=2;
}

Conclusión

Elegir el método de equilibrio apropiado hará posible distribuir la carga de manera más uniforme. No se olvide de los pesos de back-end, el monitoreo y la tolerancia a fallas del servidor.


Linux
  1. Cómo redirigir HTTP a HTTPS en Nginx

  2. nginx - 413 Entidad de solicitud demasiado grande

  3. Cómo configurar el balanceador de carga HAProxy

  4. Instalar Nginx en Windows

  5. Nginx incluye en la lista blanca ciertas IP

Cómo instalar NGINX en Ubuntu 20.04

Cómo instalar Nginx en CentOS 7

Cómo instalar Nginx en el servidor en la nube Debian 8.2

Cómo configurar NGINX en un servidor CentOS 7

Cómo configurar la caché de Nginx en el servidor LEMP

Cómo configurar Load Balancing con NGINX en Jelastic Cloud