Nous essayons d'exécuter une configuration assez simple sur Amazon EC2 - plusieurs serveurs HTTP assis derrière un Amazon Elastic Load Balancer (ELB).
Notre domaine est géré dans Route53, et nous avons un enregistrement CNAME configuré pour pointer vers l'ELB.
Nous avons rencontré des problèmes où certains emplacements, mais pas tous, ne peuvent pas se connecter par intermittence à l'équilibreur de charge; il semble que ce soit la résolution du nom de domaine de l'ELB.
Le support d'Amazon nous a informés que l'IP Elastic sous-jacent de l'équilibreur de charge a changé et que le problème est que certains serveurs DNS des FAI n'honorent pas le TTL. Nous ne sommes pas satisfaits de cette explication, car nous avons reproduit le problème en utilisant les propres serveurs DNS d'Amazon à partir d'une instance EC2, ainsi que sur les FAI locaux en Australie et via le serveur DNS de Google ( 8.8.8.8
).
Amazon a également confirmé que pendant la période où nous avons remarqué des temps d'arrêt de certains endroits, le trafic passant par l'ELB était en baisse significative - donc le problème n'est pas avec nos points de terminaison.
Fait intéressant, le domaine semble se résoudre à l'IP correcte sur les serveurs qui ne peuvent pas se connecter - mais la tentative d'établissement d'une connexion TCP échoue.
Toutes les instances attachées à l'ELB ont toujours été saines. Ils sont tous
Quelqu'un sait-il comment procéder pour diagnostiquer ce problème plus en profondeur? Quelqu'un d'autre a-t-il rencontré ce problème avec Elastic Load Balancer?
Merci,
host
utilitaire se résout à la même adresse sur les systèmes où nous pouvons nous connecter et les systèmes où nous ne pouvons pas.Réponses:
J'ai trouvé cette question lors de la recherche sur Google pour diagnostiquer les équilibreurs de charge élastique Amazon (ELB) et je veux y répondre pour toute autre personne comme moi qui a eu ce problème sans beaucoup de conseils.
Propriétés ELB
Les ELB ont des propriétés intéressantes. Par exemple:
REMARQUE: Une autre propriété intéressante mais légèrement moins pertinente est que les ELB n'ont pas été conçus pour gérer les pointes de trafic soudaines. Ils nécessitent généralement 15 minutes de trafic intense avant de se développer ou ils peuvent être préchauffés sur demande via un ticket d'assistance
Dépannage des ELB (manuellement)
Mise à jour: AWS a depuis migré tous les ELB pour utiliser Route 53 pour DNS. De plus, tous les ELB ont désormais un
all.$elb_name
enregistrement qui renverra la liste complète des nœuds pour l'ELB. Par exemple, si votre nom ELB estelb-123456789.us-east-1.elb.amazonaws.com
, vous obtiendrez la liste complète des nœuds en faisant quelque chose commedig all.elb-123456789.us-east-1.elb.amazonaws.com
. Pour les nœuds IPv6,all.ipv6.$elb_name
fonctionne également. De plus, Route 53 est capable de renvoyer jusqu'à 4 Ko de données en utilisant toujours UDP, donc l'utilisation de l'+tcp
indicateur peut ne pas être nécessaire.Sachant cela, vous pouvez faire vous-même un peu de dépannage. Tout d'abord, résolvez le nom ELB en une liste de nœuds (en tant qu'enregistrements A):
L'
tcp
indicateur est suggéré car votre ELB pourrait avoir trop d'enregistrements pour tenir dans un seul paquet UDP. On m'a également dit, mais je n'ai pas personnellement confirmé, qu'Amazon n'affichera que jusqu'à 6 nœuds, sauf si vous effectuez uneANY
requête. L'exécution de cette commande vous donnera une sortie qui ressemble à ceci (rognée pour plus de concision):Maintenant, pour chacun des
A
enregistrements, utilisez par exemplecurl
pour tester une connexion à l'ELB. Bien sûr, vous souhaitez également isoler votre test uniquement sur l'ELB sans vous connecter à vos backends. Une dernière propriété et un fait peu connu sur les ELB:Cela signifie que nous pouvons profiter de ce comportement pour tester uniquement que l'ELB répond:
Si vous voyez,
HTTP/1.1 405 METHOD_NOT_ALLOWED
l'ELB répond avec succès. Vous pouvez également ajuster les délais d'expiration de curl à des valeurs qui vous conviennent.Dépannage des ELB avec elbping
Bien sûr, cela peut devenir assez fastidieux, j'ai donc construit un outil pour automatiser cela appelé elbping . Il est disponible sous forme de gemme rubis, donc si vous avez des rubygèmes, vous pouvez l'installer en faisant simplement:
Vous pouvez maintenant exécuter:
N'oubliez pas que si vous voyez
code=405
cela signifie que l'ELB répond.Prochaines étapes
Quelle que soit la méthode que vous choisissez, vous saurez au moins si les nœuds de votre ELB répondent ou non. Armé de cette connaissance, vous pouvez soit vous concentrer sur le dépannage d'autres parties de votre pile, soit être en mesure de démontrer à AWS que quelque chose ne va pas.
J'espère que cela t'aides!
la source
Le correctif est en fait simple: utilisez un
A
enregistrement plutôt qu'unCNAME
dans Route53.Dans la AWS Management Console, choisissez «Un enregistrement», puis déplacez le bouton radio intitulé «Alias» sur «Oui». Sélectionnez ensuite votre ELB dans le menu déroulant.
la source
CNAME
enregistrement doit être utilisé. Quel serait l'avantage d'unA
record / qu'est-ce qui change ici?Il existe des solutions potentielles que vous pouvez essayer dans ce forum des développeurs AWS. https://forums.aws.amazon.com/message.jspa?messageID=387552 .
Par exemple:
correction potentielle n ° 1
correction potentielle n ° 2
Il y avait d'autres choses à essayer dans ce post, mais celles-ci semblent être les meilleures pistes.
la source