¿Cómo puedo solucionar los problemas de permanencia de sesiones del equilibrador de carga de aplicación?

6 minutos de lectura
0

Tengo un equilibrador de carga de aplicación que usa sesiones de permanencia basada en la duración o permanencia basada en aplicaciones. El equilibrador de carga está configurado para dirigir todas las solicitudes de sesión de usuario al mismo objetivo. Sin embargo, las solicitudes de sesión de usuario se están dirigiendo a objetivos diferentes.

Descripción corta

Las sesiones permanentes utilizan cookies para ayudar al cliente a mantener una conexión con la misma instancia durante la vida útil de una cookie. El uso de sesiones permanentes configura un equilibrador de carga para vincular las sesiones de los usuarios a una instancia específica. Esto significa que todas las solicitudes de un usuario durante una sesión se envían a la misma instancia. De todas formas, esta suposición sobre la conexión puede provocar desequilibrios con el tiempo.

Una sesión persistente puede fallar si:

  • El objetivo registrado no generó una cookie.
  • El cliente no devolvió la cookie en el encabezado de la solicitud.
  • Las cookies no tienen el formato correcto.
  • La sesión basada en la duración ha finalizado.
  • La solicitud de sesión pasa por varios equilibradores de carga.
  • El estado de salud del objetivo cambió a mal estado.
  • Un servicio de AWS desactivó la permanencia.

Nota: Antes de empezar, asegúrese de revisar la sección de requisitos y consideraciones en Sesiones permanentes para su Application Load Balancer.

Resolución

Permanencia de sesiones basada en aplicaciones

1.    Compruebe si hay errores HTTP con el equilibrador de carga. Para obtener instrucciones, consulte Solución de problemas de sus Application Load Balancers.

2.    Para comprobar si hay cookies colocadas en la instancia de backend o en el equilibrador de carga, ejecute un comando curl similar al siguiente:

Nota: Reemplace el nombre de DNS por el nombre del equilibrador de carga.

[ec2-user@ip-172-31-22-85 ~]$ curl -vko /dev/null internal-EXAMPLE-ELB-1430759361.eu-central-1.elb.amazonaws.com

Nota: La utilidad curl de Linux también se puede instalar en el sistema operativo Windows.

Resultado de ejemplo:

...

< Set-Cookie: PHPSESSID=k0qu6t4e35i4lgmsk78mj9k4a4; path=/

< Set-Cookie:

AWSALBAPP-0=438DC7A50C516D797550CF7DE2A7DBA19D6816D5E6FB20329CD6AEF2B40030B12FF2839757A60E2330136A2182D27D049FB9D887FBFE9E80FB0724130FB3A86A4B0BAC296FDEB9E943EC9272FF52F5A8AEF373DF33;PATH=/

...

3.    Para verificar que el objetivo registrado haya generado una cookie de aplicación, envíe una solicitud HTTP a la dirección IP de la instancia similar a la siguiente:

[ec2-user@ip-172-31-22-85 ~]$ curl -vko /dev/null 172.31.30.168

Resultado de ejemplo:

...

< Set-Cookie: PHPSESSID=5pq74110nuir60kpapj04mglg4; path=/

...

4.    Verifique que el nombre de la cookie generada por el objetivo registrado sea el mismo nombre que la cookie del equilibrador de carga de los pasos 2 y 3.

5.    Si el objetivo generó una cookie de aplicación y el equilibrador de carga generó una cookie de AWSALBAPP, asegúrese de que el cliente envíe ambas cookies en las solicitudes posteriores. Si el cliente no incluye ni la cookie de aplicación ni la cookie AWSELB, se produce un error en la permanencia. Para verificar que el cliente envía tanto la cookie de aplicación como las cookies de AWSALBAPP, realice una captura de paquetes en el cliente. Utilice la utilidad tcpdump o Wireshark para el análisis, o utilice la herramienta de depuración web del navegador para recuperar la información de las cookies en el encabezado de la solicitud.

Nota: Si trabaja con AWS Support, puede recopilar esta información generando un archivo HAR. Los archivos HAR pueden capturar información confidencial, como nombres de usuario, contraseñas y claves, así que asegúrese de eliminar cualquier información confidencial de un archivo HAR.

