Dns-Сервер На Локальном Интерфейсе Или Простой Путь Любви Между Программистами И Администраторами

У меня есть разнородная сеть, состоящая примерно из 40 Linux-серверов и нескольких живых PHP-программистов под моим руководством.

Я давно просил, чтобы подключения к базам данных, memcached, redis и sphinx-серверам были вынесены в единый файл конфигурации.

Но сегодня меня осенила блестящая идея.

Это было связано с невозможностью быстро включить-выключить сервер и отправить его в техподдержку на обновление.

Конечно, можно подождать пару часов, когда серверов мало, выпить чаю и пообщаться с любимым человеком, но это очень затрудняет работу с большим количеством машин.

Идея следующая: делегировать каждой из локальных машин зону, описывающую все внутренние ресурсы, со временем жизни записей всего несколько секунд. В случае каких-либо изменений, добавления нового оборудования в кластер, отключения старого, изменения адресации в существующих кластерах и так далее, достаточно отредактировать файл зоны на сервере dns-master и раздать его слейвам, что то есть наши рабочие машины.

Лично мне идея до сих пор кажется гениальной в своей простоте.

Техническая реализация предельно проста, приведу пару строчек конфигов, мне кажется администраторы с парой десятков серверов вполне поймут что к чему, но при первых запросах опишу подробно.

Придумываем красивое имя для наших зон и делегируем его серверу, который будет нашим новым dns-мастером.

  
  
  
  
  
   

[root@isp4 manualzone]# cat corp.ru |grep service.noc service.noc NS admin.service.noc admin.service.noc IN A AA.BB.CC.74

На новом сервере: именованный.

conf:

acl "trust" { 127.0.0.1; AA.BB.CC.0/24; }; options { check-names master ignore; allow-transfer { any; }; allow-notify { any; }; allow-query { any; }; directory "/var/lib/named"; dump-file "/var/log/named_dump.db"; statistics-file "/var/log/named.stats"; listen-on { AA.BB.CC.74; 127.0.0.1; }; query-source address * port 53; transfer-source * port 53; notify-source * port 53; notify yes; disable-empty-zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA"; };

И конечно наш файл зоны, в котором мы описываем все интересующие нас сервисы.

Не забудьте настроить время жизни записей в соответствии с вашими потребностями:

SER34:/var/lib/named/master # cat service.noc.corp.ru $TTL 5 @ 5 IN SOA admin.service.noc.corp.ru. root.service.noc.corp.ru. ( 2012082004 ; serial 5s ; refresh 15s ; retry 7d ; expire 5s ; minimum ttl ) IN A AA.BB.CC.0 IN NS admin.service.noc.corp.ru. IN NS W02.service.noc.corp.ru. ADMIN IN A AA.BB.CC.74 W02 IN A AA.BB.CC.22 ;WEB WEBNODE IN A AA.BB.CC.0 WEBNODE IN A AA.BB.CC.1 WEBNODE IN A AA.BB.CC.2 WEBNODE IN A AA.BB.CC.3 WEBNODE IN A AA.BB.CC.4 WEBNODE IN A AA.BB.CC.5 WEBNODE IN A AA.BB.CC.6 WEBNODE IN A AA.BB.CC.7 ;MYSQL REPLICATE CLUSER MYSQLCLUSTER00 IN A AA.BB.CC.50 MYSQLCLUSTER00 IN A AA.BB.CC.51 MYSQLCLUSTER00 IN A AA.BB.CC.52 MYSQLCLUSTER00 IN A AA.BB.CC.53 ;MYSQL MASTER ADMIN MYSQLCLUSTER_ADMIN IN A AA.BB.CC.70 ;MYSQL MASTER INTERACTIVE MYSQLCLUSTER_INTERACTIVE IN A AA.BB.CC.54 ;MYSQL MASTER_ONE MYSQLCLUSTER_ONE IN A AA.BB.CC.55 ;SPHINX CLUSTER01 SPHINX_CLUSTER00 IN A AA.BB.CC.56 SPHINX_CLUSTER01 IN A AA.BB.CC.57 SPHINX_CLUSTER02 IN A AA.BB.CC.58

Ну вот и заходим к нашим слейвам, на каждом поднимаем именованный на локальном интерфейсе (ведь он никому кроме самого сервера не нужен) и с минимальным конфигом.

именованный.

conf

options { allow-update { AA.BB.CC.74; }; directory "/var/lib/named"; dump-file "/var/log/named_dump.db"; statistics-file "/var/log/named.stats"; listen-on port 53 { 127.0.0.1; }; allow-query { 127.0.0.1; }; notify no; disable-empty-zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA"; }; zone "service.noc.corp.ru" { type slave; file "slave/service.noc.corp.ru"; masters { AA.BB.CC.74; }; };

После этого регистрируемся в /etc/resolv.conf

SRV03:/var/lib/named/slave # cat /etc/resolv.conf search noc.corp.ru nameserver 127.0.0.1

И конечно проверьте:

SRV03:/var/lib/named/slave # nslookup > webnode.service Server: 127.0.0.1 Address: 127.0.0.1#53 Name: webnode.service.noc.corp.ru Address: AA.BB.CC.22 Name: webnode.service.noc.corp.ru Address: AA.BB.CC.23 Name: webnode.service.noc.corp.ru Address: AA.BB.CC.24 Name: webnode.service.noc.corp.ru Address: AA.BB.CC.25 Name: webnode.service.noc.corp.ru Address: AA.BB.CC.26 Name: webnode.service.noc.corp.ru Address: AA.BB.CC.27 Name: webnode.service.noc.corp.ru Address: AA.BB.CC.20 Name: webnode.service.noc.corp.ru Address: AA.BB.CC.21

И мы делаем это на каждом узле нашего небольшого, но ухоженного серверного парка.

Мы радуемся жизни, не задумываясь о том, когда уважаемые программисты потратят 5 минут на то, чтобы перебрать многочисленные конфиги и отключить с баланса ту или иную ноду.

ПС.

Не спрашивайте, почему не используются балансировщики и прокси, на это есть архитектурные причины.

П.

П.

С.

На написание этой статьи я потратил больше времени, чем на первоначальную настройку самой системы.

Все IP-адреса, имена хостов и файлы конфигурации основаны на реальных и проверены на функциональность.

Теги: #Настройка Linux #DNS именованный кластер Linux

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.