基本上它取决于解析器的实现。一些解析器会命中第一台服务器,其他解析器会从可用的服务器中随机选择一个服务器。为了解决这个问题,大多数 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 服务器,而不是 dns 缓存,那么它会随机询问服务器。主服务器仅仅是对域具有权威性的其他服务器的 dns 记录的来源。这也可能是正确的,只有当您使用 axfr 作为复制 dns 的方法时,当使用其他形式的复制咨询后端(例如数据库或 ldap 目录)时,对于哪个记录进入更没有意义SOA。有一个例外,那就是如果您使用动态 dns 更新,那么 dhcp 客户端将联系该服务器并提供有关其 ips 的更新信息。
我将重用这里的示例https://serverfault.com/questions/130608/when-is-a-secondary-nameserver-hit/130625#130625
基本上它取决于解析器的实现。一些解析器会命中第一台服务器,其他解析器会从可用的服务器中随机选择一个服务器。为了解决这个问题,大多数 DNS 服务器随机化回复的顺序。
如果您询问 google.com,您会得到以下答案:
然后我们再做一次:
请注意这里他们如何更改回复中名称服务器的顺序以分散负载。
IPv4 解析器通常会按照它们在数据包中获取服务器的顺序使用服务器,第一个解析器通常会成功。该顺序通常由 DNS 服务器随机化以分散负载。IPv6 将改变这一点,因为它要求具有最常见最高位的 IP 是最先联系的 IP。这将使 DNS 回复的随机化变得毫无意义。
就 DNS 递归服务器而言,“主要”和“次要”名称服务器之间没有区别——从技术上讲,它们都只是“权威”服务器。
对负载平衡的有效性产生任何影响的唯一因素是:
NS
服务器自己返回记录列表的顺序在这些因素中,第一个是最不重要的。随机挑选和使用 RTT 更为常见。
他们将首先访问主要的 NS,然后继续访问辅助 NS,因此拥有多个名称服务器只会增加冗余。
为了提高性能,您将需要任播名称服务器,尽管您自己实现这一点将花费大量现金,并且不会提供足够实质性的改进来保证成本。
如果您谈论的是 dns 服务器,而不是 dns 缓存,那么它会随机询问服务器。主服务器仅仅是对域具有权威性的其他服务器的 dns 记录的来源。这也可能是正确的,只有当您使用 axfr 作为复制 dns 的方法时,当使用其他形式的复制咨询后端(例如数据库或 ldap 目录)时,对于哪个记录进入更没有意义SOA。有一个例外,那就是如果您使用动态 dns 更新,那么 dhcp 客户端将联系该服务器并提供有关其 ips 的更新信息。
根据我们 DNS 服务器上的经验数据,似乎主服务器和辅助服务器受到了大致相同的数量或请求,即解析器将通过随机选择、循环或其他方式使用两者。
添加更多服务器肯定会提高性能。
在整个互联网上提高 DNS 性能的唯一真正方法是使用任播地址。
如果您只是添加一堆地址,您仍然无法控制某个远程用户实际上将使用哪个地址,因为客户端的操作系统决定如何处理它获得的 DNS 服务器列表。聪明的客户端会尝试找出最快的,但这不是 DNS 管理员可以控制的。
Windows 客户端将使用主 DNS,除非无法联系到主 DNS,否则它将切换到辅助 DNS。我认为没有办法改变这种行为。