Назначение Elastic IP без потери доступности домена на AWS
У меня есть IP-адрес для моего EC2, и я установил DNS домена на этот IP-адрес, и теперь он работает нормально. но мы только что обнаружили, что Public IPv4 не является постоянным, и мы теряем его при простом перезапуске, поэтому нам нужно назначить Elastic IP этому. Но, назначая и Elastic IP, мы теряем Public IP для EC2, и домен отключается, пока мы не установим DNS домена и не дождемся увеличения времени распространения.
Как мы можем справиться с этой ситуацией, не имея простоев на стороне домена?
3 ответа
Сделайте копию своего экземпляра EC2, присоедините Elastic IP к этому новому экземпляру и затем выполните отключение DNS. Подождите, пока DNS распространится, а затем закройте старый экземпляр. Вы можете отслеживать трафик, приходящий на ваш старый экземпляр, чтобы быть уверенным (или, по крайней мере, разумно), что вы можете его прекратить. При этом не должно быть простоев.
DNS "распространение" по сути является мифом. Задержка есть, но это не связано с тем, что правильно называется "распространением". Это связано с распределенным кэшированием и TTL. Это явление, которое легко понять, но, возможно, немного трудно объяснить.
Соблюдайте TTL ("время жизни") в вашей текущей записи DNS. Давайте предположим, что это 3600 - число в секундах, так что это будет 1 час. Текущее значение означает, что в следующий раз, когда вы измените запись, вы можете ожидать, что она займет столько времени, чтобы "распространиться".
Итак, запишите значение, затем измените TTL на очень маленькое число, например 15. После того, как пройдет предыдущий TTL во времени, 15 будет вашим текущим TTL в глобальном масштабе. (Если предыдущее значение было 3600, то через час - 3600 секунд - после того, как вы измените значение на 15, наступит 15, когда ваше новое эффективное значение будет глобально.)
Как только это будет установлено, вы можете изменить свою A-запись, чтобы она указала на новый IP-адрес, и это изменение будет "распространяться" в течение 15 секунд. На самом деле, это займет около 35 секунд дольше, если вы используете маршрут 53, потому что маршрут 53 имеет небольшую задержку, прежде чем изменения становятся видимыми... но эта стратегия позволяет быстро измениться - в основном - с минимальными нарушениями.
EC2 позволяет выполнять горячую замену общедоступного IP-адреса для Elastic IP без остановки машины, поэтому вы можете взять этот IP-адрес и поместить его в DNS, затем подключить его к экземпляру, и все готово. В течение нескольких секунд ваш DNS будет корректным и "распространенным". Как только вы освоитесь с новой средой, снова измените значение TTL DNS на большее, чтобы повысить производительность и уменьшить количество запросов, которые должен обрабатывать Route 53.
Все это звучит довольно просто, но есть еще одна загвоздка.
Суть в том, что любой, у кого открыт браузер, когда вы вносите изменения, может потерять доступ к сайту, независимо от того, что вы делаете, потому что браузеры, как правило, кэшируют DNS-запросы, независимо от настроенного TTL. Запись DNS актуальна и актуальна, но их браузер не ищет ее. Браузер может кэшировать старое значение, пока оно не будет закрыто. Поведение браузера в этом отношении немного подстановочный.
Существует служба AWS, которую вы можете временно использовать, чтобы этого не произошло, - выставив свой сайт на общедоступных IP-адресах, не привязанных к фактическому экземпляру. Вы можете перенести свой DNS, чтобы указать там, временно.
Предполагая, что это веб-сайт, подключите балансировщик нагрузки приложения к экземпляру. Переключите DNS, чтобы указать на ALB. Подождите, пока журналы вашего веб-сервера не покажут, что все запросы поступают через ALB. Затем измените экземпляр на Elastic IP. Поскольку ALB подключается к экземпляру, используя свой частный IP-адрес, это не повлияет. Затем измените DNS на EIP. Опять же, дождитесь, пока журналы веб-сервера не начнут отображать трафик, поступающий непосредственно к экземпляру, и прекратите показывать любой трафик, проходящий через ALB - журналы ALB не показывают значимого трафика. (Для этого нельзя просто использовать метрики подсчета запросов ALB, поскольку все веб-серверы с общедоступными IP-адресами получают некоторое количество мусорного трафика от людей, сканирующих Интернет.) Как только трафик не проходит через ALB, удалите его.
Мне удалось решить проблему, и я хотел поделиться ею с вами. По результатам поисков я нашел два решения.
1- Добавление балансировщика нагрузки и присоединение к нему EC2 и присвоение балансировщику нагрузки IP. Таким образом, вы можете изменить DNS домена на этот балансировщик нагрузки, и не будет никакого простоя или распространения для этого. Затем вы можете назначить эластичный IP вашему EC2 и снова изменить DNS на этот IP без распространения.
2- Вы можете сделать это, добавив подсеть и сетевой интерфейс, который полностью описан здесь.