Я пытаюсь реализовать недорогое решение для обеспечения высокой доступности веб-сайтов. Я ищу недостатки в следующем сценарии:
У меня два сервера с одинаковой конфигурацией, контентом, репликацией mysql (dual-master). Они находятся в разных центрах обработки данных - назовем их serverA и serverB. Пользователи используют serverA - serverB больше похож на резервную копию. Теперь я хочу использовать аварийное переключение DNS, чтобы переключать пользователей с serverA на serverB, когда serverA выходит из строя.
Моя идея состоит в том, что я устанавливаю DNS-серверы (bind / powerdns) на serverA и serverB - назовем их ns1.website.com и ns2.website.com (при условии, что у меня есть сайт website.com). Затем я настраиваю свой домен для использования их в качестве серверов имен. Оба DNS-сервера будут возвращать IP-адрес serverA в качестве IP-адреса моего веб-сайта. Если serverA выходит из строя, я могу (вручную или автоматически с serverB) изменить конфигурацию DNS serverB, чтобы вернуть IP-адрес serverB в качестве IP-адреса веб-сайта. Конечно, TTL будет низким, как и предполагалось при отработке отказа DNS.
Я знаю, что переключение на serverB может занять некоторое время (DNS ttl, время для обнаружения сбоя serverA, реконфигурация DNS serverB и т. Д.), И что небольшая часть пользователей все равно не будет использовать serverB. И меня это устраивает. Но каковы еще недостатки такого подхода?
Альтернативный сценарий: ns1.website.com вернет IP-адрес serverA в качестве IP-адреса веб-сайта, а ns2.website.com вернет IP-адрес serverB в качестве IP-адреса веб-сайта. Но клиенты AFAIK не всегда используют первичный сервер имен, а иногда и вторичный. Так что небольшая часть пользователей будет использовать serverB вместо serverA, что мне не совсем подходит. Можете ли вы подтвердить, что DNS-клиенты ведут себя подобным образом, и можете ли вы сказать, какой процент клиентов мог бы использовать serverB вместо serverA (статистически)? У этого также есть обратная сторона: при резервном копировании serverA он будет автоматически использоваться в качестве основного сервера веб-сайта, что также является плохой ситуацией (холодный кеш, репликация mysql может дать сбой и т. Д.). Так что я добавляю это только как теоретическую альтернативу.
Я думал об использовании некоторых профессиональных компаний, занимающихся отказоустойчивым DNS, но они берут плату за количество DNS-запросов, а плата очень высока (почему?)
«Отработка отказа» не является встроенной функцией DNS-сервера; это всегда должно быть реализовано на другом уровне.
Тем не менее, действительно есть два способа выполнить это: гео-резервирование и -локальность с использованием произвольного преобразования (т.е. возвращаемый IP-адрес зависит от того, откуда пришел запрос или какого-либо другого критерия), или специальные изменения в данных DNS.
Последнее никогда не бывает таким быстрым, как первое, по причинам, которые вы указали.
Тем не менее, последнее довольно просто реализовать самостоятельно; все, что вам нужно, это авторитетные серверы, которые реализуют обновления ddns.
Обнаружить сбой, обновить серверы имен с помощью nsupdate и дождаться истечения срока жизни.