Во время поиска в Google я нашел этот вопрос о том, как диагностировать Amazon Elastic Load Balancers (ELB), и я хочу ответить на него всем, кто, как я, столкнулся с этой проблемой без особых указаний.
ELB Properties
У ELB есть некоторые интересные свойства. Например:
- ELB состоят из 1 или более узлов
- Эти узлы публикуются как записи A для имени ELB
- Эти узлы могут выйти из строя или быть закрыты, и соединения не будут закрыты изящно
- Часто требуется хорошая связь с поддержкой Amazon ($$$), чтобы кто-то мог разобраться с проблемами ELB
ПРИМЕЧАНИЕ. Еще одно интересное свойство, но чуть менее уместное, заключается в том, что ELB не были предназначены для обработки внезапных всплесков трафика. Как правило, им требуется 15 минут интенсивного трафика, прежде чем они будут расширяться, или они могут быть предварительно подогреты по запросу через билет поддержки
Устранение неполадок ELB (вручную)
Обновление: с тех пор 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 отвечает успешно. Вы также можете настроить тайм-ауты curl на приемлемые для вас значения.
Устранение неполадок ELB с использованием elbping
Конечно, делать это может быть довольно утомительно, поэтому я создал инструмент для автоматизации, который называется elbping . Он доступен как рубиновый драгоценный камень, поэтому, если у вас есть rubygems, вы можете установить его, просто выполнив:
$ 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
утилиты разрешается один и тот же адрес в системах, где мы можем подключиться, и в системах, где мы не можем