Balanceo de carga con NGINX y NGINX Plus, parte 1

NGINX | 20 de febrero de 2014

NGINX es un proxy de aceleración eficaz para una amplia variedad de aplicaciones basadas en HTTP. Sus funciones de almacenamiento en caché, procesamiento de conexiones HTTP y descarga de tareas aumentan considerablemente el rendimiento de las aplicaciones, especialmente durante los periodos de alta carga.

Nota del editor: NGINX Plus versión 5 y posteriores también pueden equilibrar la carga de aplicaciones basadas en TCP. El equilibrado de carga TCP se amplió considerablemente en la versión 6 con la incorporación de comprobaciones de estado, reconfiguración dinámica, terminación SSL y mucho más. En NGINX Plus versión 7<.htmla> y posteriores, el equilibrador de carga TCP ofrece las mismas funcionalidades que el equilibrador de carga HTTP. La compatibilidad con el equilibrado de carga UDP se introdujo en la versión 9.

La configuración del balanceo de carga TCP y UDP se realiza en el contexto stream en lugar de en el contexto http. Las directivas y los parámetros disponibles difieren ligeramente debido a las diferencias inherentes entre HTTP y TCP/UDP; para obtener más información, consulte la documentación de los módulos Upstream de HTTP y TCP.

NGINX Plus amplía las capacidades de NGINX añadiendo funciones adicionales de balanceo de carga: comprobaciones de estado, persistencia de sesión, supervisión de la actividad en tiempo real, y configuración dinámica de grupos de servidores con balanceo de carga.

Esta entrada de blog le guía en la configuración de NGINX para equilibrar el tráfico entre un conjunto de servidores web. También destaca algunas de las funciones adicionales de NGINX Plus.

Para obtener más información, también puede consultar la Guía de administración de NGINX Plus y el artículo que continúa este, Equilibrio de carga con NGINX y NGINX Plus, parte 2.

Proxy de tráfico con NGINX

Comenzaremos redirigiendo el tráfico mediante proxy a dos servidores web ascendentes. La siguiente configuración de NGINX basta para gestionar todas las solicitudes HTTP dirigidas al puerto 80 y reenviarlas de forma rotatoria entre los servidores web del grupo ascendente:

