Как не потерять почту когда умирают ДЦ или о надежности DNS
Многие недавно пострадали от одновременного падения тысяч серверов сначала в пожаре на hosting.ua, а затем при отключении на McHost. Зацепило и меня. Денег на умерших сайтах я не зарабатывал, однако почта постоянно нужна для деловой переписки. Несмотря на то, что почта у меня перенесена на Google (или как вариант на Yandex), ни одно письмо не могло до меня дойти, т.к. вместе с серверами умерли и Name-сервера, и отправители просто не могли прочитать MX-запись для моего домена. Итого, 26 часов я просидел без почты объясняя всем людям, с которыми я работаю, что им нужно дублировать все письма на другой ящик - достаточно унизительно и не профессионально.Как же заставить почту работать даже если все сервера хостера лежат?
Итак, мы будем заниматься надежностью DNS. В принципе тут никакой мистики нет - DNS изначально был задуман надежным, именно по этому при регистрации доменов в некоторых зонах вам будет необходимо указывать 2 NS-сервера.
О терминологии
Не вдаваясь в тонкости, дабы всем было понятно:DNS - Domain Name System - позволяет по символьному имени сайта получить его IP или значения специальных записей. Именно через DNS почтовые сервера узнают, на какой сервер присылать почту для этого домена (это указывается в MX-записях).
NS - Name Server. Сервер, отвечающий на запросы по данному домену. NS бывают Primary - именно на нем лежат файлы конфигурации(Master), описывающие какие данные отдавать, и Secondary(обычно Slave) - они регулярно копируют информацию с Primary, и служат "резервной копией". Secondary серверов может быть несколько. Когда оба(все) сервера работают - нагрузка распределяется равномерно на всех.
AXFR - вид запроса к DNS серверу, при котором он отдает все, что знает по запрошенному домену. Так называемый "Трансфер зоны". Через этот запрос Secondary NS получает всю информацию с Primary NS по нужному домену. Обычно AXFR запросы разрешены только для небольшой группы IP, чтобы не показывать посторонним лицам лишнюю информацию (например существование "секретных" поддоменов).
Как все часто сделано:
Допустим у нас есть сайт xyz.ru, NS сервера используются зачастую от провайдера (и Primary и Secondary). Иногда Primary и Secondary вообще работают на одном сервере, просто на разных IP. Соответственно на этих NS серверах и находятся MX записи, которые используются каждый раз, когда к вам нужно отправить почту, даже если почта используется от Google или Yandex.В один прекрасный момент весь ДЦ сгорает, или монтер рубильником вырубает 70 Гбит оптоволокна, сайты само собой падают, к ним теперь нет доступа извне. Однако почта, которую обрабатывают серверы Гугла/Яндекса также не будет работать, т.к. отправители не будут знать, на какой сервер отсылать для вас почту. Такие проблемы могут возникнуть даже если соединение оборвется на каких-нибудь 5 минут. Конечно, сервер-отправитель положит письмо в очередь, и будет еще пытаться послать позже, но это может стоить вам многочасовой задержки получения письма.
Как хостеры могут сделать это правильно?
По идее, они должны NS-сервера держать в разных, не связанных друг с другом ДЦ. На практике лишних денег тратить никому не хочется, и оба сервера зачастую ставят в своём-же ДЦ, ибо так "дешевле". Кроме того, если оба NS сервера принадлежат одной компании, все-равно остаются некоторые риски (например: маски-шоу с выносом всех серверов из всех ДЦ), и предложенный ниже способ все равно имеет смысл.Что можно сделать самому?
Использовать независимый Secondary сервер. Например, на xname.org. Там вы бесплатно можете сделать Secondary/Slave сервер (записи копируются с вашего основного NS, для этого ваш основной NS должен разрешить AXFR запросы с 195.234.42.1, 87.98.164.164 and 88.191.64.64). В случае падения вашего сервера или всего датацентра почта все равно будет исправно ходить, т.к. MX записи будут получаться с Secondary сервера. Если AXFR разрешить не удается, можно сделать Master-сервер, и руками скопировать DNS-записи.Update: Xname - не единственный вариант, некоторые говорят что он глючен. Есть как другие бесплатные хостеры DNS, так и платные, от 1 доллара в год от nic.ua.
Еще немного хитрости
Вам вероятно захочется показать пользователям заглушку, или развернуть сайт из бэкапа на другом сервере. Однако, поскольку ваш Primary DNS лежит, поменять там что-либо не получится, и придется переводить домен на новые NS-сервера, что может занять больше времени (+еще столько-же когда будете все возвращать). Для решения этой проблемы можно поступить наоборот: Primary DNS делать на XName.org, а на вашем сервере запустить bind9 как Secondary DNS сервер. В этом случае если упадет XName.org - все будет нормально работать из кеша вашего личного Secondary NS, а если упадет ДЦ - на XName.org вы сможете быстро перенаправить пользователей на новый сервер.Надеюсь, эта статья поможет вам подготовится к следующему эпическому падению серверов, а может и к ядерной войне.
PS. И делайте бэкапы каждый день в физически отдаленном месте, сегодня это случилось с нами, завтра - с Вами.
По результатам мини-исследования около половины хостеров держат и Primary и Secondary NS сервера в одном месте, и при проблемах с ДЦ они упадут одновременно оба.