У меня есть разнородная сеть, состоящая примерно из 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
-
База Данных Скриншотов Debian
19 Oct, 24 -
Стандарт Разработки Приложений Android
19 Oct, 24