6.    Compruebe la instancia de backend a la que el equilibrador de carga dirigió la solicitud. Puede mostrar el ID de la instancia con los metadatos de la instancia ejecutando un script similar al siguiente:

<?php $instance_id =file_get_contents('http://169.254.169.254/latest/meta-data/instance-id');
echo "instance id = " . $instance_id . "\\xA";
?>

7.    Revise los registros de acceso de su Elastic Load Balancing para comprobar si las solicitudes del mismo usuario se dirigen a objetivos registrados diferentes. Para obtener instrucciones, consulte Registros de acceso para su Application Load Balancer.

8.    Verifique que todos los objetivos del grupo objetivo en el que está habilitada la permanencia esté en buen estado. Si el estado del objetivo cambia a “mal estado”, la permanencia se interrumpe y el equilibrador de carga deja de dirigir las solicitudes a ese objetivo. A continuación, el equilibrador de carga selecciona automáticamente un nuevo objetivo en buen estado y establece una sesión persistente. El equilibrador de carga sigue dirigiendo las solicitudes al nuevo objetivo, incluso si el estado es “mal estado”. Para obtener más información sobre las comprobaciones de estado, consulte Comprobaciones de estado para sus grupos objetivo.

9.    Compruebe si hay algún servicio de AWS, por ejemplo, Amazon Elastic Kubernetes Service (Amazon EKS), que pueda haber desactivado la permanencia del equilibrador de carga. Compruebe Ver los eventos de CloudTrail con el nombre de API “ModifyTargetGroupAttributes” y el atributo “stickiness.enabled”.

Permanencia de la sesión basada en la duración

1.    Ejecute un comando similar al siguiente con el nombre DNS del equilibrador de carga para comprobar si hay una cookie de AWSALB en la respuesta:

[ec2-user@ip-172-31-22-85 ~]$ curl -vko /dev/null internal-TESTELB-1430759361.eu-central-1.elb.amazonaws.com

Resultado de ejemplo:

...< Set-Cookie: 
AWSALB=438DC7A50C516D797550CF7DE2A7DBA19D6816D5E6FB20329CD6AEF2B40030B12FF2839757A60E2330136A2182D27D049FB9D887FBFE9E80FB0724130FB3A86A4B0BAC296FDEB9E943EC9272FF52F5A8AEF373DF33;PATH=/
...

Nota: Si no hay una cookie de AWSALB en la respuesta, no hay permanencia entre el cliente y la instancia de backend.

2.    Si el equilibrador de carga generó una cookie de AWSALB, asegúrese de que el cliente envíe esta cookie en solicitudes posteriores. Si el cliente no incluye la cookie de AWSALB, la permanencia no funciona. Para comprobar que el cliente envía la cookie de AWSALB, realice una captura de paquetes en el cliente. Utilice la utilidad tcpdump o Wireshark para el análisis, o utilice la herramienta de depuración web del navegador para recuperar la información de las cookies en el encabezado de la solicitud.

Nota: Si trabaja con AWS Support, puede recopilar esta información generando un archivo HAR. Los archivos HAR pueden capturar información confidencial, como nombres de usuario, contraseñas y claves, así que asegúrese de eliminar cualquier información confidencial de un archivo HAR.

3.    Compruebe la duración configurada en el equilibrador de carga. Si se supera el vencimiento de la cookie, las sesiones del cliente ya no se atienen al objetivo registrado hasta que el equilibrador de carga emita una nueva cookie.

4.    Si su solicitud pasa por varios equilibradores de carga, verifique que la permanencia esté habilitada solo en un equilibrador de cargas. Si más de un equilibrador de carga genera una cookie, el equilibrador de carga reemplaza la cookie original y se produce un error en la permanencia.

Para los Classic Load Balancers, consulte ¿Cómo puedo solucionar los problemas de la característica de permanencia de sesión del Classic Load Balancer?


Información relacionada

¿Por qué motivo Elastic Load Balancing está direccionando desproporcionadamente el tráfico del equilibrador de carga?

Configurar sesiones permanentes para el Classic Load Balancer

¿Cómo configuro grupos objetivo ponderados para mi Application Load Balancer?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años