¿Cómo soluciono los problemas de persistencia de la sesión del Equilibrador de carga de aplicación?

7 minutos de lectura
0

Tengo un equilibrador de carga de aplicación que usa sesiones de persistencia basadas en la duración o en las aplicaciones. El equilibrador de carga se ha configurado para dirigir todas las solicitudes de sesión de usuario al mismo destino. Sin embargo, quiero que las solicitudes de sesión de los usuarios se dirijan a diferentes destinos.

Descripción corta

Las sesiones persistentes utilizan cookies para que el cliente pueda mantener una conexión en el mismo destino durante la vida útil de una cookie. Las sesiones persistentes configuran un equilibrador de carga para vincular las sesiones de usuario a un destino específico. Esto significa que todas las solicitudes de un usuario durante una sesión se envían al mismo destino. Sin embargo, esta suposición sobre la conexión puede provocar desequilibrios con el tiempo.

Una sesión persistente puede devolver un error por los siguientes motivos:

  • El destino registrado no generó ninguna 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 terminado.
  • La solicitud de sesión pasa por varios equilibradores de carga.
  • El estado del destino cambió y no funciona correctamente.
  • Un servicio de AWS desactivó la persistencia.

Nota: Antes de empezar, asegúrese de revisar las secciones de requisitos y consideraciones de las sesiones persistentes del equilibrador de carga de aplicación.

Resolución

Persistencia de la sesión basada en aplicaciones

  1. Compruebe si hay errores de HTTP con el equilibrador de carga. Para obtener instrucciones, consulte Solucionar problemas con los equilibradores de carga de aplicación.

  2. Para comprobar si hay cookies en la instancia de backend o en el equilibrador de carga, ejecute un comando curl similar al siguiente. Sustituya 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: También puede instalar la utilidad curl de Linux en el sistema operativo (SO) Windows. Para obtener más información, consulte curl 8.10.1 para Windows en el sitio web de curl.

    El resultado del comando curl es similar al siguiente:

    ...
    < Set-Cookie: PHPSESSID=k0qu6t4e35i4lgmsk78mj9k4a4; path=/
    
    < Set-Cookie:
    
    AWSALBAPP-0=438DC7A50C516D797550CF7DE2A7DBA19D6816D5E6FB20329CD6AEF2B40030B12FF2839757A60E2330136A2182D27D049FB9D887FBFE9E80FB0724130FB3A86A4B0BAC296FDEB9E943EC9272FF52F5A8AEF373DF33;PATH=/
    
    ...
  3. Para comprobar que el destino registrado generó 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

    El resultado del comando tiene un aspecto similar al siguiente:

    ...
    < Set-Cookie: PHPSESSID=5pq74110nuir60kpapj04mglg4; path=/
    
    ...
  4. Compruebe que el nombre de la cookie que generó el destino registrado sea el nombre de la cookie del equilibrador de carga de los pasos 2 y 3.

  5. Cuando el destino genera una cookie de aplicación y el equilibrador de carga genera una cookie AWSALBAPP, asegúrese de que el cliente envíe ambas cookies en las solicitudes posteriores. Si el cliente no incluye la aplicación ni la cookie AWSELB, se produce un error de persistencia. Para comprobar que el cliente envía tanto la aplicación como la cookie AWSALBAPP, realice una captura de paquetes en el cliente. Para recuperar la información de las cookies en el encabezado de la solicitud, use una de las siguientes opciones:

    tcpdump del sitio web tcpdump
    Utilidad Wireshark del sitio web de Wireshark
    Herramienta de depuración web del navegador

    Nota: Si trabaja con AWS Support, cree un archivo HAR para recopilar esta información. Como los archivos HAR pueden capturar información confidencial, como nombres de usuario, contraseñas y claves, asegúrese de eliminar la información confidencial de los archivos HAR.

  6. Compruebe la instancia de backend a la que el equilibrador de carga dirigió la solicitud. Para usar los metadatos de la instancia y mostrar el ID de instancia, ejecute 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. Para comprobar si las solicitudes del mismo usuario se dirigen a diferentes destinos registrados, revise sus registros de acceso de Elastic Load Balancing (ELB). Para obtener instrucciones, consulte los registros de acceso del equilibrador de carga de aplicación.

  8. Verifique que el estado de todos los destinos del grupo de destinos en los que está activada la persistencia sea correcto. Si el estado del destino cambia a No funciona correctamente, se interrumpe la persistencia y el equilibrador de carga no dirige las solicitudes a ese destino. A continuación, el equilibrador de carga selecciona automáticamente un nuevo destino que funcione correctamente y establece una sesión persistente.. El equilibrador de carga continúa dirigiendo las solicitudes al nuevo destino incluso con el estado No funciona correctamente. Para obtener más información sobre las comprobaciones de estado, consulte Comprobaciones de estado de los grupos de destino del Equilibrador de carga de aplicación.

  9. Compruebe si hay servicios de AWS, como Amazon Elastic Kubernetes Service (Amazon EKS), que podrían haber desactivado la persistencia del equilibrador de carga. Consulte el historial de eventos de CloudTrail. Use el nombre de API ModifyTargetGroupAttributes y el atributo stickiness.enabled.

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

  1. Para comprobar si hay una cookie AWSALB, ejecute un comando curl similar al siguiente. Asegúrese de usar el nombre DNS del equilibrador de carga:

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

    El resultado del comando curl es similar al siguiente:

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

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

  2. Si el equilibrador de carga generó una cookie AWSALB, asegúrese de que el cliente envía esa cookie en solicitudes posteriores. Si el cliente no incluye la cookie AWSALB, la persistencia no funcionará. Para confirmar que el cliente envía la cookie AWSALB, realice una captura de paquetes en el cliente. Para recuperar la información de las cookies en el encabezado de la solicitud, use una de las siguientes opciones:

    tcpdump del sitio web tcpdump
    Utilidad Wireshark del sitio web de Wireshark
    Herramienta de depuración web del navegador

    Nota: Si trabaja con AWS Support, cree un archivo HAR para recopilar esta información. Como los archivos HAR pueden capturar información confidencial, como nombres de usuario, contraseñas y claves, asegúrese de eliminar la información confidencial de los archivos HAR.

  3. Compruebe la duración configurada en el equilibrador de carga. Si la fecha de caducidad de la cookie ya ha pasado, las sesiones del cliente dejarán de ser persistentes en el destino registrado hasta que el equilibrador de carga emita una nueva cookie.

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

En el caso de los equilibradores de carga clásicos, consulte ¿Cómo puedo solucionar problemas relacionados con la característica de persistencia de sesión del equilibrador de carga clásico?

Información relacionada

¿Por qué Elastic Load Balancing dirige el tráfico del equilibrador de carga de manera desigual?

Configuración de sesiones persistentes en el equilibrador de carga clásico

¿Cómo configuro los grupos de destino ponderados en mi equilibrador de carga de aplicación?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 9 meses