Cómo funciona Elastic Load Balancing - Elastic Load Balancing

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Cómo funciona Elastic Load Balancing

Un equilibrador de carga acepta el tráfico entrante de los clientes y direcciona las solicitudes a sus destinos registrados (como por ejemplo instancias EC2) en una o varias zonas de disponibilidad. Asimismo, el equilibrador de carga monitoriza el estado de los destinos registrados en él y se asegura de direccionar el tráfico únicamente a los que se encuentran en buen estado. Cuando el equilibrador de carga detecta un destino que no está en buen estado, deja de enviar tráfico a ese destino. A continuación, reanuda el tráfico a ese destino cuando detecta que el destino vuelve a estar en buen estado.

Puede configurar el equilibrador de carga para que acepte el tráfico entrante especificando uno o varios oyentes. Un oyente es un proceso que verifica solicitudes de conexión. Se configura con un protocolo y un número de puerto para las conexiones entre los clientes y el equilibrador de carga. Del mismo modo, se configura con un protocolo y un número de puerto para las conexiones del equilibrador de carga a los destinos.

Elastic Load Balancing admite los siguientes tipos de equilibradores de carga.

  • equilibrador de carga de aplicaciones

  • Equilibrador de carga de red

  • Equilibradores de carga de puerta de enlace

  • Equilibradores de carga clásicos

Hay una diferencia clave en el modo en que se configuran los tipos de equilibrador de carga. Con los equilibradores de carga de aplicaciones, los Equilibradores de carga de red y los equilibradores de carga de puerta de enlace, se registran los destinos en grupos de destino se dirige el tráfico a los grupos de destino. Con los Equilibradores de carga clásicos, las instancias se registran directamente con el equilibrador de carga.

Zonas de disponibilidad y nodos de equilibrador de carga

Cuando se agrega una zona de disponibilidad al equilibrador de carga, Elastic Load Balancing crea en ella un nodo de equilibrador de carga. Si registra destinos en una zona de disponibilidad, pero no la habilita, los destinos registrados no reciben tráfico. El equilibrador de carga es más eficaz si se asegura de que cada zona de disponibilidad habilitada tenga al menos un destino registrado.

Recomendamos habilitar varias zonas de disponibilidad para todos los equilibradores de carga. Sin embargo, con un Equilibrador de carga de aplicación, es obligatorio que habilite al menos dos o más zonas de disponibilidad. Esta configuración ayuda a garantizar que el equilibrador de carga pueda continuar enviando el tráfico. Si una zona de disponibilidad deja de estar disponible o no incluye ningún destino en buen estado, el equilibrador de carga puede seguir enviando el tráfico a los destinos en buen estado de otra zona de disponibilidad.

Después de deshabilitar una zona de disponibilidad, los destinos de esa zona de disponibilidad permanecen registrados en el equilibrador de carga. Sin embargo, aunque permanezcan registrados, el equilibrador de carga no envía el tráfico hacia ellos.

Equilibrio de carga entre zonas

Los nodos del equilibrador de carga distribuyen las solicitudes procedentes de los clientes entre los destinos registrados. Cuando el equilibrio de carga entre zonas está habilitado, cada nodo del equilibrador de carga distribuye el tráfico entre los destinos registrados de todas las zonas de disponibilidad habilitadas. Cuando el equilibrio de carga entre zonas está deshabilitado, cada nodo del equilibrador de carga distribuye el tráfico únicamente entre los destinos registrados de su zona de disponibilidad.

Los siguientes diagramas muestran el efecto del equilibrio de carga entre zonas, con el algoritmo de enrutamiento por turnos como algoritmo de enrutamiento predeterminado. Hay dos zonas de disponibilidad habilitadas: la zona de disponibilidad A tiene dos destinos, mientras que la zona de disponibilidad B tiene ocho. Los clientes envían solicitudes y Amazon Route 53 responde a cada una con la dirección IP de uno de los nodos del equilibrador de carga. Según el algoritmo de enrutamiento por turnos, el tráfico se distribuye de manera que cada nodo del equilibrador de carga reciba el 50 % del tráfico de los clientes. Cada nodo del equilibrador de carga distribuye su cuota de tráfico entre los destinos registrados en su ámbito.

Si el equilibrio de carga entre zonas está habilitado, cada uno de los diez destinos recibirá un 10% del tráfico. Esto se debe a que cada nodo del equilibrador de carga puede dirigir el 50% del tráfico de los clientes a los diez destinos.

