当某个域具有主 NS 和多个辅助 NS 时,客户端会随机要求它们减少负载,或者它们只会访问主 NS,并且仅当主 NS 发生故障时才继续使用辅助 NS?
答案1
我将重复使用这里的示例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
请注意他们如何改变答复中的名称服务器的顺序以分散负载。
答案2
IPv4 解析器通常会按照数据包中的顺序使用服务器,第一个服务器通常会成功。DNS 服务器通常会随机化顺序以分散负载。IPv6 将改变这种情况,因为它需要最常见最高位的 IP 将成为最先联系的 IP。这将使 DNS 回复的随机化变得毫无意义。
答案3
就 DNS 递归服务器而言,“主”名称服务器和“辅助”名称服务器之间没有区别 - 从技术上讲,它们都只是“权威”服务器。
对负载平衡的有效性产生影响的唯一因素是:
NS
服务器本身返回记录列表的顺序- 客户端是否随机选择一个
- 客户端是否使用其他启发式方法(即往返时间 - RTT)来选择“最快”的服务器
在这些因素中,第一个是至少很重要。随机挑选并使用 RTT 更为常见。
答案4
如果您谈论的是 DNS 服务器,而不是 DNS 缓存,那么它将随机询问服务器。主服务器仅仅是对域具有权威性的其他服务器的 DNS 记录的来源。这也可能只是在您使用 axfr 作为复制 DNS 的方法时才有意义,当使用其他形式的复制来查询后端(例如数据库或 ldap 目录)时,SOA 中记录的意义就更小了。有一个例外,那就是如果您使用动态 DNS 更新,那么 dhcp 客户端将使用其 IP 上的更新信息联系此服务器。