У меня в подчиненни гетерогенная сеть из порядка 40 линукс серверов и несколько живых PHP программистов. Долгое время я просил вынести в единый конфигурационный унифицированный файл подключения к базам данных, серверам memcached, redis и sphinx. Но сегодня осенила гениальная идея. Связано это было с невзможностью быстро включить-выключить сервер из работы и отдать техподдержке на апгрейд убой. Конечно подождать пару часов когда серверов мало, попить чай и пообщаться с любимой можно, но это очень затрудняет работу с большим количеством машинок.
Идея заключается в следующем: делегировать на каждую из локальных машин зону описывающую все внутренние ресурсы, с временем жизни записей всего в несколько секунд. В случае каких-либо изменений, добавлении в кластер новых железок, выключении старых, смене адресации в существующих кластерах и так далее — достаточно отредактировать файл зоны на dns-master сервере и разлить его на слейвы то есть наши рабочие машины. Лично мне идея до сих пор кажется гениальной в своей простоте.
Техническая реализация крайне легка, я приведу пару строк конфигов, мне кажется администраторы с парой десятков серверов вполне поймут что к чему, но по первым просьбам опишу подробно.
Придумываем красивое название нашей зон и делегируем ее на сервер который будет нашим новым dns-master ом.
[root@isp4 manualzone]# cat corp.ru |grep service.noc
service.noc NS admin.service.noc
admin.service.noc IN A AA.BB.CC.74
На новом сервере:
named.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
Ну вот тут идем на наши слейвы, на каждом поднимаем named на локальном интерфейсе (ведь никому кроме самого сервера он и не нужен) и с минимальным конфигом.
named.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 минут пробежаться по многочисленным конфигам и выключить из баланса ту или иную ноду.
PS. Не спрашивайте почему не используются балансеры и проксеры, для этого есть свои архитектурные причины.
PPS. На написание этой статьи я потратил больше времени чем на первоначальную настройку самой системы. Все IP адеса, названия хостов и конфигурациооные файлы основаны на реальных и проверены на работоспособность.
Автор: Perec007