Cuando el equilibrio de carga entre zonas está habilitado

Cuando el equilibrio de carga entre zonas está deshabilitado:

  • Cada uno de los dos destinos de la zona de disponibilidad A recibe el 25 % del tráfico.

  • Cada uno de los ocho destinos de la zona de disponibilidad B recibe el 6,25 % del tráfico.

Esto se debe a que cada nodo del equilibrador de carga puede dirigir el 50 % del tráfico de los clientes únicamente a los destinos de su zona de disponibilidad.

Cuando el equilibrio de carga entre zonas está deshabilitado

Con los equilibradores de carga de aplicaciones, el equilibrio de carga entre zonas siempre está habilitado en el nivel del equilibrador de carga. A nivel del grupo de destino, se puede deshabilitar el equilibrio de carga entre zonas. Para obtener más información, consulte Equilibrio de carga entre zonas en la Guía del usuario de Equilibradores de carga de aplicación.

Con Equilibradores de carga de red y equilibradores de carga de puerta de enlace, el equilibrio de carga entre zonas está deshabilitado de forma predeterminada. Después de crear un equilibrador de carga, puede habilitar o desactivar el equilibrio de carga entre zonas en cualquier momento.

Al crear un Equilibrador de carga clásico, el valor predeterminado para el equilibrio de carga entre zonas depende de cómo se crea el equilibrador de carga. Con la API o el CLI, el equilibrio de carga entre zonas está deshabilitado de forma predeterminada. Con el AWS Management Console, la opción para habilitar el equilibrio de carga entre zonas está seleccionada de forma predeterminada. Después de crear un Equilibrador de carga clásico, puede habilitar o desactivar el equilibrio de carga entre zonas en cualquier momento. Para obtener más información, consulte Habilitar el equilibrio de carga entre zonas en la Guía del usuario de Equilibradores de carga clásicos.

Cambio de zona

El cambio de zona es una capacidad del Controlador de recuperación de aplicaciones de Amazon Route 53 (Route 53 ARC). Con el cambio de zona, puede alejar un recurso del equilibrador de carga de una zona de disponibilidad afectada con una sola acción. De esta forma, podrá seguir operando desde otras zonas de disponibilidad en buen estado en una Región de AWS.

Al comenzar un cambio de zona, el equilibrador de carga deja de enviar el tráfico del recurso a la zona de disponibilidad afectada. Route 53 ARC crea el cambio de zona de inmediato. Sin embargo, completar las conexiones existentes y en curso en la zona de disponibilidad afectada puede tardar un tiempo, por lo general unos minutos. Para obtener más información, consulte Cómo funciona un cambio de zona: comprobaciones de estado y direcciones IP de zona en la Guía para desarrolladores del Controlador de recuperación de aplicaciones de Amazon Route 53.

Los cambios de zona solo se admiten en los Equilibradores de carga de aplicación y en los Equilibradores de carga de red con el equilibrio de carga entre zonas desactivado. Si activa el equilibrio de carga entre zonas, no podrá iniciar un cambio de zona. Para obtener más información, consulte Recursos compatibles con los cambios de zona en la Guía para desarrolladores del Controlador de recuperación de aplicaciones de Amazon Route 53.

Antes de utilizar un cambio de zona, consulte lo siguiente:

  • El equilibrio de carga entre zonas no se admite con cambios de zona. Debe desactivar el equilibrio de carga entre zonas para utilizar esta capacidad.

  • El cambio de zona no se admite cuando se utiliza un Equilibrador de carga de aplicación como punto de conexión del acelerador en AWS Global Accelerator.

  • Puede comenzar un cambio de zona para un equilibrador de carga específico solo para una zona de disponibilidad única. No puede comenzar un cambio de zona para varias zonas de disponibilidad.

  • AWS elimina de forma proactiva las direcciones IP del balanceador de carga zonal del DNS cuando varios problemas de infraestructura afectan a los servicios. Compruebe siempre la capacidad actual de la zona de disponibilidad antes de comenzar un cambio de zona. Si sus equilibradores de carga tienen desactivado el equilibrio de carga entre zonas y utiliza un cambio de zona para eliminar la dirección IP del equilibrador de carga de zona, la zona de disponibilidad afectada por el cambio de zona también pierde la capacidad de destino.

  • Cuando un Equilibrador de carga de aplicación sea el destino de un Equilibrador de carga de red, comience siempre el cambio de zona desde el Equilibrador de carga de red. Si comienza un cambio de zona desde el Equilibrador de carga de aplicación, el Equilibrador de carga de red no reconoce el cambio y continúa enviando tráfico al Equilibrador de carga de aplicación.

