Ich habe diese Frage beim Durchsuchen der Diagnose von Amazon Elastic Load Balancers (ELBs) gefunden und möchte sie für alle anderen Personen wie mich beantworten, die diese Probleme ohne viel Anleitung hatten.
ELB-Eigenschaften
ELBs haben einige interessante Eigenschaften. Zum Beispiel:
- ELBs bestehen aus einem oder mehreren Knoten
- Diese Knoten werden als A-Datensätze für den ELB-Namen veröffentlicht
- Diese Knoten können ausfallen oder heruntergefahren werden, und die Verbindungen werden nicht ordnungsgemäß geschlossen
- Oft ist eine gute Beziehung zum Amazon-Support ($$$) erforderlich, um jemanden dazu zu bringen, sich mit ELB-Problemen zu befassen
ANMERKUNG: Eine weitere interessante, aber etwas weniger relevante Eigenschaft ist, dass ELBs nicht für plötzliche Verkehrsspitzen ausgelegt sind. Sie benötigen in der Regel 15 Minuten starken Datenverkehrs, bevor sie skaliert werden können, oder sie können auf Anfrage über ein Support-Ticket vorgewärmt werden
Fehlerbehebung bei ELBs (manuell)
Update: AWS hat seitdem alle ELBs migriert, um Route 53 für DNS zu verwenden. Darüber hinaus verfügen alle ELBs jetzt über einen all.$elb_name
Datensatz, der die vollständige Liste der Knoten für die ELB zurückgibt. Wenn Ihr ELB-Name beispielsweise lautet elb-123456789.us-east-1.elb.amazonaws.com
, erhalten Sie die vollständige Liste der Knoten, indem Sie wie folgt vorgehen dig all.elb-123456789.us-east-1.elb.amazonaws.com
. Funktioniert auch für IPv6-Knoten all.ipv6.$elb_name
. Darüber hinaus kann Route 53 bis zu 4 KB an Daten zurückgeben, die noch UDP verwenden, sodass die Verwendung des +tcp
Flags möglicherweise nicht erforderlich ist.
Wenn Sie dies wissen, können Sie ein wenig selbstständig Fehler beheben. Lösen Sie zunächst den ELB-Namen in eine Liste von Knoten (als A-Datensätze) auf:
$ dig @ns-942.amazon.com +tcp elb-123456789.us-east-1.elb.amazonaws.com ANY
Das tcp
Flag wird vorgeschlagen, da Ihre ELB möglicherweise zu viele Datensätze enthält, um in ein einzelnes UDP-Paket zu passen. Ich habe auch erfahren, aber noch nicht persönlich bestätigt, dass Amazon nur bis zu 6 Knoten anzeigt, sofern Sie keine ANY
Abfrage durchführen. Wenn Sie diesen Befehl ausführen, erhalten Sie eine Ausgabe, die ungefähr so aussieht (der Kürze halber gekürzt):
;; 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
A
Verwenden Sie nun für jeden curl
Datensatz z. B. zum Testen einer Verbindung zur ELB. Natürlich möchten Sie Ihren Test auch nur auf die ELB beschränken, ohne eine Verbindung zu Ihren Backends herzustellen. Eine letzte Eigenschaft und wenig bekannte Tatsache über ELBs:
- Die maximale Größe der Anforderungsmethode (Verb), die über eine ELB gesendet werden kann, beträgt 127 Zeichen . Jeder größere und der ELB antwortet mit einem HTTP 405 - Methode nicht erlaubt .
Dies bedeutet, dass wir dieses Verhalten nutzen können, um nur zu testen, ob der ELB reagiert:
$ 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
Wenn Sie sehen, HTTP/1.1 405 METHOD_NOT_ALLOWED
reagiert die ELB erfolgreich. Möglicherweise möchten Sie auch die Zeitüberschreitungen für die Wellung an Werte anpassen, die für Sie akzeptabel sind.
Fehlerbehebung bei ELBs mithilfe von Elbping
Natürlich kann dies ziemlich mühsam werden, daher habe ich ein Tool zur Automatisierung dieses Problems namens Elbping entwickelt . Es ist als Rubin-Edelstein erhältlich. Wenn Sie also Rubin-Edelsteine haben, können Sie diese installieren, indem Sie einfach Folgendes tun:
$ gem install elbping
Jetzt können Sie laufen:
$ 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
Denken Sie daran, wenn Sie sehen code=405
, bedeutet dies, dass die ELB antwortet.
Nächste Schritte
Unabhängig davon, für welche Methode Sie sich entscheiden, wissen Sie zumindest, ob die ELB-Knoten reagieren oder nicht. Mit diesem Wissen können Sie sich entweder auf die Fehlerbehebung anderer Teile Ihres Stapels konzentrieren oder AWS auf vernünftige Weise mitteilen, dass etwas nicht in Ordnung ist.
Hoffe das hilft!
host
auflöst -, wird das Dienstprogramm auf Systemen, auf denen eine Verbindung hergestellt werden kann, und auf Systemen, auf denen eine Verbindung hergestellt werden kann, unter derselben Adresse ausgeführt wir können nicht.