Comment puis-je dépanner la fonction de permanence de session de Classic Load Balancer ?

Date de la dernière mise à jour : 30/03/2018

J'ai un Classic Load Balancer avec une permanence de session basée sur la durée ou contrôlée par l'application. L'équilibreur de charge est configuré pour acheminer les sessions HTTP ou HTTPS des clients vers la même instance enregistrée, mais les demandes des clients sont acheminées vers différentes instances enregistrées. Comment puis-je résoudre les problèmes de permanence de session d'Elastic Load Balancer (ELB) ?

Brève description

Par défaut, un Classic Load Balancer achemine chaque demande vers l'instance enregistrée ayant le moins de demandes en attente. L'utilisation de sessions permanentes (affinité de session) configure un équilibreur de charge pour lier les sessions des utilisateurs à une instance spécifique, de sorte que toutes les demandes d'un utilisateur pendant une session sont envoyées à la même instance. Une session permanente peut échouer si :

1.    L'instance enregistrée n'insère pas de cookie d'application.

2.    Le client ne renvoie pas les cookies dans l'en-tête de la demande.

3.    Les cookies insérés par une instance enregistrée ne sont pas formatés correctement.

4.    La période d'expiration spécifiée lors de l'utilisation d'une session permanente basée sur la durée est passée.

5.    La demande HTTP ou HTTPS passe par plus d'un équilibreur de charge dont la permanence est activée.

Remarque : la fonction de permanence de session de l'équilibreur de charge est prise en charge uniquement avec les écouteurs HTTP ou HTTPS.

Solution

Permanence de session contrôlée par l'application

1.    Vérifiez les erreurs HTTP avec votre Classic Load Balancer. Pour plus d'informations, consultez Résolution des problèmes d'un Classic Load Balancer : erreurs HTTP.

2.    Exécutez une commande similaire à la suivante pour le nom DNS de l'équilibreur de charge. Vérifiez la présence de ces deux cookies dans la réponse : 

  • Un cookie d'application est inséré par votre application s'exécutant sur une instance backend.
  • Un cookie AWSELB est inséré par l'équilibreur de charge.

Remarque : avant d'exécuter cette commande, veillez à remplacer le nom DNS par le nom de votre équilibreur de charge.

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

Remarque : l'utilitaire curl est natif de Linux, mais peut également être installé sur Windows.

Voici un exemple de réponse à la commande :

...

< Set-Cookie: PHPSESSID=k0qu6t4e35i4lgmsk78mj9k4a4; path=/
< Set-Cookie: 
AWSELB=438DC7A50C516D797550CF7DE2A7DBA19D6816D5E6FB20329CD6AEF2B40030B12FF2839757A60E2330136A2182D27D049FB9D887FBFE9E80FB0724130FB3A86A4B0BAC296FDEB9E943EC9272FF52F5A8AEF373DF33;PATH=/

...

Remarque : si le cookie AWSELB n'apparaît pas dans la réponse, cela signifie qu'il n'y a pas de permanence entre le client et l'instance backend. 

3.    Vérifiez que l'instance enregistrée insère un cookie d'application en envoyant une demande HTTP directement à l'adresse IP de l'instance enregistrée en exécutant une commande similaire à la suivante : 

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

La commande renvoie une réponse similaire à l'exemple suivant :

...

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

...

4.    Vérifiez que le nom du cookie généré par l'instance enregistrée est le même que le nom du cookie configuré sur l'équilibreur de charge. 

5.    Si les instances enregistrées insèrent un cookie d'application dans leurs réponses et que l'équilibreur de charge insère un cookie AWSELB, assurez-vous que le client envoie ces deux cookies dans les demandes ultérieures. Si le client n'inclut pas le cookie d'application ou le cookie AWSELB, la permanence ne fonctionnera pas. Pour vérifier que le client envoie à la fois le cookie d'application et le cookie AWSELB, faites une capture de paquets sur le client ou utilisez les outils de débogage Web du navigateur pour récupérer les informations du cookie dans l'en-tête de la demande.

6.    Si vous voulez savoir vers quelle instance backend l'équilibreur de charge a acheminé la demande, vous pouvez configurer l'instance backend pour qu'elle affiche l'ID de l'instance à l'aide des métadonnées d'instance en exécutant un script similaire à ce qui suit :

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

7.    Examinez votre journal d'accès ELB pour vérifier si les demandes du même utilisateur ont été acheminées vers différentes instances enregistrées. Pour plus d'informations sur l'examen des journaux d'accès ELB, consultez Journaux d'accès de votre Classic Load Balancer

8.    Vérifiez que le cookie inséré par l'application est formaté correctement pour HTTP.

9.    Si votre demande passe par plusieurs équilibreurs de charge, vérifiez que la permanence est activée sur un seul équilibreur de charge. Si plus d'un équilibreur de charge insère un cookie, il remplace le cookie original et la permanence échoue. 

Permanence de session basée sur la durée

1.    Exécutez une commande similaire à la suivante pour le nom DNS de l'équilibreur de charge afin de vérifier la présence d'un cookie AWSELB dans la réponse : 

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

La commande renvoie une réponse similaire à l'exemple suivant :

...

< Set-Cookie: 
AWSELB=438DC7A50C516D797550CF7DE2A7DBA19D6816D5E6FB20329CD6AEF2B40030B12FF2839757A60E2330136A2182D27D049FB9D887FBFE9E80FB0724130FB3A86A4B0BAC296FDEB9E943EC9272FF52F5A8AEF373DF33;PATH=/

...

Remarque : si le cookie AWSELB n'apparaît pas dans la réponse, cela signifie qu'il n'y a pas de permanence entre le client et l'instance backend.

2.    Si l'équilibreur de charge insère un cookie AWSELB, assurez-vous que le client envoie ce cookie dans les demandes ultérieures. Si le client n'inclut pas le cookie AWSELB, la permanence ne fonctionnera pas. Pour vérifier que le client envoie le cookie AWSELB, faites une capture de paquets sur le client ou utilisez les outils de débogage Web du navigateur pour récupérer les informations du cookie dans l'en-tête de la demande.

3.    Vérifiez la durée configurée sur l'équilibreur de charge. Si la période d'expiration du cookie est passée, les sessions client ne restent plus liées à l'instance enregistrée tant qu'un nouveau cookie n'est pas émis par l'équilibreur de charge.

4.    Si votre demande passe par plusieurs équilibreurs de charge, vérifiez que la permanence est activée sur un seul équilibreur de charge. Si plus d'un équilibreur de charge insère un cookie, il remplace le cookie original et la permanence échoue. 


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?