Wir versuchen, ein relativ einfaches Setup auf Amazon EC2 auszuführen - mehrere HTTP-Server, die sich hinter einem Amazon Elastic Load Balancer (ELB) befinden.
Unsere Domain wird in Route53 verwaltet, und wir haben einen CNAME-Datensatz eingerichtet, der auf die ELB verweist.
Es sind einige Probleme aufgetreten, bei denen einige - aber nicht alle - Standorte zeitweise keine Verbindung zum Load Balancer herstellen können. Es scheint, dass dies die Auflösung des ELB-Domainnamens sein kann.
Der Amazon-Support teilte uns mit, dass sich die zugrunde liegende elastische IP-Adresse des Lastenausgleichs geändert hat und dass das Problem darin besteht, dass die DNS-Server einiger ISPs die TTL nicht einhalten. Mit dieser Erklärung geben wir uns nicht zufrieden, da wir das Problem mithilfe von Amazon-eigenen DNS-Servern aus einer EC2-Instanz sowie auf lokalen ISPs in Australien und über den DNS-Server von Google ( 8.8.8.8
) repliziert haben .
Amazon bestätigte auch, dass in der Zeit, in der wir an einigen Standorten Ausfallzeiten bemerkten, der durch die ELB fließende Datenverkehr erheblich abnahm - das Problem liegt also nicht bei unseren Endpunkten.
Interessanterweise scheint die Domäne auf den Servern, die keine Verbindung herstellen können, die richtige IP-Adresse zu erhalten - aber der Versuch, eine TCP-Verbindung herzustellen, schlägt fehl.
Alle mit dem ELB verbundenen Instanzen waren zu jeder Zeit fehlerfrei. Sie sind alle
Weiß jemand, wie wir dieses Problem genauer diagnostizieren können? Hat jemand dieses Problem mit dem Elastic Load Balancer erlebt?
Vielen Dank,
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.Antworten:
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:
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 lautetelb-123456789.us-east-1.elb.amazonaws.com
, erhalten Sie die vollständige Liste der Knoten, indem Sie wie folgt vorgehendig all.elb-123456789.us-east-1.elb.amazonaws.com
. Funktioniert auch für IPv6-Knotenall.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:
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 keineANY
Abfrage durchführen. Wenn Sie diesen Befehl ausführen, erhalten Sie eine Ausgabe, die ungefähr so aussieht (der Kürze halber gekürzt):A
Verwenden Sie nun für jedencurl
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:Dies bedeutet, dass wir dieses Verhalten nutzen können, um nur zu testen, ob der ELB reagiert:
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:
Jetzt können Sie laufen:
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!
quelle
Die Lösung ist eigentlich einfach: Verwenden Sie einen
A
Datensatz anstelle einesCNAME
in Route53.Wählen Sie in der AWS Management Console "Ein Datensatz" und setzen Sie das Optionsfeld "Alias" auf "Ja". Wählen Sie dann Ihre ELB aus dem Dropdown-Menü.
quelle
CNAME
Datensatz verwendet werden sollte. Was wäre der Vorteil einerA
Schallplatte / was ändert sich hier?In diesem AWS-Entwicklerforum können Sie einige mögliche Lösungen ausprobieren. https://forums.aws.amazon.com/message.jspa?messageID=387552 .
Beispielsweise:
potenzielle Lösung Nr. 1
potenzielle Lösung Nr. 2
In diesem Beitrag gab es noch andere Dinge zu versuchen, aber diese scheinen die besten Hinweise zu sein.
quelle