A fin de obtener más información y orientación, consulte Prácticas recomendadas con los cambios de zona de Route 53 ARC en la Guía para desarrolladores del Controlador de recuperación de aplicaciones de Amazon Route 53.

Enrutamiento de solicitudes

Antes de que un cliente envíe una solicitud al equilibrador de carga, resuelve el nombre de dominio de este último utilizando un servidor de sistema de nombres de dominio (DNS). Amazon controla la entrada de DNS, ya que los equilibradores de carga se encuentran en el dominio amazonaws.com. Los servidores DNS de Amazon devuelven una o varias direcciones IP al cliente. Estas son las direcciones IP de los nodos del equilibrador de carga. Con los Equilibradores de carga de redes, Elastic Load Balancing crea una interfaz de red para cada zona de disponibilidad que habilite y la utiliza para obtener una dirección IP estática. Si lo desea, puede asociar una dirección IP elástica a cada interfaz de red al crear el Equilibrador de carga de red.

A medida que el tráfico de la aplicación cambia, Elastic Load Balancing escala el equilibrador de carga y actualiza la entrada de DNS. La entrada de DNS también especifica el time-to-live (TTL) de 60 segundos. Esto ayuda a garantizar que las direcciones IP se puedan reasignar rápidamente en respuesta al tráfico cambiante.

El cliente determina qué dirección IP se debe usar para enviar solicitudes al equilibrador de carga. El nodo de equilibrador de carga que recibe la solicitud selecciona un destino registrado en buen estado y le envía la solicitud a ese destino utilizando su dirección IP privada.

Para obtener más información, consulte Enrutamiento del tráfico a un equilibrador de carga de ELB en la Guía para desarrolladores de Amazon Route 53.

Algoritmo de direccionamiento

Con los equilibradores de carga de aplicaciones, el nodo del equilibrador de carga que recibe la solicitud realiza el siguiente proceso:

  1. Evalúa las reglas del oyente en orden de prioridad para determinar qué regla se va a aplicar.

  2. Selecciona un destino del grupo de destino para la acción de regla mediante el uso del algoritmo de direccionamiento configurado para el grupo de destino. El algoritmo de enrutamiento predeterminado es de turno rotativo. El enrutamiento se lleva a cabo de manera independiente para cada grupo de destino, aunque un destino se haya registrado en varios grupos de destino.

Con los Equilibradores de carga de red, el nodo del equilibrador de carga que recibe la conexión utiliza el siguiente proceso:

  1. Selecciona un destino del grupo de destino para la regla predeterminada mediante un algoritmo hash de flujo. Basa el algoritmo en:

    • El protocolo.

    • La dirección IP de origen y el puerto de origen.

    • La dirección IP de destino y el puerto de destino.

    • El número de secuencia TCP.

  2. Direcciona cada conexión TCP individual a un único destino durante la conexión. Las conexiones TCP desde un cliente tienen distintos puertos de origen y números de secuencia y se pueden dirigir a diferentes destinos.

Con los Equilibradores de carga clásicos, el nodo del equilibrador de carga que recibe la solicitud selecciona una instancia registrada del siguiente modo:

  • Usa el algoritmo de direccionamiento de turno rotativo para oyentes TCP.

  • Usa el algoritmo de direccionamiento de solicitudes menos pendientes para oyentes HTTP y HTTPS.

Conexiones HTTP

Los Equilibradores de carga clásicos utilizan conexiones preabiertas, pero los equilibradores de carga de aplicaciones no. Tanto los Equilibradores de carga clásicos como los equilibradores de carga de aplicaciones utilizan la multiplexación de conexiones. Esto significa que las solicitudes de varios clientes en varias conexiones frontend se pueden dirigir a un destino determinado a través de una única conexión backend. El multiplexado de conexión mejora la latencia y reduce la carga de sus aplicaciones. Para evitar el multiplexado de conexión, deshabilite los encabezados keep-alive de HTTP mediante la configuración del encabezado Connection: close en sus respuestas HTTP.

