Назад | Перейти на главную страницу

Производительность DNS. Повышает ли производительность использование нескольких вторичных серверов NS?

Когда в каком-то домене есть первичный NS и несколько вторичных NS, будут ли клиенты случайным образом просить их уменьшить нагрузку, или они будут воздействовать только на первичный NS и переходить к вторичному только в случае отказа первичного?

Я буду использовать пример отсюда https://serverfault.com/questions/130608/when-is-a-secondary-nameserver-hit/130625#130625

В основном это зависит от реализации резолвера. Некоторые решатели попадают на первый сервер, другие случайным образом выбирают сервер из доступных. Чтобы обойти это, большинство DNS-серверов рандомизируют порядок ответов.

Если вы спросите google.com, вы получите следующий ответ:

#dig NS google.com 
;; QUESTION SECTION:
;google.com.            IN  NS

;; ANSWER SECTION:
google.com.     297286  IN  NS  ns3.google.com.
google.com.     297286  IN  NS  ns2.google.com.
google.com.     297286  IN  NS  ns4.google.com.
google.com.     297286  IN  NS  ns1.google.com.

;; ADDITIONAL SECTION:
ns1.google.com.     297067  IN  A   216.239.32.10
ns2.google.com.     297074  IN  A   216.239.34.10
ns3.google.com.     297074  IN  A   216.239.36.10
ns4.google.com.     297067  IN  A   216.239.38.10

А потом делаем это снова:

#dig NS google.com
;; QUESTION SECTION:
;google.com.            IN  NS

;; ANSWER SECTION:
google.com.     297249  IN  NS  ns3.google.com.
google.com.     297249  IN  NS  ns2.google.com.
google.com.     297249  IN  NS  ns1.google.com.
google.com.     297249  IN  NS  ns4.google.com.

;; ADDITIONAL SECTION:
ns1.google.com.     297030  IN  A   216.239.32.10
ns2.google.com.     297037  IN  A   216.239.34.10
ns3.google.com.     297037  IN  A   216.239.36.10
ns4.google.com.     297030  IN  A   216.239.38.10

Обратите внимание, как они меняют порядок серверов имен в ответе, чтобы распределить нагрузку.

Что касается рекурсивных серверов DNS, нет никакой разницы между «первичным» и «вторичным» серверами имен - технически они оба являются просто «авторитетными» серверами.

Единственное, что влияет на эффективность балансировки нагрузки:

  1. порядок, в котором список NS записи возвращаются самими серверами
  2. выбирает ли клиент его наугад
  3. использует ли клиент другую эвристику (например, время приема-передачи - RTT) для выбора "самого быстрого" сервера

Из этих факторов первым является наименее важный. Случайный выбор и использование RTT гораздо более распространены.

Преобразователи IPv4 обычно используют серверы в том порядке, в котором они получают их в пакете, причем первый чаще всего оказывается успешным. Порядок обычно выбирается сервером DNS случайным образом для распределения нагрузки. IPv6 изменит это, поскольку требует IP-адрес с наиболее распространенными верхними битами, с которым будет связываться первым. Это сделает бессмысленным рандомизацию ответов DNS.

Они сначала попадут в первичный, а затем перейдут к вторичному NS, поэтому наличие нескольких серверов имен только увеличит избыточность.

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

Если вы говорите о DNS-серверах, а не о DNS-кешах, тогда он будет запрашивать сервер наугад. Главный сервер является просто источником DNS-записей для других серверов, которые являются полномочными для домена. Также, вероятно, верно, что это актуально только в том случае, если вы используете axfr как метод репликации ваших DNS, при обращении к бэкэнду, например к базе данных или каталогу ldap с другими формами репликации, еще менее важно, какая запись идет в SOA. Есть одно исключение: если вы используете динамические обновления DNS, клиенты DHCP будут связываться с этим сервером с обновленной информацией на своих IP-адресах.

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

Добавление дополнительных серверов определенно может улучшить производительность.

Единственный реальный способ улучшить производительность DNS во всем Интернете - это использовать Anycast адрес.

Если вы просто добавите кучу адресов, вы все равно не сможете контролировать, какой адрес фактически будет использовать какой-либо удаленный пользователь, потому что ОС клиента решает, что делать со списком DNS-серверов, которые он получает. Умный клиент попытался бы выяснить, какой из них самый быстрый, но это не то, над чем администратор DNS может контролировать.

Клиенты Windows будут использовать первичный DNS, если с первичным не удастся связаться, затем он переключится на вторичный. Я не думаю, что есть способ изменить это поведение.