У меня в подчиненни гетерогенная сеть из порядка 40 линукс серверов и несколько живых PHP программистов. Долгое время я просил вынести в единый конфигурационный унифицированный файл подключения к базам данных, серверам memcached, redis и sphinx. Но сегодня осенила гениальная идея. Связано это было с невзможностью быстро включить-выключить сервер из работы и отдать техподдержке на апгрейд убой. Конечно подождать пару часов когда серверов мало, попить чай и пообщаться с любимой можно, но это очень затрудняет работу с большим количеством машинок.
Идея заключается в следующем: делегировать на каждую из локальных машин зону описывающую все внутренние ресурсы, с временем жизни записей всего в несколько секунд. В случае каких-либо изменений, добавлении в кластер новых железок, выключении старых, смене адресации в существующих кластерах и так далее — достаточно отредактировать файл зоны на dns-master сервере и разлить его на слейвы то есть наши рабочие машины. Лично мне идея до сих пор кажется гениальной в своей простоте.
Техническая реализация крайне легка, я приведу пару строк конфигов, мне кажется администраторы с парой десятков серверов вполне поймут что к чему, но по первым просьбам опишу подробно.
Придумываем красивое название нашей зон и делегируем ее на сервер который будет нашим новым dns-master ом.
На новом сервере:
named.conf:
Ну и разумеется наш файл зоны, в котором описываем все сервисы которые нас интересуют. Не забудьте подкорректировать время жизни записей в соответствии со своими нуждами:
Ну вот тут идем на наши слейвы, на каждом поднимаем named на локальном интерфейсе (ведь никому кроме самого сервера он и не нужен) и с минимальным конфигом.
named.conf
После этого прописываем в /etc/resolv.conf
Ну и конечно же проверка:
И это проделываем это на каждой ноде в нашем небольшом но ухоженном парке серверов. Наслаждаемся жизнью без мысли о том когда же многоуважаемые программисты найдут 5 минут пробежаться по многочисленным конфигам и выключить из баланса ту или иную ноду.
PS. Не спрашивайте почему не используются балансеры и проксеры, для этого есть свои архитектурные причины.
PPS. На написание этой статьи я потратил больше времени чем на первоначальную настройку самой системы. Все IP адеса, названия хостов и конфигурациооные файлы основаны на реальных и проверены на работоспособность.
Идея заключается в следующем: делегировать на каждую из локальных машин зону описывающую все внутренние ресурсы, с временем жизни записей всего в несколько секунд. В случае каких-либо изменений, добавлении в кластер новых железок, выключении старых, смене адресации в существующих кластерах и так далее — достаточно отредактировать файл зоны на 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 адеса, названия хостов и конфигурациооные файлы основаны на реальных и проверены на работоспособность.