http {    server {
        listen 80;

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

    upstream backend {
        server web-server1:80;
        server web-server2:80;
    }
}

Con esta sencilla configuración, NGINX reenvía cada solicitud recibida en el puerto 80 a web-server1 y web-server2 por turnos, estableciendo una nueva conexión HTTP en cada caso.

Configurar el método de balanceo de carga

De forma predeterminada, NGINX utiliza el método Round Robin para distribuir el tráfico de manera uniforme entre los servidores, teniendo en cuenta un «peso» opcional asignado a cada servidor para indicar su capacidad relativa.

El método Hash de IP distribuye el tráfico basándose en un hash de la dirección IP de origen. Las solicitudes procedentes de la misma dirección IP de cliente se envían siempre al mismo servidor ascendente. Se trata de un método rudimentario de persistencia de sesión que se vuelve a calcular cada vez que un servidor falla o se recupera, o cuando se modifica el grupo de servidores ascendentes; NGINX Plus ofrece mejores soluciones si se requiere persistencia de sesión.

El método de Menos conexiones dirige cada solicitud al servidor ascendente con menos conexiones activas. Este método funciona bien cuando se gestiona una combinación de solicitudes rápidas y complejas.

Todos los métodos de balanceo de carga se pueden ajustar mediante un parámetro opcional weight en la directiva server. Esto resulta útil cuando los servidores tienen distintas capacidades de procesamiento. En el siguiente ejemplo, NGINX dirige cuatro veces más solicitudes a web-server2 que a web-server1:

upstream backend {    zone backend 64k;
    least_conn;

    server web-server1 weight=1;
    server web-server2 weight=4;
}

En NGINX, cada proceso de trabajo gestiona los pesos de forma independiente. NGINX Plus utiliza un segmento de memoria compartida para los datos de los servidores upstream (configurado mediante la directiva zone), por lo que los pesos se comparten entre los procesos de trabajo y el tráfico se distribuye con mayor precisión.

Detección de fallos

Si se produce un error o se agota el tiempo de espera cuando NGINX intenta conectarse a un servidor, enviarle una solicitud o leer la cabecera de respuesta, NGINX vuelve a intentar la solicitud de conexión con otro servidor. (Puede incluir la directiva proxy_next_upstream en la configuración para definir otras condiciones en las que se debe volver a intentar la solicitud). Además, NGINX puede retirar el servidor que ha fallado del conjunto de servidores disponibles y enviarle solicitudes ocasionalmente para detectar cuándo se recupera. Los parámetros max_fails y fail_timeout de la directiva server controlan este comportamiento.

NGINX Plus añade un conjunto de comprobaciones de estado fuera de banda que realizan pruebas HTTP avanzadas en cada servidor ascendente para determinar si está activo, así como un mecanismo de inicio lento para reincorporar gradualmente los servidores recuperados al grupo con equilibrio de carga:

server web-server1 slow_start=30s;

Un error habitual: corregir la cabecera Host Header

Es bastante habitual que un servidor ascendente utilice la cabecera Host de la solicitud para determinar qué contenido debe servir. Si el servidor devuelve errores 404 inesperados o cualquier otra respuesta que indique que está sirviendo un contenido incorrecto, esto es lo primero que debe comprobar. A continuación, incluya la directiva proxy_set_header en la configuración para asignar el valor adecuado a la cabecera:

location / {
    proxy_pass http://backend;

    # Rewrite the 'Host' header to the value in the client request
    # or primary server name
    proxy_set_header Host $host;

    # Alternatively, put the value in the config:
    #proxy_set_header Host www.example.com;
}

Balanceo de carga avanzado con NGINX Plus

Una serie de funciones avanzadas de NGINX Plus lo convierten en un balanceador de carga ideal para situarlo delante de grupos de servidores ascendentes:

Para obtener más información sobre el equilibrio de carga avanzado y el uso de proxies, consulte la continuación de este artículo, «Equilibrio de carga con NGINX y NGINX Plus, parte 2».

Para probar NGINX Plus, inicie hoy mismo su prueba gratuita de 30 días o póngase en contacto con nosotros para hablar sobre sus casos de uso de balanceo de carga.


Compartir

Sobre el autor

Owen Garrett
Owen GarrettDirector sénior de Gestión de Producto

Más artículos de Owen Garrett

Artículos relacionados del blog

Únete a F5 NGINX en AppWorld 2024
NGINX | 04/01/2024

Únete a F5 NGINX en AppWorld 2024

Descubre las numerosas razones para asistir al evento insignia de F5, que incluirá un emocionante anuncio sobre la cartera de productos NGINX.

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source
NGINX | 26/09/2023

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source

La función de diccionario compartido permite configurar NGINX sin necesidad de reiniciarlo al renovar los certificados SSL/TLS.

Exposición de APIs en Kubernetes
NGINX | 10/03/2022

Exposición de APIs en Kubernetes

La unidad 2 de Microservices March 2022 se centra en cómo exponer tus API en Kubernetes. Aquí tienes enlaces a los recursos que necesitas: la retransmisión en directo del 14 de marzo, artículos de blog y otros recursos de preparación, y el laboratorio práctico «Protege las API de Kubernetes mediante la limitación de solicitudes».

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto
NGINX | 23/08/2021

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto

Hoy, en NGINX Sprint 2.0, anunciamos cómo respaldaremos nuestra visión del futuro de las aplicaciones modernas con una mayor presencia en la comunidad de código abierto, incluida la participación en el proyecto comunitario Kubernetes, nuevos proyectos de software de código abierto y la arquitectura de referencia para aplicaciones modernas.

Presentamos NGINX Plus R22
NGINX | 09/06/2020

Presentamos NGINX Plus R22

NGINX Plus R22 incorpora nuevas funcionalidades, como la compatibilidad con OCSP para verificar la revocación de certificados en TLS mutuo, el uso de varios proveedores de identidad OIDC en una configuración, el seguimiento en tiempo real de la limitación de solicitudes y conexiones en el panel de NGINX Plus y mejoras en NGINX JavaScript.

Presentamos NGINX Plus R17
NGINX | 11/12/2018

Presentamos NGINX Plus R17

NGINX Plus R17 incorpora compatibilidad con la limitación de velocidad en dos fases y con TLS 1.3, la versión más reciente del protocolo Transport Layer Security. La configuración de OpenID Connect es más sencilla y NGINX ModSecurity WAF es el doble de rápido que antes. También se ha actualizado el módulo JavaScript de NGINX.