Мы пытаемся выполнить довольно простую настройку на Amazon EC2 - несколько HTTP-серверов находятся за Amazon Elastic Load Balancer (ELB).
Наш домен управляется в Route53, и у нас есть запись CNAME, настроенная для указания на ELB.
У нас возникли некоторые проблемы, когда некоторые (но не все) местоположения периодически не могут подключиться к балансировщику нагрузки; кажется, что это может быть разрешением доменного имени ELB.
Служба поддержки Amazon сообщила нам, что базовый Elastic IP балансировщика нагрузки изменился, и проблема в том, что DNS-серверы некоторых интернет-провайдеров не соблюдают TTL. Мы не удовлетворены этим объяснением, потому что мы повторили проблему, используя собственные DNS-серверы Amazon из экземпляра EC2, а также локальных интернет-провайдеров в Австралии и через DNS-сервер Google ( 8.8.8.8
).
Amazon также подтвердил, что в период, когда мы замечали время простоя из некоторых мест, трафик, проходящий через ELB, значительно снизился - поэтому проблема не в наших конечных точках.
Интересно, что домен, по-видимому, разрешает правильный IP-адрес на серверах, которые не могут подключиться, но попытка установить соединение TCP не удалась.
Все экземпляры, прикрепленные к ELB, всегда были здоровыми. Они все
Кто-нибудь знает, как мы можем диагностировать эту проблему более глубоко? Кто-нибудь еще испытывал эту проблему с Elastic Load Balancer?
Благодарность,
host
утилиты разрешается один и тот же адрес в системах, где мы можем подключиться, и в системах, где мы не можемОтветы:
Во время поиска в Google я нашел этот вопрос о том, как диагностировать Amazon Elastic Load Balancers (ELB), и я хочу ответить на него всем, кто, как я, столкнулся с этой проблемой без особых указаний.
ELB Properties
У ELB есть некоторые интересные свойства. Например:
ПРИМЕЧАНИЕ. Еще одно интересное свойство, но чуть менее уместное, заключается в том, что ELB не были предназначены для обработки внезапных всплесков трафика. Как правило, им требуется 15 минут интенсивного трафика, прежде чем они будут расширяться, или они могут быть предварительно подогреты по запросу через билет поддержки
Устранение неполадок ELB (вручную)
Обновление: с тех пор AWS перенес все ELB для использования маршрута 53 для DNS. Кроме того, все ELB теперь имеют
all.$elb_name
запись, которая будет возвращать полный список узлов для ELB. Например, если ваше имя ELBelb-123456789.us-east-1.elb.amazonaws.com
, то вы получите полный список узлов, выполнив что-то вродеdig all.elb-123456789.us-east-1.elb.amazonaws.com
. Для узлов IPv6all.ipv6.$elb_name
тоже работает. Кроме того, Маршрут 53 может возвращать до 4 КБ данных, все еще используя UDP, поэтому использование+tcp
флага может быть необязательным.Зная это, вы можете сделать небольшое устранение неполадок самостоятельно. Сначала разрешите имя ELB в список узлов (как записи A):
Этот
tcp
флаг предлагается, поскольку ваш ELB может иметь слишком много записей, чтобы поместиться внутри одного пакета UDP. Мне также сказали, но я лично не подтвердил, что Amazon покажет только 6 узлов, если вы не выполнитеANY
запрос. Выполнение этой команды даст вам вывод, который выглядит примерно так (обрезано для краткости):Теперь для каждой
A
записи используйте, например,curl
для проверки соединения с ELB. Конечно, вы также хотите изолировать свой тест только от ELB без подключения к бэкэндам. Последнее свойство и малоизвестный факт об элементах ELB:Это означает, что мы можем использовать это поведение для проверки только того, что ELB отвечает:
Если вы видите,
HTTP/1.1 405 METHOD_NOT_ALLOWED
то ELB отвечает успешно. Вы также можете настроить тайм-ауты curl на приемлемые для вас значения.Устранение неполадок ELB с использованием elbping
Конечно, делать это может быть довольно утомительно, поэтому я создал инструмент для автоматизации, который называется elbping . Он доступен как рубиновый драгоценный камень, поэтому, если у вас есть rubygems, вы можете установить его, просто выполнив:
Теперь вы можете запустить:
Помните, если вы видите,
code=405
это означает, что ELB отвечает.Следующие шаги
Какой бы метод вы ни выбрали, вы, по крайней мере, будете знать, отвечают ли узлы вашего ELB или нет. Вооружившись этим знанием, вы можете либо сосредоточиться на поиске и устранении неисправностей в других частях своего стека, либо быть в состоянии убедительно доказать AWS, что что-то не так.
Надеюсь это поможет!
источник
Исправление на самом деле простое: используйте
A
запись, а неCNAME
в Route53.В консоли управления AWS выберите «Запись», а затем установите переключатель «Псевдоним» на «Да». Затем выберите свой ELB из выпадающего меню.
источник
CNAME
запись должна использоваться. Какая польза отA
записи / что здесь меняется?Есть несколько потенциальных решений, которые вы можете попробовать на этом форуме разработчиков AWS. https://forums.aws.amazon.com/message.jspa?messageID=387552 .
Например:
потенциальное решение № 1
потенциальное решение № 2
В этом посте можно было попробовать и другие вещи, но они, похоже, являются лучшими.
источник