Когда в каком-то домене есть первичный 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, нет никакой разницы между «первичным» и «вторичным» серверами имен - технически они оба являются просто «авторитетными» серверами.
Единственное, что влияет на эффективность балансировки нагрузки:
NS
записи возвращаются самими серверамиИз этих факторов первым является наименее важный. Случайный выбор и использование RTT гораздо более распространены.
Преобразователи IPv4 обычно используют серверы в том порядке, в котором они получают их в пакете, причем первый чаще всего оказывается успешным. Порядок обычно выбирается сервером DNS случайным образом для распределения нагрузки. IPv6 изменит это, поскольку требует IP-адрес с наиболее распространенными верхними битами, с которым будет связываться первым. Это сделает бессмысленным рандомизацию ответов DNS.
Они сначала попадут в первичный, а затем перейдут к вторичному NS, поэтому наличие нескольких серверов имен только увеличит избыточность.
Для увеличения производительности вам понадобятся любые кастомные серверы имен, хотя реализация этого по своему усмотрению будет стоить больших денег и не предложит достаточно существенных улучшений, чтобы оправдать затраты.
Если вы говорите о DNS-серверах, а не о DNS-кешах, тогда он будет запрашивать сервер наугад. Главный сервер является просто источником DNS-записей для других серверов, которые являются полномочными для домена. Также, вероятно, верно, что это актуально только в том случае, если вы используете axfr как метод репликации ваших DNS, при обращении к бэкэнду, например к базе данных или каталогу ldap с другими формами репликации, еще менее важно, какая запись идет в SOA. Есть одно исключение: если вы используете динамические обновления DNS, клиенты DHCP будут связываться с этим сервером с обновленной информацией на своих IP-адресах.
Основываясь на эмпирических данных о наших DNS-серверах, кажется, что первичный и вторичный получают примерно одинаковое количество запросов, то есть преобразователи будут использовать и то, и другое, путем случайного выбора, циклического перебора или другого.
Добавление дополнительных серверов определенно может улучшить производительность.
Единственный реальный способ улучшить производительность DNS во всем Интернете - это использовать Anycast адрес.
Если вы просто добавите кучу адресов, вы все равно не сможете контролировать, какой адрес фактически будет использовать какой-либо удаленный пользователь, потому что ОС клиента решает, что делать со списком DNS-серверов, которые он получает. Умный клиент попытался бы выяснить, какой из них самый быстрый, но это не то, над чем администратор DNS может контролировать.
Клиенты Windows будут использовать первичный DNS, если с первичным не удастся связаться, затем он переключится на вторичный. Я не думаю, что есть способ изменить это поведение.