Задача:
Создание балансировщика нагрузки UDP с отказоустойчивостью в Amazon для экземпляров EC2.
Проблемы:
На основании приведенного ниже объяснения у меня возникли следующие проблемы:
- AWS EC2 Не имеет публичного DNS-имени, которое работает как для трафика IPv4, так и для трафика IPv6.
- Невозможно переназначить текущий адрес IPv6 новому экземпляру в другой зоне доступности.
Пояснение:
Под отказоустойчивостью я имею в виду, что если экземпляр по какой-либо причине отключается, раскрутите новый и замените его. Если зона доступности, в которой он находится, не работает, раскрутите новый экземпляр в другой зоне доступности и замените его.
С помощью эластичных IP-адресов я могу переназначить существующий эластичный IP-адрес новому экземпляру независимо от его зоны доступности.
С адресами IPv6 я не могу переназначить существующий адрес IPv6 , если новый экземпляр создан в другой зоне доступности, поскольку он не находится в той же подсети. По зонам доступности я имею в виду зоны доступности Amazon, такие как us-west-2a, us-west-2b, us-west-2c и т. Д.
Единственный способ, которым я знаю, как решить эту проблему, - обновить запись хоста у моего регистратора (в моем случае это Godaddy) новым IPv6-адресом. У Godaddy есть API, и я верю, что могу обновлять свою запись хоста программно. Тем не менее, Godaddy имеет минимальный TTL 600 секунд , что означает, что мой сервер может быть недоступен трафиком IPv6 в течение 10 минут или более в зависимости от распространения .
У Amazon замечательная система балансировки нагрузки, если я просто делаю обычный трафик TCP. Эта проблема не будет существовать, если бы это было так. Поскольку мне нужно балансировать нагрузку UDP-трафика, я столкнулся с этой проблемой. AWS ELB (Amazon Elastic Load Balancer) предоставляет мне CNAME, на которое я могу указать весь свой трафик для трафика TCP. Поэтому мне не нужно беспокоиться об отдельном трафике IPv4 и IPv6. Я могу просто указать CNAME непосредственно на DNS-имя, которое Amazon предоставляет вместе с ELB.
Amazon также предоставляет общедоступный DNS для EC2, но только для трафика IPv4. Так что это будет работать для моего трафика IPv4, но не для моего трафика IPv6.
Единственный вариант, о котором я могу подумать, - это установить программный балансировщик нагрузки, в моем случае NGINX на экземпляр EC2. Затем укажите домен на адреса IPv4 и IPv6 балансировщика нагрузки NGINX. Затем, когда происходит сбой зоны, я запускаю новый экземпляр AWS EC2 в другой зоне. Затем используйте API Godaddy для обновления IPv6-адреса до IPv6-адреса нового экземпляра.
Запрос
Кто-нибудь знает, как назначить CNAME для экземпляра EC2 без AWS ELB? Экземпляр должен был бы иметь возможность получать трафик IPv4 и IPv6 на CNAME.
Единственный способ, которым я могу думать об этом, - это привести к простоям из-за проблем распространения с изменениями DNS у моего Регистратора домена.
Я просматривал опции Route 53 в Amazon, и похоже, что у него такие же задержки распространения.
Я думал о настройке собственного DNS-сервера для домена. Затем, если IP-адрес изменится, я могу изменить запись DNS быстрее, чем с помощью Godaddy. Но проблемы распространения DNS будут проблемой при любом изменении DNS.