Los equilibradores de carga de aplicaciones y los Equilibradores de carga clásicos admiten HTTP canalizado en las conexiones front-end. Sin embargo, no admiten HTTP canalizado en las conexiones backend.

Los balanceadores de carga de aplicaciones admiten los siguientes métodos de solicitud HTTP: GET, HEAD, POST, PUT, DELETE, OPTIONS y PATCH.

Los equilibradores de carga de aplicaciones admiten los siguientes protocolos en las conexiones frontend: HTTP/0.9, HTTP/1.0, HTTP/1.1 y HTTP/2. Puede utilizar HTTP/2 solo con los oyentes HTTPS y enviar hasta 128 solicitudes en paralelo mediante una conexión HTTP/2. Los balanceadores de carga de aplicaciones también admiten actualizaciones de conexión de HTTP a. WebSockets Sin embargo, si hay una actualización de la conexión, las AWS WAF integraciones y las reglas de enrutamiento de los oyentes de Application Load Balancer ya no se aplican.

De forma predeterminada, los equilibradores de carga de aplicaciones utilizan HTTP/1.1 en las conexiones de backend (el equilibrador de carga se dirige al destino registrado). Sin embargo, se puede usar la versión del protocolo para enviar la solicitud a los destinos mediante HTTP/2. Para obtener más información, consulte las versiones de protocolo. De forma predeterminada, el encabezado de keep-alive se admite en las conexiones de backend. Si las solicitudes HTTP/1.0 de los clientes no tienen un encabezado de host, el equilibrador de carga lo genera para las solicitudes HTTP/1.1 enviadas a través de las conexiones backend. El encabezado de host contiene el nombre de DNS del equilibrador de carga.

Los Equilibradores de carga clásicos admiten los siguientes protocolos en las conexiones frontend (del cliente al equilibrador de carga): HTTP/0.9, HTTP/1.0 y HTTP/1.1. Utilizan HTTP/1.1 en las conexiones backend (del equilibrador de carga al destino registrado). De forma predeterminada, el encabezado de keep-alive se admite en las conexiones de backend. Si las solicitudes HTTP/1.0 de los clientes no tienen un encabezado de host, el equilibrador de carga lo genera para las solicitudes HTTP/1.1 enviadas a través de las conexiones backend. El encabezado de host contiene la dirección IP del nodo del equilibrador de carga.

Encabezados HTTP

Los equilibradores de carga de aplicaciones y los Equilibradores de carga clásicos agregan automáticamente los encabezados X-Forwarded-For, X-Forwarded-Proto y X-Forwarded-Port a la solicitud.

Los equilibradores de carga de aplicaciones convierten los nombres de host de los encabezados de los hosts HTTP a letras minúsculas antes de enviarlos a los destinos.

Para las conexiones frontend que utilizan HTTP/2, los nombres de encabezado están en minúsculas. Antes de la solicitud se envía en el destino mediante HTTP/1.1, los siguientes nombres de encabezado se convierten en una combinación: X-Forwarded-For, X-Forwarded-Proto, X-Forwarded-Port, Host, X-Amzn-Trace-Id, Upgradey Connection. Todos los demás nombres de encabezado están en minúsculas.

Los Equilibradores de carga de aplicación y Equilibradores de carga clásicos respetan el encabezado de conexión de la solicitud del cliente entrante después de devolver la respuesta al cliente a través del proxy.

Cuando los equilibradores de carga de aplicaciones y los Equilibradores de carga clásicos que utilizan HTTP/1.1 reciben el encabezado Expect: 100-Continue, responden inmediatamente con HTTP/1.1 100 Continue sin probar la longitud del encabezado. El encabezado de solicitud Expect: 100-Continue no se reenvía a sus destinos.

Cuando se usa HTTP/2, los equilibradores de carga de aplicaciones no admiten el encabezado Expect: 100-Continue en las solicitudes de los clientes. El Equilibrador de carga de aplicación no responderá con HTTP/2 100 Continue ni reenviará este encabezado a sus destinos.

Límites de los encabezados HTTP

Los siguientes límites de tamaño para los Equilibradores de carga de aplicación son límites invariables que no se pueden cambiar.

  • Línea de solicitud: 16 K

  • Encabezado único: 16 K

  • Encabezado de solicitud completo: 32 K

  • Encabezado de solicitud completo: 64 K

