Для обеих машин в моем случае используется общее хранилище данных SAN, но возможно также использование синхронизации данных посредством DRBD или crsync. Обе машины с RedHat на борту, так что с конфигами (точнее с конфигом) проблем не должно быть.
eth1 - ваш сетефой интерфейс для синхронизации (желательно соединить ноды кроссовером) на обоих нодах
eth0 - внешний интерфейс (на обоих нодах)
Предположим что на первой и второй ноде на внешних интерфейсах присвоены адреса 10.0.0.10 и 10.0.0.20 соответственно.
dns1 - имя первичной ноды
dns2 - имя вторичной ноды
10.0.0.1 - это "внешний плавающий" IP нашего DNS-сервера на котором наш bind будет слушать. Этот IP будет переезжать вместе с bind'ом с сервера на сервер.
обязательно вписываем все ip и имена хостов в /etc/hosts
Итак поехали!
Ставим бинд на обе ноды:
Код: Выделить всё
#yum install bind bind-chrootКод: Выделить всё
#mv /var/named/chroot /srv/data/named
#rm -rf /var/named
# ln -s /srv/data/named /var/namedправим файл /etc/sysconfig/named (на обоих нодах), в который дописываем строчку
Код: Выделить всё
ROOTDIR="/srv/data/named"Код: Выделить всё
# mv /etc/named.conf  /srv/data/named/etc
# mv /etc/named.iscdlv.key  /srv/data/named/etc
# mv /etc/named.localhost  /srv/data/named/etc
# mv /etc/named.loopback  /srv/data/named/etc
# mv /etc/named.rfc1912.zones  /srv/data/named/etc
# mv /etc/named.root.key /srv/data/named/etc
# ln -sf /srv/data/named/etc/named.conf /etc/named.conf 
Код: Выделить всё
options {
        listen-on-v6 { none; };
        listen-on { 10.0.0.1; };
        allow-transfer {
            <ip вторичного сервера>;
        };
        allow-query {any;};
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursion yes;
        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;
        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
};
logging {
        channel default_debug {
                file "/var/log/named.log";
                severity dynamic;
        };
};
zone "." IN {
        type hint;
        file "/var/named/named.ca";
};
include "/etc/named.rfc1912.zones";
include "/var/named/zones.conf";
Код: Выделить всё
# cat > /srv/data/named/var/named/zones.conf
// Пример файла в котором будем прописывать зоны DNS. Я не буду расписывать что и как делать - этого в интернете валом.
zone "google.com" {
    type forward;
    forward only;
    forwarders {
        206.124.64.1;
        85.115.208.29;
    };
};
Код: Выделить всё
/srv/data/named/var/log/named.log {
    compress
    daily
    rotate 5
    missingok
    #create 0644 named named
    postrotate
        /sbin/service named reload  2> /dev/null > /dev/null || true
    endscript
}
Код: Выделить всё
# service named startСтавим heatrbeat (также на обе ноды) - пора подумать об отказоустойчивости.
Код: Выделить всё
#yum install heartbeatКод: Выделить всё
 # touch /etc/ha.d/authkeys && vi /etc/ha.d/authkeysКод: Выделить всё
 auth 1
 1 md5 supersecretМеняем права на файл /etc/ha.d/authkeys:
Код: Выделить всё
 # chmod 0600 /etc/ha.d/authkeysКод: Выделить всё
 # touch /etc/ha.d/ha.cf && vi /etc/ha.d/ha.cfКод: Выделить всё
 logfile /var/log/ha-log
 logfacility     local0
 keepalive 2
 deadtime 30
 warntime 10
 initdead 120
 udpport 694
 baud    19200
 bcast eth1
 auto_failback on
 autojoin none
 node dns1
 node dns2
Код: Выделить всё
# touch /etc/ha.d/haresources && vi /etc/ha.d/haresourcesКод: Выделить всё
dns1 IPaddr2::10.0.0.1/32/eth0 namedИнициируем автозапуск сервисов
Код: Выделить всё
# chkconfig heartbeat onЗапускаемся
Код: Выделить всё
# service heartbeat startТеперь то же самое нужно проделать на второй ноде.
Изначально named будет жить на сервере dns1, но стоит выключить эту машину или просто выдернуть кабель из eth1 - через пару минут named переедет на dns2 и прихватит с собой IP-адрес.


