Мы эксплуатируем несколько резервных серверов по всему миру из-за задержек. В настоящее время, если один сайт выходит из строя, наш единственный способ позволить другому сайту захватить этот регион - через DNS.
Мы хотели бы автоматизировать этот процесс, например, путем замены / изменения файлов зоны, если сайт обнаружен как отказавший с помощью инструмента мониторинга.
Мои навыки работы с Google позволили найти компании, предлагающие это только как услугу, но мы предпочли бы наше собственное решение. В настоящее время для мониторинга мы используем Nagios, наш сервер имен - Bind.
Есть ли какой-нибудь инструмент / метод для этого?
Конечно, есть то, что делают и эти службы. :-)
Это немного зависит от того, как вы в настоящее время перенаправляете / распределяете пользователей по всему миру. Предполагая, что в результате одни пользователи перенаправляются с www.example.com на www.eu.example.com, а другие на www.oc.example.com соответственно на www.am.example.com.
Вы можете использовать свое решение для мониторинга, чтобы, когда www.am.example.com перестает отвечать, запускалось не только обычное предупреждение, но и обновление, такое, что www.am.example.com вместо этого указывал на www.eu.example.com.
Чистый путь с динамическое обновление который представляет собой метод добавления, замены или удаления записей на главном сервере путем отправки ему специальной формы сообщений DNS. Формат и смысл этих сообщений указаны в RFC 2136.
Динамическое обновление включается включением allow-update
или update-policy
в операторе зоны. Для получения дополнительной информации проверьте Справочное руководство администратора Bind.
Самым чистым, вероятно, является использование средств управления доступом на основе IP и открытых ключей DNS.
Создайте пару ключей:
dnssec-keygen -a HMAC-MD5 -b 512 -n USER nagios.example.com.
В результате должно получиться два файла, один для закрытого ключа Knagios.exmaple.com.NNNN.private
и второй с открытым ключом Knagios.exmaple.com.NNNN.key
.
Обновите конфигурацию Bind:
key nagios.example.com. {
algorithm HMAC-MD5;
secret "<string with contents from Knagios.exmaple.com.NNNN.key>"; };
zone "am.example.com"
{
type master;
file "/etc/bind/zone/am.example.com";
allow-update { key nagios.example.com.; };
...
};
Затем скрипт, который выполняет следующие действия при появлении предупреждения с помощью Bind nsupdate
утилита:
cat<<EOF | /usr/bin/nsupdate -k Knagios.exmaple.com.NNNN.private -v
server ns1.example.com
zone am.example.com
update delete www.am.example.com. A
update add www.am.example.com. 60 A <ip-address-of-www.eu.example.com>
send
EOF
Я не уверен, разрешено ли вам использовать динамическое обновление для чего-либо, кроме A
записи.
Никто. Ваш подход сломан.
Вы, кажется, заблуждаетесь, что можете вот так изменить DNS. Так не работает. Даже если вы установите низкий TTL, некоторые провайдеры проигнорируют его - и ваше старое значение все равно будет использоваться. Фактически у вас нет контроля над истечением срока действия DNS за пределами «дня или двух».
Таким образом, любая высокая доступность, основанная на изменениях DNS, в корне ошибочна.