Назначение Elastic IP без потери доступности домена на AWS - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть IP-адрес для моего EC2, и я установил DNS домена на этот IP-адрес, и теперь он работает нормально.но мы только что обнаружили, что Public IPv4 не является постоянным, и мы теряем его при простом перезапуске, поэтому нам нужно назначить Elastic IP этому.Но, назначая и Elastic IP, мы теряем Public IP для EC2, и домен отключается, пока мы не настроим DNS домена и не дождемся увеличения времени распространения.

Как мы можем управлять этой ситуацией, не имея времени простоя насторона домена?

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

DNS "распространение" по сути является мифом.Задержка есть, но это не связано с тем, что правильно называется «распространением».Это связано с распределенным кэшированием и TTL.Это явление, которое легко понять, но, возможно, немного трудно объяснить.

Соблюдайте TTL («время жизни») в вашей текущей записи DNS.Давайте предположим, что это 3600 - число в секундах, так что это будет 1 час.Значение current означает, что next раз, когда вы меняете запись, вы можете ожидать, что до этого длинного будет «распространяться».

Итак, запишите значение, затем измените TTL на очень маленькое число, например 15. После того, как предыдущий TTL за время пройдет, 15 будет вашим текущим TTL, глобально.(Если предыдущее значение было 3600, то через час - 3600 секунд - после того, как вы изменили на 15, это будет 15, когда ваше новое эффективное значение будет глобально.)

После того, как это установлено, вы можете изменитьA-запись указывает на новый IP-адрес, и изменение будет «распространяться» в течение 15 секунд.На самом деле, это займет около 35 секунд дольше, если вы используете маршрут 53, потому что маршрут 53 имеет небольшую задержку, прежде чем изменения становятся видимыми ... но эта стратегия позволяет быстро измениться - в основном - с минимальными нарушениями.

EC2 позволяет выполнять горячую замену общедоступного IP-адреса для Elastic IP без остановки машины, поэтому вы можете взять этот IP-адрес и поместить его в DNS, а затем подключить его к экземпляру, и все готово.В течение нескольких секунд ваш DNS будет корректным и «распространенным».Как только вы освоитесь с новой средой, снова измените DNS TTL на большее значение, чтобы повысить производительность и сократить количество запросов, которые должен обрабатывать Route 53.

Все это звучит довольно просто, но все же есть ловушка.

Суть в том, что любой, у кого при внесении изменений открыт браузер, может потерять доступ к сайту, независимо от того, что вы делаете, потому что браузеры, как правило, кэшируют DNS-запросы, независимо от настроенного TTL.Запись DNS актуальна и актуальна, но их браузер не ищет ее.Браузер может кэшировать старое значение, пока оно не будет закрыто.Поведение браузера в этом отношении является чем-то вроде подстановочного знака.

Существует служба AWS, которую вы можете временно использовать, чтобы этого не происходило, - выставив свой сайт на общедоступных IP-адресах, не привязанных к фактическому экземпляру.Вы можете временно перенести свой DNS, чтобы он там указывал.

Предполагая, что это веб-сайт, подключите балансировщик нагрузки приложения к экземпляру.Переключите DNS, чтобы указать на ALB.Подождите, пока журналы вашего веб-сервера не покажут, что все запросы поступают через ALB.Затем измените экземпляр на Elastic IP.Поскольку ALB подключается к экземпляру, используя его частный IP-адрес, это не будет затронуто.Затем измените DNS на EIP.Опять же, дождитесь, пока журналы веб-сервера не начнут отображать трафик, поступающий непосредственно к экземпляру, и прекратите показывать любой трафик, проходящий через ALB - журналы ALB не показывают значимого трафика.(Для этого нельзя просто использовать метрики подсчета запросов ALB, поскольку все веб-серверы с общедоступными IP-адресами получают некоторое количество мусорного трафика от людей, просматривающих сеть.) Если трафик не проходит через ALB, удалите его.

0 голосов
/ 13 февраля 2019

Мне удалось решить проблему, и я хотел поделиться ею с вами.По результатам поисков я нашел два решения.

1- Добавление балансировщика нагрузки и подключение к нему EC2 и присвоение балансировщику нагрузки IP.Таким образом, вы можете изменить DNS домена на этот балансировщик нагрузки, и не будет никакого простоя или распространения для этого.Затем вы можете назначить эластичный IP вашему EC2 и снова изменить DNS на этот IP без распространения.

2 - Вы можете сделать это, добавив подсеть и сетевой интерфейс, который полностью покрыт здесь

0 голосов
/ 13 февраля 2019

Сделайте копию своего экземпляра EC2, присоедините Elastic IP к этому новому экземпляру и затем выполните отключение DNS.Подождите, пока DNS распространится, а затем закройте старый экземпляр.Вы можете отслеживать трафик, приходящий на ваш старый экземпляр, чтобы быть уверенным (или, по крайней мере, разумно), что вы можете его прекратить.При этом не должно быть простоев.

...