Перейти к содержимому
Калькуляторы

Вопрос по DNS Round-Robin не пойму, как правильно сделать

Допустим у меня есть три сервера, srv1, srv2, srv3.

На этих серверах поднят одинаковый набор сервисов. Допустим DNS, FTP и NTP.

Я хочу распределить нагрузку и заодно настроить отказоустойчивость. Для первого я использую RR, для второго обеспечиваю синхронизацию данных (либо настройками самого ПО, если оно это умеет, либо самописными скриптами).

Как должна быть задана зона, чтобы RR работал правильно?

Допустим я делаю так:

;base
srv1 A x.y.z.1
srv2 A x.y.z.2
srv3 A x.y.z.3
ns1 CNAME srv1
ns2 CNAME srv2
ns3 CNAME srv3
ftp1 CNAME srv1
ftp2 CNAME srv2
ftp3 CNAME srv3
ntp1 CNAME srv1
ntp2 CNAME srv2
ntp3 CNAME srv3

;round-robin
ns  CNAME srv1
   CNAME srv2
   CNAME srv3
ntp CNAME srv1
   CNAME srv2
   CNAME srv3
ftp CNAME srv1
   CNAME srv2
   CNAME srv3

Но так не работает, DNS-сервер (что BIND, что NSD) сообщает, что для одного имени нельзя задавать несколько CNAME.

Если сделать так:

;round-robin
ns  A x.y.z.1
   A x.y.z.2
   A x.y.z.3
ntp A x.y.z.1
   A x.y.z.2
   A x.y.z.3
ftp A x.y.z.1
   A x.y.z.2
   A x.y.z.3

то в этом случае ошибок не выдается и DNS нормально запускается.

Но мне почему-то вспоминается, что делать несколько A-записей для одного IP-адреса не рекомендуется. Как минимум, будут проблемы с проверкой обратной зоны.

 

Посоветуйте, как правильно такое сделать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Но мне почему-то вспоминается, что делать несколько A-записей для одного IP-адреса не рекомендуется. Как минимум, будут проблемы с проверкой обратной зоны.

Никаких проблем не будет. А вот делать NS как CNAME - не рекомендуется, поскольку глюков огрести с этим можно много и довольно вероятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это я указал для примера.

Я раньше так однажды сделал, с глюками столкнулся и больше так не делаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ОК, я бы еще не рекомендовал писать round-robin как RR, поскольку для DNS RR - это почти всегда resource record :)

 

А обратную зону мало кто проверяет, да никто и не мешает нескольким адресам поставить в соответствие одно имя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кстати, по обратной зоне тоже пара вопросов.

Разве может на один IP-адрес ссылаться несколько записей?

То есть можно ли написать так?

10 PTR www.domain.ru.
10 PTR mail.domain.ru.

В BIND у меня это не получалось.

 

И как в обратную зону добавляют большие объемы записей?

Допустим у меня есть пул динамических адресов /16 (x.y.0.0-x.y.255.255). И я хочу, чтобы для этого пула автоматически создавались A и PTR записи в формате x.y.a.b<>pool-a-b.domain.ru.

В BIND можно использовать макрос $GENERATE. Но это именно что макрос, он на самом деле генерирует огромную зону на 64к записей и это прекрасно видно на slave-серверах, которые загружают ее целиком.

А можно ли настроить DNS-сервер таким образом, чтобы он автоматически формировал ответ, если запись напрямую не описана в зоне?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня получилось, смотрите:

6.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.6.4.1.1.0.0.2.ip6.arpa. 3600 IN PTR test1.record.

6.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.6.4.1.1.0.0.2.ip6.arpa. 3600 IN PTR test.record.

 

А можно ли настроить DNS-сервер таким образом, чтобы он автоматически формировал ответ, если запись напрямую не описана в зоне?

В BIND10 такое, насколько я помню, обещали. Но с тех пор утекло много воды, сменились разработчики, руководство, поменяли вообще весь проект и я как-то за ним следить перестал. Думаю, что для реверсного DNS нужна поддержка DNSSEC, а без подписанной большой зоны DNSSEC нормально не работает, разве что с opt-out (как в .com, например. но чего это им стоило!). В конце концов, 64к записей - это довольно-таки скромная зона.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Anycast и ospf? Шутить изволите?

 

Нет.

А Вы первый раз слышите эти два слова? или вместе? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

:) нет.

Просто выбор инструментов для меня кажется необычным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

anycast + ospf.

А какая связь с DNS?

Или имеется ввиду отказоустойчивость и распределение нагрузки делать с помощью таких способов, а не DNS Round-Robin?

Помоему это только для контролируемой сети подходит. А запросы извне таким образом не распределить.

А round-robin это дешево и сердито.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Допустим у меня есть три сервера, srv1, srv2, srv3.

На этих серверах поднят одинаковый набор сервисов. Допустим DNS, FTP и NTP.

Я хочу распределить нагрузку и заодно настроить отказоустойчивость. Для первого я использую RR

Если сделать так:

;round-robin
ntp A x.y.z.1
   A x.y.z.2
   A x.y.z.3

то в этом случае ошибок не выдается и DNS нормально запускается.

Но мне почему-то вспоминается, что делать несколько A-записей для одного IP-адреса не рекомендуется.

Посоветуйте, как правильно такое сделать?

 

При внедрении у себя unbound обнаружил, что unbound требует расширенную форму указания нескольких адресов, иначе просто не крутит:

ntp    0   	A   	1.2.3.4
   0   	A   	1.2.3.5
   0   	A   	1.2.3.6
   0   	A   	1.2.3.7

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня прекрасно крутит.

Только в конфиге в секции server нужно явно указать, чтобы использовать round-robin.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть мнение что в случае с раундробином надо заставить ДНС отдавать одну запись из списка а не весь список и потом клиент выбирает что использовать.

Клиенты могут "любить" младьшие адреса, в результате отдавая список мы надеемся на клиента - а это уже не гуд.

 

Я в пауэрднсе это делал процедуркой в MySQL, может есть другие пути.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть мнение что в случае с раундробином надо заставить ДНС отдавать одну запись из списка а не весь список и потом клиент выбирает что использовать.

Клиент подключается к кому может, по очереди из всего списка.

Если вам нужно балансировать то это не к ДНС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

anycast + ospf.

А какая связь с DNS?

Или имеется ввиду отказоустойчивость и распределение нагрузки делать с помощью таких способов, а не DNS Round-Robin?

Помоему это только для контролируемой сети подходит. А запросы извне таким образом не распределить.

А round-robin это дешево и сердито.

 

 

Чуть-чуть расширьте кругозор.

Round-Robin - имеет несколько недостатков:

1) сервис ДНС как точка отказа

2) один неработающий IP из списка будет давать ошибку клиенту. При 3-х IP - ошибка будет для трети запросов.

 

Так как в большинстве случаев, у провайдера только одна точка терминации абонентского траффика, то Round-Robin здесь вообще бесполезен.

У оставшихся - уже несколько точек терминации абонентского траффика. У кого-то есть автоматизазация переключения сбойнувшего оборудования, а у кого-то нет.

 

Вот тут предлагаю использовать anycast сеть для размещения на локалхост интерфейсах этих точек терминации абонентского траффика.

Если какой-то сервис выходит со строя, то достаточно удалить IP с локалхоста и по OSPF получить живой маршрут к этому IP с соседней точки и перенаправлять туда запросы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.