当 DNS 服务器出现故障时避免 DNS 超时

Nei*_*tin 22 domain-name-system high-availability datacenter

我们有一个小型数据中心,大约有一百台主机指向 3 个内部 DNS 服务器(绑定 9)。当其中一台内部 DNS 服务器不可用时,我们的问题就出现了。那时所有指向该服务器的客户端开始执行非常缓慢。

问题似乎是股票 Linux 解析器并没有真正具有“故障转移”到不同 DNS 服务器的概念。您可以调整它使用的超时和重试次数(并设置轮换,以便它可以在列表中工作),但无论使用什么设置,如果主 DNS 服务器不可用,我们的服务执行速度会慢得多。目前,这是我们服务中断的最大来源之一。

我的理想答案是“RTFM:像这样调整/etc/resolv.conf...”,但如果这是一个选项,我还没有看到。

我想知道其他人是如何处理这个问题的?

我可以看到 3 种可能的解决方案:

  • 使用 linux-ha/Pacemaker 和故障转移 IP(因此 DNS IP VIP“始终”可用)。唉,我们没有良好的围栏基础设施,没有围栏起搏器不能很好地工作(根据我的经验,没有围栏的 Pacemaker 会降低可用性)。

  • 在每个节点上运行本地 DNS 服务器,并将 resolv.conf 指向 localhost。这会奏效,但它会给我们更多的服务来监控和管理。

  • 在每个节点上运行本地缓存。人们似乎认为 nscd “已损坏”,但 dnrd 似乎具有正确的功能集:它将 DNS 服务器标记为启动或关闭,并且不会使用“关闭”的 DNS 服务器。

Any-casting 似乎只在 IP 路由级别工作,并且依赖于服务器故障的路由更新。多播似乎是一个完美的答案,但 bind 不支持广播或多播,我能找到的文档似乎表明多播 DNS 更侧重于服务发现和自动配置,而不是常规 DNS 解析.

我错过了一个明显的解决方案吗?

Bil*_*hor 15

几个选项。两者都将在您的 DNS 服务器之间分配 DNS 负载。

  • 尝试options rotate在 resolv.conf 中使用。这将最大限度地减少主服务器停机的影响。如果其他服务器之一出现故障,则会减慢操作速度。
  • 在不同的客户端上使用不同的名称服务器顺序。如果主 DNS 服务器关闭,这将允许某些客户端正常运行。这会传播停止服务的 DNS 服务器的影响。

这些选项可以与options timeout:1 attempts:5. 如果减少超时,则增加尝试次数,以便处理速度较慢的外部服务器。

根据您的路由器配置,您可以将 DNS 服务器配置为在主 DNS 服务器关闭时接管其 IP 地址。这可以与上述技术相结合。

注意:我运行多年没有计划外的 DNS 中断。正如其他人所指出的,我将致力于解决导致 DNS 服务器失败的问题。上述步骤还有助于通过指定无法访问的名称服务器来解决配置错误的 DNS 服务器。


Nia*_*gan 4

查看“man resolv.conf”。您可以向 resolv.conf 添加超时选项。默认值为 5,但将以下内容添加到 resolv.conf 应该将其降低到 1 秒:

选项超时:1

  • 有两个大的用例需要解析:短期进程(如命令行工具)和长期进程,并且相同的解析器配置必须适用于这两种进程。对于短暂的(单次查找)设置较短的超时将很快进行故障转移。但是,如果您正在查找当时无法解析的外部地址:您将得到一个未找到的名称,因为如果该查询在一秒钟内没有返回,解析器将放弃该查询。(空间不足;更多内容见下一条评论) (2认同)