Failover DNS или ставим bind на кластер

Документация связанная с установкой, настройкой и работой пользовательского ПО
Ответить
Аватара пользователя
Raven
Бородатый сис
Бородатый сис
Сообщения: 2800
Зарегистрирован: 03 мар 2010, 15:12
ОС: RHEL 8
Откуда: Из серверной

Failover DNS или ставим bind на кластер

Сообщение Raven » 29 сен 2011, 12:36

Схема такая - 2 сервака работают в HA-режиме (1 нода primary другая standby), надо поставить на них DNS наким образом чтобы сервак работал 24/7 и не реагровал на выпадения машин.
Для обеих машин в моем случае используется общее хранилище данных 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
На переносим папку /var/named/chroot на общий раздел, у меня он примонтирован как /srv/data, если вы используете DRBD, то папку надо переносить на DRBD-раздел, в случае с crsync ничего переносить не надо, надо лишь засинкать эти директории:

Код: Выделить всё

#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 
Правим 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";
Создаем файл 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;
    };
};
правим фалик /etc/logrotate.d/named (на обоих нодах)

Код: Выделить всё

/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
Создаем и правим файл /etc/ha.d/authkeys

Код: Выделить всё

 # touch /etc/ha.d/authkeys && vi /etc/ha.d/authkeys
в который добавляем следующие строки

Код: Выделить всё

 auth 1
 1 md5 supersecret
где supersecret - это секретная фраза для аутентификации.

Меняем права на файл /etc/ha.d/authkeys:

Код: Выделить всё

 # chmod 0600 /etc/ha.d/authkeys
Создаем и правим файл /etc/ha.d/ha.cf

Код: Выделить всё

 # 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
Создаем и правим файл /etc/ha.d/haresources

Код: Выделить всё

# touch /etc/ha.d/haresources && vi /etc/ha.d/haresources
вписываем:

Код: Выделить всё

dns1 IPaddr2::10.0.0.1/32/eth0 named
Запуск
Инициируем автозапуск сервисов

Код: Выделить всё

# chkconfig heartbeat on
Заметьте, что я не добавляю в автозапуск named - его, как и ip-адрес 10.0.0.1 поднимет heartbеat.

Запускаемся

Код: Выделить всё

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

Изначально named будет жить на сервере dns1, но стоит выключить эту машину или просто выдернуть кабель из eth1 - через пару минут named переедет на dns2 и прихватит с собой IP-адрес.
Я не злопамятный, я просто часто ковыряю логи
Аватара пользователя
zaka
Эникейщик
Эникейщик
Сообщения: 461
Зарегистрирован: 19 май 2010, 08:52

Re: Failover DNS или ставим bind на кластер

Сообщение zaka » 30 сен 2011, 07:52

Raven
круть *COMP*
Помни прошлое, живи настоящим и думай о будущем.
Изображение
Ответить

Вернуться в «Документация *nix»