У меня есть серверы имен twp, на которых работает PowerDNS как ns1 и ns2, с использованием настройки типа главный / подчиненный, и это хорошо работает. Я хочу создать несколько серверов для предоставления услуг (например, Интернет, электронная почта и т. Д.), А затем PowerDNS либо на ns1, либо на ns2 (в зависимости от того, что выбрано) возвращать один из нескольких IP-адресов, связанных с именем хоста, в зависимости от того, действительно ли этот хост работает и Бег.
Например, предположим, что у меня есть два веб-сервера, X и Y. Затем у меня есть две записи A в DNS, так что webserver.local иногда разрешает IP-адрес X, а иногда и IP-адрес Y, что приводит к эффекту циклического перебора. Отлично.
Теперь, если X выйдет из строя, это все еще будет работать, но клиенту придется выдержать тайм-аут, прежде чем он получит шанс нажать Y, что означает, что в конечном итоге они доберутся до того места, куда они хотят, но только намного медленнее. Если X выйдет из строя, я бы хотел, чтобы его IP-адрес был удален из кругового списка IP-адресов для разрешения, чтобы DNS возвращал IP-адрес Y только при разрешении webserver.local до тех пор, пока X не будет восстановлен и помещен обратно в строй.
Запрос PowerDNS на проверку того, что хост запущен и работает по каждому запросу, может занять секунду или две (если это вообще возможно), что действительно замедлит запросы DNS. Одна мысль, которая у меня была, заключалась в том, чтобы периодически выполнять отдельную задачу через cron, проверять серверы и соответствующим образом изменять конфигурации PowerDNS. Я, конечно, могу атаковать его с этой точки зрения, но я надеялся, что может быть более стандартный подход к этому, который не потребовал бы столько индивидуальной разработки.
Не имея возможности определить, что это что-то встроенное в PowerDNS или что существует более «официальный» способ справиться с этим, я пошел по пути создания собственной программы для этого. Программа носит скорее общий характер, «если хост выходит из строя, выполните определенное пользователем действие», а не специально для этого, чтобы иметь более широкие возможности.
Я сделал его общедоступным на случай, если он кому-то пригодится: https://github.com/hyperionworks/pulse/