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:
- Les ELB sont constitués de 1 ou plusieurs nœuds
- Ces nœuds sont publiés en tant qu'enregistrements A pour le nom ELB
- Ces nœuds peuvent échouer ou être fermés et les connexions ne seront pas fermées correctement
- Cela nécessite souvent une bonne relation avec le support Amazon ($$$) pour amener quelqu'un à creuser dans les problèmes ELB
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 est elb-123456789.us-east-1.elb.amazonaws.com
, vous obtiendrez la liste complète des nœuds en faisant quelque chose comme dig 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):
$ dig @ns-942.amazon.com +tcp elb-123456789.us-east-1.elb.amazonaws.com ANY
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 une ANY
requête. L'exécution de cette commande vous donnera une sortie qui ressemble à ceci (rognée pour plus de concision):
;; ANSWER SECTION:
elb-123456789.us-east-1.elb.amazonaws.com. 60 IN SOA ns-942.amazon.com. root.amazon.com. 1376719867 3600 900 7776000 60
elb-123456789.us-east-1.elb.amazonaws.com. 600 IN NS ns-942.amazon.com.
elb-123456789.us-east-1.elb.amazonaws.com. 60 IN A 54.243.63.96
elb-123456789.us-east-1.elb.amazonaws.com. 60 IN A 23.21.73.53
Maintenant, pour chacun des A
enregistrements, utilisez par exemple curl
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:
- La taille maximale de la méthode de requête (verbe) qui peut être envoyée via un ELB est de 127 caractères . Tout plus grand et l'ELB répondra avec un HTTP 405 - Méthode non autorisée .
Cela signifie que nous pouvons profiter de ce comportement pour tester uniquement que l'ELB répond:
$ curl -X $(python -c 'print "A" * 128') -i http://ip.of.individual.node
HTTP/1.1 405 METHOD_NOT_ALLOWED
Content-Length: 0
Connection: Close
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:
$ gem install elbping
Vous pouvez maintenant exécuter:
$ elbping -c 4 http://elb-123456789.us-east-1.elb.amazonaws.com
Response from 54.243.63.96: code=405 time=210 ms
Response from 23.21.73.53: code=405 time=189 ms
Response from 54.243.63.96: code=405 time=191 ms
Response from 23.21.73.53: code=405 time=188 ms
Response from 54.243.63.96: code=405 time=190 ms
Response from 23.21.73.53: code=405 time=192 ms
Response from 54.243.63.96: code=405 time=187 ms
Response from 23.21.73.53: code=405 time=189 ms
--- 54.243.63.96 statistics ---
4 requests, 4 responses, 0% loss
min/avg/max = 187/163/210 ms
--- 23.21.73.53 statistics ---
4 requests, 4 responses, 0% loss
min/avg/max = 188/189/192 ms
--- total statistics ---
8 requests, 8 responses, 0% loss
min/avg/max = 188/189/192 ms
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!
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.