Próbujemy uruchomić dość prostą konfigurację na Amazon EC2 - kilka serwerów HTTP siedzących za Amazon Elastic Load Balancer (ELB).
Nasza domena jest zarządzana w Route53 i mamy ustawiony rekord CNAME wskazujący na ELB.
Wystąpiły problemy, w których niektóre - ale nie wszystkie - lokalizacje nie są w stanie sporadycznie połączyć się z modułem równoważenia obciążenia; wydaje się, że może to być rozdzielczość nazwy domeny ELB.
Wsparcie Amazon poinformowało nas, że elastyczny adres IP modułu równoważenia obciążenia zmienia się, a problemem jest to, że serwery DNS niektórych dostawców usług internetowych nie honorują TTL. Nie jesteśmy zadowoleni z tego wyjaśnienia, ponieważ powieliliśmy problem przy użyciu własnych serwerów DNS Amazon z instancji EC2, a także lokalnych dostawców usług internetowych w Australii i serwera DNS Google ( 8.8.8.8
).
Amazon potwierdził również, że w okresie, w którym zauważyliśmy przestoje z niektórych lokalizacji, ruch przechodzący przez ELB był znacznie zmniejszony - więc problem nie dotyczy naszych punktów końcowych.
Co ciekawe, domena wydaje się rozpoznawać poprawny adres IP na serwerach, które nie mogą się połączyć - ale próba nawiązania połączenia TCP kończy się niepowodzeniem.
Wszystkie instancje dołączone do ELB były przez cały czas zdrowe. Oni wszyscy są
Czy ktoś wie, jak możemy głębiej zdiagnozować ten problem? Czy ktoś jeszcze doświadczył tego problemu z Elastic Load Balancer?
Dzięki,
host
narzędzia rozwiązuje ten sam adres w systemach, do których możemy się łączyć i systemach, w których nie możemy.Odpowiedzi:
Znalazłem to pytanie podczas korzystania z Googling, dotyczące diagnozowania równoważników obciążenia elastycznego Amazon (ELB) i chcę odpowiedzieć na to pytanie dla wszystkich osób takich jak ja, które miały takie problemy bez większych wskazówek.
Właściwości ELB
ELB mają kilka interesujących właściwości. Na przykład:
UWAGA: Inną interesującą właściwością, ale nieco mniej istotną, jest to, że ELB nie zostały zaprojektowane do obsługi nagłych skoków ruchu. Zwykle wymagają 15 minut dużego natężenia ruchu, zanim zwiększą skalę lub mogą zostać wstępnie rozgrzane na żądanie za pomocą biletu pomocy technicznej
Rozwiązywanie problemów z ELB (ręcznie)
Aktualizacja: od tego czasu AWS przeprowadziła migrację wszystkich ELB, aby używać trasy 53 dla DNS. Ponadto wszystkie ELB mają teraz
all.$elb_name
rekord, który zwróci pełną listę węzłów dla ELB. Na przykład, jeśli masz nazwę ELBelb-123456789.us-east-1.elb.amazonaws.com
, to uzyskasz pełną listę węzłów, robiąc coś podobnegodig all.elb-123456789.us-east-1.elb.amazonaws.com
. W przypadku węzłów IPv6all.ipv6.$elb_name
działa również. Ponadto Route 53 jest w stanie zwrócić do 4KB danych nadal przy użyciu UDP, więc użycie+tcp
flagi może nie być konieczne.Wiedząc o tym, możesz samodzielnie rozwiązać problem. Najpierw przetłumacz nazwę ELB na listę węzłów (jako rekordy A):
tcp
Flaga jest sugerowane jako swoją ELB może mieć zbyt wiele rekordów aby zmieścić wewnątrz pojedynczego pakietu UDP. Powiedziano mi również, ale osobiście nie potwierdziłem, że Amazon wyświetli tylko do 6 węzłów, chyba że wykonaszANY
zapytanie. Uruchomienie tej komendy da ci wynik, który wygląda mniej więcej tak (przycięty dla zwięzłości):Teraz dla każdego z
A
rekordów użyj np.curl
Do przetestowania połączenia z ELB. Oczywiście, chcesz również izolować test tylko na ELB bez łączenia się z backendami. Jedna ostateczna właściwość i mało znany fakt na temat ELB:Oznacza to, że możemy wykorzystać to zachowanie do przetestowania tylko tego, że ELB odpowiada:
Jeśli widzisz,
HTTP/1.1 405 METHOD_NOT_ALLOWED
ELB odpowiada pomyślnie. Możesz także dostosować limity czasu curl do wartości, które są do zaakceptowania.Rozwiązywanie problemów ELB za pomocą elbping
Oczywiście robienie tego może być dość nużące, dlatego stworzyłem narzędzie do automatyzacji tego, co nazywa się elbping . Jest dostępny jako rubinowy klejnot, więc jeśli masz rubygemy, możesz go zainstalować, wykonując:
Teraz możesz uruchomić:
Pamiętaj, jeśli widzisz
code=405
, oznacza to, że ELB odpowiada.Następne kroki
Niezależnie od wybranej metody, będziesz przynajmniej wiedział, czy węzły Twojego ELB odpowiadają, czy nie. Uzbrojeni w tę wiedzę, możesz albo skoncentrować się na rozwiązywaniu problemów z innymi częściami stosu, albo być w stanie uzasadnić AWS, że coś jest nie tak.
Mam nadzieję że to pomoże!
źródło
Poprawka jest w rzeczywistości prosta: użyj
A
rekordu zamiastCNAME
w Route53.W konsoli zarządzania AWS wybierz „Rekord”, a następnie przesuń przycisk opcji „Alias” na „Tak”. Następnie wybierz ELB z menu rozwijanego.
źródło
CNAME
należy użyć zapisu. Jaka byłaby korzyść zA
zapisu / co się tutaj zmienia?Istnieje kilka potencjalnych rozwiązań, które możesz wypróbować na tym forum programistów AWS. https://forums.aws.amazon.com/message.jspa?messageID=387552 .
Na przykład:
potencjalna poprawka nr 1
potencjalna poprawka # 2
W tym poście można było wypróbować inne rzeczy, ale te wydają się być najlepszymi potencjalnymi klientami.
źródło