![是否因一个域名服务器离线而导致可用性受损?](https://linux22.com/image/706258/%E6%98%AF%E5%90%A6%E5%9B%A0%E4%B8%80%E4%B8%AA%E5%9F%9F%E5%90%8D%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%A6%BB%E7%BA%BF%E8%80%8C%E5%AF%BC%E8%87%B4%E5%8F%AF%E7%94%A8%E6%80%A7%E5%8F%97%E6%8D%9F%EF%BC%9F.png)
一个域名可以有多个在域名注册商处注册的名称服务器。名称服务器是随机选择的,而不是像预期的那样首先是主服务器,然后是次服务器等等。
知道了这一点,这是否意味着当一个名称服务器停机时,有 50% 的可能性,对离线名称服务器提出质疑的访问者将永远无法访问您的网站?而另外 50% 的访问者可以正常浏览您的网站,从而影响服务器的可用性?
最后,为什么当一个名称服务器出现故障时,客户端不会默认询问列表中的下一个名称服务器?
IPv4 和 IPv6 也一样。如果其中一个名称服务器仅支持 IPv6 而不支持 IPv4,并且没有 IPv6 连接的用户询问该特定名称服务器,我想该站点将无法访问。
此外,我明确讨论了选择权威服务器的方式,以及在所选权威服务器由于停机或客户端和服务器之间的 ipv4-ipv6 不兼容而不可用的情况下如何处理故障。
答案1
最后,为什么当一个名称服务器出现故障时,客户端不会默认询问列表中的下一个名称服务器?
这正是递归服务器与权威服务器对话时所做的事情。RFC 1035§7.2如果您有兴趣,可以描述整个过程,但以下摘录是最直接相关的:
密钥算法使用请求的状态信息来选择下一个要查询的名称服务器地址,并计算超时时间,如果响应未到达,则将执行下一个操作。下一个操作通常是传输到其他服务器,但对客户端来说可能是暂时的错误。
[剪辑]
- 如果解析器从名称服务器收到服务器错误或其他奇怪的响应,它应该将其从 SLIST 中删除,并且可能希望安排立即传输到下一个候选服务器地址。
在选择权威服务器时,还需要考虑其他一些因素,例如根据先前的通信历史观察到的响应时间。如果您感兴趣的话,可以在 RFC 中找到。
确保你不受域名服务器无法访问影响的关键在于16号作战计划。 尤其,第 3.1 节状态:
辅助服务器必须放置在互联网上拓扑和地理上分散的位置,以最大限度地降低单一故障导致所有服务器瘫痪的可能性。
也就是说,辅助服务器应位于地理上相距较远的位置,因此不太可能发生断电等事件同时中断所有服务器。它们还应通过相当不同的路径连接到网络。这意味着任何一个链接的故障,或网络某个部分(例如服务提供商)内的路由的故障都不会导致所有服务器都无法访问。
这是因为,您的域的弹性会受到网络或物理站点上的单点故障的严重影响。理想的状态是拥有多个权威名称服务器,这些名称服务器不会受到其他名称服务器所经历的任何网络或物理状态变化的影响。
答案2
我想说,这个问题的总体答案是“不”。
首先,客户端机器传统上仅具有存根解析器,盲目地将所有查询(设置了“需要递归”)发送到某个已配置的名称服务器地址(resolv.conf
)。
这实际上是在下一步中发生的事情,当该名称服务器处理递归请求时,进行迭代查询直到达到权威机构,您的问题是适用的。
虽然存在某种程度的特定于实现的行为,但绝对可以预期的是,它会尝试通过权威名称服务器进行操作,直到找到一个响应的服务器。
这里需要注意的是,会有一些总体超时,因此存在无法及时完成的风险。
也就是说,经常会关注哪些服务器正在运行,哪些服务器没有运行,这增加了连续查询及时成功的机会,当然,对已缓存数据的查询甚至不需要与权威服务器进行通信。
总而言之,如果有两个名称服务器,其中一个发生故障,则不应期望有 50% 的机会出现用户可见的错误。更可能的是,在完全冷缓存的情况下,第一次查找只会稍微慢一点。
答案3
声称有 50% 的可能性,那些质疑离线名称服务器的访问者永远无法到达你的网站,这种说法是不准确的。从 Linux 解析器手册中man resolv.conf
,在描述选项的部分,nameserver
你可以读到:
如果有多个服务器,解析器库将按列出的顺序查询它们。如果不存在名称服务器条目,则默认使用本地计算机上的名称服务器。使用的算法是尝试一个名称服务器,如果查询超时,则尝试下一个,直到名称服务器用完,然后重复尝试所有名称服务器,直到重试次数达到最大次数。
因此,它们将按照配置文件中指定的顺序进行尝试。这样说并不一定意味着所有解析器都应以相同的方式运行。