Esquema del equilibrador de carga

Al crear un equilibrador de carga, debe decidir si va a ser un equilibrador de carga interno o va a estar expuesto a Internet.

Los nodos de un equilibrador de carga expuesto a Internet tienen direcciones IP públicas. El nombre de DNS de un equilibrador de carga expuesto a Internet se puede resolver públicamente para obtener las direcciones IP públicas de los nodos. Por tanto, los equilibradores de carga expuestos a Internet pueden dirigir las solicitudes de los clientes a través de Internet.

Los nodos de un equilibrador de carga interno solo tienen direcciones IP privadas. El nombre de DNS de un equilibrador de carga interno se puede resolver para obtener las direcciones IP privadas de los nodos. Por lo tanto, los equilibradores de carga internos solo puede direccionar las solicitudes de los clientes que tienen acceso a la VPC para el equilibrador de carga.

Tanto los equilibradores de carga expuestos a Internet como los internos direccionan las solicitudes a los destinos mediante direcciones IP privadas. Por lo tanto, los destinos no requieren direcciones IP públicas para recibir las solicitudes desde un equilibrador de carga, ya sea interno o expuesto a Internet.

Si la aplicación tiene varios niveles, puede diseñar una arquitectura que utilice tanto equilibradores de carga expuestos a Internet como internos. Por ejemplo, esto es así cuando la aplicación utiliza servidores web que deben conectarse a Internet y servidores de base de datos que solo se conectan a los servidores web. Cree un equilibrador de carga expuesto a Internet y registre los servidores web en él. Cree un equilibrador de carga interno y registre los servidores de aplicaciones en él. Los servidores web reciben las solicitudes del equilibrador de carga expuesto a Internet y envían las solicitudes de los servidores de aplicaciones al equilibrador de carga interno. Los servidores de aplicaciones recibirán las solicitudes del equilibrador de carga interno.

MTU de red para su equilibrador de carga

La unidad de transmisión máxima (MTU) determina el tamaño, en bytes, del mayor paquete que se puede enviar a través de la red. Cuanto mayor sea la MTU de una conexión, mayor cantidad de datos se podrán transferir en un solo paquete. Los marcos Ethernet consisten del paquete, o los datos reales que está enviando, y de la información de sobrecarga de red que lo rodea. El tráfico enviado a través de una puerta de enlace de Internet tiene una MTU de 1500. Esto significa que si un paquete tiene más de 1500 bytes, se fragmenta para enviarlo mediante varios marcos, o se descarta si Don't Fragment está establecido en el encabezado de IP.

El tamaño de la MTU en los nodos del equilibrador de carga no se puede configurar. Los marcos gigantes (MTU 9001) son estándar en todos los nodos de equilibradores de carga para los equilibradores de carga de aplicaciones, Equilibradores de carga de red y Equilibradores de carga clásicos. Los equilibradores de carga de puerta de enlace admiten 8500 MTU. Para obtener más información, consulte Unidad de transmisión máxima (MTU) en la Guía del usuario de equilibradores de carga de puerta de enlace.

La MTU de la ruta es tamaño máximo del paquete admitido en la ruta entre el host de origen y el host receptor. La detección de la MTU de la ruta (PMTUD) se utiliza para determinar la MTU de la ruta entre dos dispositivos. La detección de la MTU de la ruta es especialmente importante si el cliente o el destino no admiten marcos gigantes.

Cuando un host envía un paquete mayor que la MTU del host receptor o que es mayor que la MTU de un dispositivo a lo largo de la ruta, el host o dispositivo receptor descarta el paquete y, a continuación, devuelve el siguiente mensaje ICMP: Destination Unreachable: Fragmentation Needed and Don't Fragment was Set (Type 3, Code 4). Esto indica al host transmisor que divida la carga útil en varios paquetes más pequeños y los retransmita.

Si se siguen descartando paquetes con un tamaño superior al de la MTU de la interfaz de cliente o de destino, es probable que la detección de la MTU de ruta (PMTUD) no funcione. Para evitarlo, asegúrese de que la detección de la MTU de ruta funcione de principio a fin y de que haya habilitados marcos gigantes en sus clientes y destinos. Para obtener más información sobre la detección de la MTU de ruta y sobre la activación de marcos gigantes, consulte Detección de la MTU de ruta en la Guía del usuario de Amazon EC2.