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:
- ELB składają się z 1 lub więcej węzłów
- Te węzły są publikowane jako rekordy A dla nazwy ELB
- Te węzły mogą ulec awarii lub zostać zamknięte, a połączenia nie zostaną zamknięte z wdziękiem
- Często wymaga dobrych relacji ze wsparciem Amazon ($$$), aby skłonić kogoś do zgłębienia problemów z ELB
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ę ELB elb-123456789.us-east-1.elb.amazonaws.com
, to uzyskasz pełną listę węzłów, robiąc coś podobnego dig all.elb-123456789.us-east-1.elb.amazonaws.com
. W przypadku węzłów IPv6 all.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):
$ dig @ns-942.amazon.com +tcp elb-123456789.us-east-1.elb.amazonaws.com ANY
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 wykonasz ANY
zapytanie. Uruchomienie tej komendy da ci wynik, który wygląda mniej więcej tak (przycięty dla zwięzłości):
;; 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
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:
- Maksymalny rozmiar metody żądania (czasownika), który można wysłać przez ELB, wynosi 127 znaków . Każda większa, a ELB odpowie HTTP 405 - Metoda niedozwolona .
Oznacza to, że możemy wykorzystać to zachowanie do przetestowania tylko tego, że ELB odpowiada:
$ 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
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:
$ gem install elbping
Teraz możesz uruchomić:
$ 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
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!
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.