¿Por qué Elastic Load Balancing enruta el tráfico del equilibrador de carga de manera desigual?
He configurado mi equilibrador de carga para que enrute el tráfico de manera equitativa entre las instancias o entre las zonas de disponibilidad. Sin embargo, Elastic Load Balancing (ELB) dirige más tráfico a una instancia o zona de disponibilidad que a otras. ¿Por qué sucede esto y cómo puedo solucionarlo?
Descripción corta
Puede ser que ELB dirija el tráfico de manera desigual a sus objetivos si:
- Los clientes están enviando las solicitudes a una dirección IP incorrecta de un nodo del equilibrador de carga con un registro DNS que tiene un TTL caducado.
- Las sesiones persistentes (afinidad de sesión) están habilitadas para el equilibrador de carga. Las sesiones persistentes utilizan cookies para ayudar al cliente a mantener una conexión con la misma instancia durante la vida útil de la cookie, lo que puede provocar desequilibrios con el tiempo.
- Las instancias en buen estado disponibles no se distribuyen de manera uniforme entre las zonas de disponibilidad.
- Las instancias de un tipo de capacidad específico no se distribuyen por igual entre las zonas de disponibilidad.
- Hay conexiones TCP de larga duración entre los clientes y las instancias.
- La conexión utiliza un WebSocket.
Resolución
Confirmar el desequilibrio de tráfico
Analice los registros de acceso al ELB, si están disponibles, para confirmar el desequilibrio de tráfico. Utilice las herramientas de línea de comandos para encontrar la cantidad de solicitudes que el equilibrador de carga envía a aplicaciones específicas.
Para equilibradores de carga de aplicaciones:
awk '{print $5}' *.log | awk -F ":" '{print $1}' | sort | uniq -c | sort -r
Para equilibradores de carga clásicos:
awk '{print $4}' *.log | awk -F ":" '{print $1}' | sort | uniq -c | sort -r
ELB agrega archivos individuales para cada nodo de ELB a su bucket. Puede comparar el número de líneas de los archivos de registro de acceso durante un periodo de tiempo específico.
Vaciar la memoria caché de DNS
El enrutamiento basado en entradas de DNS desactualizadas produce un patrón RequestCount desequilibrado en las diferentes zonas de disponibilidad. Para obtener más información, consulte Métricas del equilibrador de carga de aplicaciones o Métricas del equilibrador de carga clásico. Vacíe la memoria caché de DNS de su cliente para asegurarse de que utiliza los registros DNS actuales para los nodos del equilibrador de carga.
Nota: Cuando se habilita el equilibrio de carga entre zonas, el equilibrador de carga puede seguir equilibrando las solicitudes de manera uniforme a nivel de la instancia.
Para los clientes de Linux que utilicen nscd para el almacenamiento en caché de DNS, ejecute uno de los siguientes comandos:
sudo /etc/init.d/nscd restart
# service nscd restart
# service nscd reload
Para los clientes de Linux que utilicen dnsmasq para el almacenamiento en caché de DNS, ejecute uno de los siguientes comandos:
$ sudo /etc/init.d/dnsmasq restart
# service dnsmasq restart
Para los clientes de Linux que utilicen BIND para el almacenamiento en caché de DNS, ejecute uno de los siguientes comandos:
# /etc/init.d/named restart
# rndc restart
# rndc exec
Para los clientes de Windows, ejecute el siguiente comando:
ipconfig /flushdns
Nota: Si ha borrado la memoria caché de DNS de su cliente pero sigue teniendo problemas de almacenamiento en caché, asegúrese de que la aplicación cliente no almacene registros DNS en caché.
Comprobar la configuración de las sesiones persistentes
Si utiliza la persistencia de la sesión basada en la duración, configure un tiempo de caducidad de las cookies adecuado para su caso de uso específico. Para obtener más información, consulte:
- Sesiones persistentes (equilibradores de carga de aplicaciones)
- Persistencia de la sesión basada en la duración (equilibradores de carga clásicos)
Si configura la persistencia de la sesión a partir de aplicaciones individuales, utilice cookies de sesión en lugar de cookies persistentes siempre que sea posible. Para obtener más información, consulte Permanencia de la sesión controlada por la aplicación (equilibradores de carga clásicos).
Comprobar la distribución de instancias en buen estado en todas las zonas de disponibilidad
Si hay un número desigual de instancias en buen estado disponibles en sus zonas de disponibilidad y el equilibrio de carga entre zonas está desactivado, ELB debe equilibrar las solicitudes entre un menor número de instancias en las zonas de disponibilidad afectadas. Las instancias en buen estado restantes procesan un mayor número de solicitudes para compensar, lo que puede afectar negativamente al rendimiento.
Nota: Un desequilibrio de carga de tráfico entre instancias o zonas de disponibilidad no significa necesariamente que la utilización de los recursos también esté desequilibrada. Por ejemplo, puede producirse un desequilibrio cuando una o más instancias que están detrás de un equilibrador de carga procesan las solicitudes más rápido que las demás.
Mantenga el mismo número de instancias en cada zona de disponibilidad habilitada. Para añadir más instancias como destinos del equilibrador de carga, consulte:
- Registro de objetivos con su grupo objetivo (equilibradores de carga de aplicaciones)
- Registro o anulación de registro de los objetivos (equilibradores de carga de red)
- Registro o anulación de registro de instancias de EC2 para su equilibrador de carga clásico
Para los equilibradores de carga clásicos y los equilibradores de carga de red, considere habilitar el equilibrio de carga entre zonas para distribuir las solicitudes a nivel de instancia en lugar de hacerlo a nivel de zona de disponibilidad. Para obtener más información, consulte Equilibrio de carga entre zonas (equilibradores de carga de red) o Configuración del equilibrio de carga entre zonas para su equilibrador de carga clásico. El equilibrio de carga entre zonas siempre está activado para los equilibradores de carga de aplicaciones.
Comprobar la distribución del tipo de instancia
Un equilibrador de carga clásico con agentes de escucha HTTP o HTTPS podría dirigir más tráfico a tipos de instancias de mayor capacidad. Esta distribución tiene como objetivo evitar que los tipos de instancia de menor capacidad tengan demasiadas solicitudes pendientes. Para obtener más información, consulte Tipos de instancias. Se recomienda utilizar configuraciones y tipos de instancias similares para reducir la probabilidad de que se produzcan brechas de capacidad y desequilibrios de tráfico.
También puede producirse un desequilibrio de tráfico si tiene instancias de capacidades similares que se ejecutan en distintas imágenes de máquina de Amazon (AMI). En este escenario, es deseable un desequilibrio del tráfico en favor de tipos de instancias de mayor capacidad.
Comprobar si hay conexiones TCP de larga duración
Elastic Load Balancing enruta el tráfico TCP mediante un algoritmo de rotación continua. Las conexiones TCP de larga duración entre clientes e instancias provocan una distribución desigual de la carga de tráfico por diseño. Como resultado, las instancias nuevas tardan más en alcanzar el equilibrio de conexión. Compruebe las métricas para ver si hay conexiones TCP de larga duración que puedan estar causando problemas. Tenga en cuenta también que con los agentes de escucha TCP, el equilibrador de carga distribuye el tráfico solo a nivel de conexión. Esto significa, por ejemplo, que los clientes que reutilizan conexiones con frecuencia para enviar y recibir varias solicitudes HTTP pueden producir un tráfico desequilibrado a nivel de instancia. Considere la posibilidad de cambiar a un equilibrador de carga de capa 7 si su aplicación admite protocolos de red de capas superiores, como HTTP, HTTPS, WebSocket o HTTP2.
Compruebe los patrones requestCount de su equilibrador de carga y otras métricas relevantes. Para obtener más información, consulte:
- Métricas del equilibrador de carga de aplicaciones
- Métricas de CloudWatch para su equilibrador de carga de red
- Métricas del equilibrador de carga clásico
Comprobar las conexiones WebSocket
Los clientes que utilicen equilibradores de carga con conexiones WebSocket utilizan una conexión 1:1 entre el cliente y el objetivo. Esta conexión permanece pegada al objetivo mientras dure la conexión a WebSocket, lo que provoca una distribución desigual del tráfico. Los equilibradores de carga de aplicaciones proporcionan soporte nativo para WebSockets. Solo las solicitudes HTTP nuevas que se actualicen a WebSockets se dirigen a los nuevos objetivos. Los WebSockets también funcionan con los equilibradores de carga clásicos y los equilibradores de carga de red con un agente de escucha de capa 4.
Para obtener más información, consulte Configuración del agente de escucha.
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace un año