Я знайшов це питання під час Гуглінга щодо того, як діагностувати Amazon Elastic Balancers Balancers (ELBs), і я хочу відповісти на нього для всіх інших, як я, у кого виникли ці проблеми без особливих рекомендацій.
Властивості ELB
ELB мають деякі цікаві властивості. Наприклад:
- ELB складаються з 1 або більше вузлів
- Ці вузли публікуються як A записи для імені ELB
- Ці вузли можуть вийти з ладу або перерватися, а з'єднання не будуть вичерпно закриті
- Часто потрібні добрі стосунки з підтримкою Amazon ($$$), щоб змусити когось зануритися в проблеми з ELB
ПРИМІТКА. Ще одна цікава властивість, але дещо менш доречна - це те, що ELB не були розроблені для управління раптовими скачками трафіку. Зазвичай вони вимагають 15 хвилин великого руху, перш ніж вони збільшаться, або їх можна попередньо підігріти за запитом за допомогою квитка на підтримку
Виправлення неполадок вручну (вручну)
Оновлення: AWS з тих пір перемістила всі ELB для використання маршруту 53 для DNS. Крім того, всі ELB тепер мають all.$elb_name
запис, який поверне повний список вузлів для ELB. Наприклад, якщо ваше ім'я ELB elb-123456789.us-east-1.elb.amazonaws.com
, ви отримаєте повний список вузлів, зробивши щось подібне dig all.elb-123456789.us-east-1.elb.amazonaws.com
. Для вузлів IPv6 all.ipv6.$elb_name
також працює. Крім того, маршрут 53 може повернути до 4 КБ даних, які все ще використовують UDP, тому використання +tcp
прапора може не знадобитися.
Знаючи це, ви можете зробити трохи усунення несправностей самостійно. Спочатку вирішіть ім'я ELB до списку вузлів (як записів A):
$ dig @ns-942.amazon.com +tcp elb-123456789.us-east-1.elb.amazonaws.com ANY
tcp
Прапор пропонується як ваш ELB може мати занадто багато записів , щоб поміститися усередині одного пакета UDP. Мені також сказали, але особисто не підтвердили, що Amazon відображатиме до 6 вузлів, якщо ви не виконаєте ANY
запит. Виконання цієї команди дасть вам вихід, який виглядає приблизно так (оброблений для стислості):
;; 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
записів використовують, наприклад, curl
для перевірки з'єднання з ELB. Звичайно, ви також хочете ізолювати свій тест лише на ELB, не підключаючись до вашої програми. Одне остаточне властивість і маловідомий факт про ELB:
- Максимальний розмір методу запиту (дієслова), який можна надіслати через ELB, - 127 символів . Будь-які великі і ELB відповість HTTP 405 - Метод заборонений .
Це означає, що ми можемо скористатися такою поведінкою, щоб перевірити лише відповідь ELB:
$ 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
Якщо ви бачите, HTTP/1.1 405 METHOD_NOT_ALLOWED
ELB реагує успішно. Можливо, ви також хочете налаштувати тайм-аути завивки на прийнятні для вас значення.
Усунення несправностей з ELB за допомогою пальців
Звичайно, це може стати досить стомлюючим, тому я створив інструмент для автоматизації цього під назвою зіскочити . Він доступний як дорогоцінний камінь, тому якщо у вас є рубіггеми, його можна встановити, просто виконавши:
$ gem install elbping
Тепер ви можете запустити:
$ 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
Пам'ятайте, якщо ви бачите, code=405
це означає, що ELB відповідає.
Наступні кроки
Який би метод ви не вибрали, ви принаймні дізнаєтесь, чи реагують вузли вашого ELB чи ні. Озброївшись цими знаннями, ви можете або зосередити увагу на усуненні інших частин стеку, або зможете зробити AWS досить розумним випадком, коли щось не так.
Сподіваюся, це допомагає!
host
утиліти вирішує ту саму адресу в системах, де ми можемо підключитися, і системах, де ми не можемо.