我认为用于冗余目的的 DNS 主/辅助很简单。我的理解是,您应该有一个主要和至少一个辅助,并且您应该在地理位置不同的位置设置您的辅助,但也应该在不同的路由器后面(例如参见https://serverfault.com/questions/48087 /why-are-there-several-nameservers-for-my-domain )
目前,我们的主数据中心都有两个名称服务器。最近,由于各种原因,我们遭遇了一些中断,导致两个名称服务器都瘫痪,让我们和我们的客户在几个小时内无法使用 DNS。我已要求我的系统管理员团队完成在另一个数据中心中设置 DNS 服务器并将其配置为辅助名称服务器。
但是,我们的系统管理员声称,如果其他数据中心至少不像主数据中心那样可靠,这并没有多大帮助。他们声称,当主数据中心停机时,大多数客户端仍然无法正确查找,或者超时时间过长。
就个人而言,我确信我们不是唯一一家遇到此类问题的公司,而且它很可能已经是一个已解决的问题。我无法想象所有这些互联网公司都会受到我们这种问题的影响。但是,我找不到好的在线文档来解释失败情况下会发生什么(例如,客户端超时)以及如何解决它们。
我可以用什么论据来戳穿系统管理员的推理漏洞?我可以查阅任何在线资源以更好地了解他们声称存在的问题吗?
阅读回复后的一些补充说明:
- 我们在 Linux 上
- 我们有额外的复杂 DNS 需求;我们的 DNS 条目由一些自定义软件管理,BIND 目前受制于 Twisted DNS 实现,以及混合中的一些视图。但是,我们完全有能力在另一个数据中心设置我们自己的 DNS 服务器。
- 我说的是让外人找到我们的服务器的权威 DNS,而不是我们本地客户的递归 DNS 服务器。
有一个非常棒的,虽然技术含量很高的“最佳实践”文档,在与您的系统管理员作战时可能会被证明是有用的。 http://www.cisco.com/web/about/security/intelligence/dns-bcp.html
如果他/她不承认 Cisco 撰写的文章的有效性,那么您最好停止与系统管理员争论 - 提高管理级别。
许多其他“最佳实践”文档建议不仅按 IP 块,而且按物理位置分隔主名称服务器和辅助名称服务器。事实上,RFC 2182 建议辅助 DNS 服务在地理上是分开的。对于许多公司而言,这意味着在另一个数据中心租用服务器,或订阅托管 DNS 提供商,例如ZoneEdit或UltraDNS。
啊,重点是可靠的。听起来他们正在攻击您与外部的链接,而不是设置辅助 DNS。同样,请设置辅助 DNS 并从那里继续。它将有助于减轻负载并在紧要关头支撑东西……但请询问他们为什么认为其他位置不可靠。
你不是唯一的公司,这可能已经在世界各地的公司中重复了上百万次。
您可以做各种各样的事情,包括设置一个注册为您所在区域的权威的外部 DNS 服务,但秘密地使(外部)权威服务器从属于您自己的(内部)DNS 服务器。 这个配置太可怕了,错了,说明我真的是一个邪恶的SysAdmin,每次推荐都会死一只小猫。 但它做了两件事:
这是错误的做法的原因:
不幸的是,Linux DNS 解析器似乎没有直接支持检测和执行 DNS 服务器的故障转移。它不断向您的主要解析名称服务器提供请求,等待配置的超时,再次尝试等。
这通常意味着任何请求最多延迟 30 秒。只要主服务器关闭,就无需先尝试辅助服务器。
我想解决这个问题,因为我们的许多工作人员无法访问我们的 Amazon EC2 解析名称服务器。这会导致我们的流程出现很大延迟,在某些情况下甚至会导致停机,因为我们依赖解决方案。我想要一个很好的故障转移到谷歌/Level3 域名服务器,以防亚马逊再次出现故障。并尽快退回,因为亚马逊将在适用的情况下将主机名解析为本地地址,从而以较低的延迟解决实例到实例的通信。
但无论用例如何,都需要更好的故障转移。我想解决这个问题。我想远离代理守护进程、服务等。因为那只会引入更多的单点故障。我想尽可能地使用古老而强大的技术。
我决定使用 crontab 和 bash,并写了nsfailover.sh。希望这可以帮助。
听起来问题在于客户端(可能是任何人、任何地方)看到两台 DNS 服务器,如果其中一台出现故障,它们要么不会故障转移到辅助服务器,要么在它们之前有很长的超时时间。
我同意作为最佳实践,主 DNS 服务器和辅助 DNS 服务器应该位于不同的设施中,但我不知道这将如何解决这个特定问题。
如果客户端坚持查询特定 IP 地址,而忽略辅助服务器的 IP 地址(或需要一段时间才能超时),那么您只需想出一个解决方案来保持该 IP 地址正常工作,即使主服务器已关闭。
一些探索的方向是负载均衡器,它可以将单个 IP 地址的流量重定向到不同数据中心的多个服务器;或者可能是任播路由。
只要您的每个数据中心都在不同的电路上(理想情况下,在云端有不同的上游提供商),您就可以仅使用两个数据中心设置非常可靠的 DNS。您只需要确保您选择的注册商将适当的粘合记录填充到天空中的大型服务器。
我们的设置是:
在过去的 6 或 7 年中,这种设置已经足够有效,可以为我们提供大约 5 个 9 的正常运行时间,即使服务器偶尔会因更新等而停机。如果您愿意多花一些钱,您可以查看外包与 Ultradns 之类的人一起托管该区域...
至于 KPWINC 提到的负载会话,那是 100% 正确的。如果您最小的数据中心无法处理 100% 的负载,那么无论如何您都可能会陷入困境,因为您的中断将在您最不想要的时候发生 =)
我从所有边缘路由器获取最大负载,将它们加在一起,然后除以 0.65……这是我们在每个数据中心必须拥有的最小带宽。大约 5 年前,我制定了这条规则,我从 CCO 和互联网收集了一些文件来证明它的合理性,它从未让我们失望。但是,您必须至少每季度检查一次这些统计数据。去年 11 月到 2 月,我们的客流量增加了近 3 倍,而我并没有为此做好准备。好的一面是,这种情况确实让我能够生成一些非常清晰的硬数据,这些数据表明在我们的 WAN 电路上的负载为 72% 时,我们开始丢弃数据包。我从来不需要额外的理由来获得更多带宽。
托马斯,
阅读您的更新后,我修改了我的帖子(之前的帖子参考了 Windows 软件)。
在我看来,您的系统管理员几乎是在告诉您,您的次要位置没有必要的硬件来处理全负载?
听起来他好像在说,“嘿,伙计,如果我们的主要位置(包括主要 DNS)出现故障,那么 DNS 是我们最不担心的,因为如果 COLO1 出现故障,那么 COLO2 无论如何都无法处理负载。”
如果是这种情况,那么我建议您检查您的基础架构并尝试提出更好的设计。这说起来容易做起来难,尤其是现在您生活在生产环境中。
除此之外,在一个完美的世界中,COLO1 和 COLO2 将能够独立处理您的负载。
一旦到位...... DNS 实际上只不过是拥有足够多的 DNS 服务器和足够快的刷新,如果一侧出现故障,您可以重写您的 DNS 以指向已启动的服务器。
我已经在小到合理大小的环境中使用了这种方法,并且效果很好。故障转移通常需要不到 10 分钟的时间。
您只需要确保您的 DNS 服务器可以处理短 TTL(生存时间)的额外负载。
希望这可以帮助。
我从阅读您的描述中意识到,尚不清楚您是指供外部人员查找您的服务器的权威 DNS,还是用于本地客户端的递归 DNS 服务器。两人的行为非常不同。
对于权威的 DNS 服务器,“客户端”将是其他具有缓存和大量智能的 DNS 服务器。如果第一个服务器很慢,他们会倾向于同时尝试多台服务器,并且倾向于选择能够更快回复的服务器。在这种情况下,一个数据中心的停机时间会对性能产生非常轻微的影响。
对于递归 DNS 服务器,客户端是您的本地客户端,可能在 DHCP 中列出了 DNS 服务器。他们每次都会按照列出的顺序尝试他们的服务器,在从第一台服务器移动到第二台服务器之前,会有一段痛苦的长(几秒钟)超时。
如果您的主数据中心出现故障,无论如何都没有人能够访问这些服务器,但通常来自这些服务器的错误比来自无法访问的 DNS 服务器的错误更容易理解。“无法联系服务器”或“连接超时”而不是“找不到服务器”或“没有这样的服务器”。例如,如果大多数 SMTP 服务器在 DNS 中看到该服务器但无法访问它,它们会将邮件排队一周;如果他们根本无法在 DNS 中找到它,他们可能会立即拒绝甚至尝试将其传送到您的域。
辅助 DNS 在地理上和网络上分离是一件好事。您可能可以与一家友好的公司交易辅助 DNS,并且您可以支付大量 DNS 提供商的费用来为您做这件事。一些注册商也将辅助 DNS 作为服务。
您的系统管理员(大部分)是错误的。
如果任一站点无响应,查询您的权威服务器的递归服务器将很快注意到。
是的,当出现中断时,客户端可能会遇到非常适度的 DNS 解析延迟,但它们只会是一两秒,一旦客户端自己的 DNS 服务器得知其中一个服务器已关闭,他们就会使用其余的服务器优先于失败的服务器。
如有必要(为了安抚系统管理员),请继续在您的主数据中心运行两台服务器,但至少要在外面再放置一台。
辅助 dns 服务器永远不会受到伤害,这取决于它的托管位置,它会给你或多或少的功能。
如果您的主要主机出现故障,无论它是坐在它旁边还是在远程位置,辅助主机都可以接管。但是,如果您的数据中心上行链路失败,您可能仍会从另一个数据中心的服务器获得 DNS 回复,但无论如何您将无法访问您的服务器。因此,您的最终用户不会直接受益于远程位置的辅助 DNS。
不同的客户端以其他方式对 DNS 服务器不可用做出反应,因此客户端超时是有一定道理的,但并非全部。
但是,远程数据中心中的辅助 DNS 仍然能够解析您想要访问的服务器的 IP 地址,以便您可以调试路由并查看它们何时再次出现。如果您正确设置了辅助 MX 服务器,您甚至不会丢失任何邮件。