从阅读来看,似乎不推荐 DNS 故障转移,因为 DNS 不是为它设计的。但是,如果您在托管冗余内容的不同子网上有两台网络服务器,那么如果一台服务器出现故障,还有哪些其他方法可以确保所有流量都路由到实时服务器?
在我看来,DNS 故障转移似乎是这里唯一的故障转移选项,但大家一致认为这不是一个好的选择。然而像 DNSmadeeasy.com 这样的服务提供了它,所以它必须有优点。任何意见?
从阅读来看,似乎不推荐 DNS 故障转移,因为 DNS 不是为它设计的。但是,如果您在托管冗余内容的不同子网上有两台网络服务器,那么如果一台服务器出现故障,还有哪些其他方法可以确保所有流量都路由到实时服务器?
在我看来,DNS 故障转移似乎是这里唯一的故障转移选项,但大家一致认为这不是一个好的选择。然而像 DNSmadeeasy.com 这样的服务提供了它,所以它必须有优点。任何意见?
通过“DNS 故障转移”,我认为您的意思是 DNS 循环与一些监控相结合,即为 DNS 主机名发布多个 IP 地址,并在监控检测到服务器关闭时删除死地址。这对于小型、流量较少的网站是可行的。
根据设计,当您响应 DNS 请求时,您还为您发出的响应提供了生存时间 (TTL)。换句话说,您是在告诉其他 DNS 服务器和缓存“您可以存储此答案并使用它 x 分钟,然后再与我联系”。缺点由此而来:
获得良好正常运行时间的更常见方法包括:
极少数网站使用多数据中心设置,在数据中心之间进行“地理平衡”。
DNS 故障转移肯定效果很好。多年来,我一直在使用它来手动转移数据中心之间的流量,或者在监控系统检测到中断、连接问题或服务器过载时自动转移。当您看到它的运行速度以及可以轻松转移的真实世界流量时,您将永远不会回头。我使用 Zabbix 来监控我的所有系统,并且显示在 DNS 故障转移情况下发生的情况的可视化图表解决了我所有的疑问。可能有一些 ISP 忽略了 TTL,并且仍然有一些用户使用旧浏览器 - 但是当您查看来自 2 个数据中心位置的每天数百万页面视图的流量并且您进行 DNS 流量转移时 -忽略 TTL 的剩余流量是可笑的。
DNS 不是为故障转移而设计的 - 但它设计有 TTL,当与可靠的监控系统结合使用时,可以为故障转移需求提供惊人的工作。TTL 可以设置得很短。我在生产中有效地使用了 5 秒的 TTL 来减轻基于快速 DNS 故障转移的解决方案。您必须拥有能够处理额外负载的 DNS 服务器 - 并且命名不会削减它。但是,当在冗余名称服务器上使用 mysql 复制数据库支持时,powerdns 符合要求。您还需要一个可靠的分布式监控系统,您可以信任它来进行自动故障转移集成。Zabbix 为我工作——我几乎可以立即验证来自多个分布式 Zabbix 系统的中断——即时更新 powerdns 使用的 mysql 记录——并在中断和流量高峰期间提供几乎即时的故障转移。
但是,嘿 - 经过多年为大公司服务后,我建立了一家提供 DNS 故障转移服务的公司。因此,请对我的意见持保留态度。如果您想在中断期间查看一些高容量站点的 zabbix 流量图 - 亲自了解 DNS 故障转移的工作原理 - 给我发电子邮件,我非常乐意分享。
DNS 故障转移的问题在于,在许多情况下,它是不可靠的。一些 ISP 会忽略您的 TTL,即使他们确实尊重您的 TTL,也不会立即发生这种情况,并且当您的网站恢复运行时,当用户的 DNS 缓存超时时,它可能会导致会话出现一些奇怪的情况,并且他们最终会前往到另一台服务器。
不幸的是,这几乎是唯一的选择,除非你足够大,可以自己(外部)路由。
普遍的观点是,使用 DNS RR,当 IP 出现故障时,一些客户端将继续使用损坏的 IP 数分钟。这在该问题的一些先前答案中已说明,并且也写在维基百科上。
反正,
http://crypto.stanford.edu/dns/dns-rebinding.pdf解释说,对于大多数当前的 HTML 浏览器来说,情况并非如此。他们将在几秒钟内尝试下一个 IP。
http://www.tenereillo.com/GSLBPageOfShame.htm似乎更强大:
也许一些专家可以评论并更清楚地解释为什么 DNS RR 不利于高可用性。
谢谢,
华伦天奴
PS:抱歉链接断开,但作为新用户,我不能发布超过 1 个
多年来,我在一个流量适中但业务关键型网站(跨越两个地区)上运行 DNS RR 故障转移。
它工作得很好,但我至少学会了三个微妙之处。
1) 如果在客户端可用的任何缓存 DNS 中两者都被认为是活动的,则浏览器将在 30 秒后(我上次检查)从非工作 IP 故障转移到工作 IP。这基本上是一件好事。
但是让“一半”的用户等待 30 秒是不可接受的,因此您可能希望将 TTL 记录更新为几分钟,而不是几天或几周,以便在出现中断时,您可以快速移除停机服务器来自您的 DNS。其他人在他们的回应中提到了这一点。
2)如果您的一个名称服务器(或您的两个地理区域之一)出现故障,它正在为您的循环域提供服务,并且如果其中一个主要服务器出现故障,我隐约记得您可能会遇到其他问题,试图删除它如果您还没有将名称服务器的 SOA TTL/到期时间设置为足够低的值,则会从 DNS 中关闭名称服务器。我可能在这里弄错了技术细节,但要真正防御单点故障,您需要正确设置的 TTL 设置不止一个。
3) 如果您发布 Web API、REST 服务等,这些通常不会被浏览器调用,因此在我看来,DNS 故障转移开始显示出真正的缺陷。这可能就是为什么有人说,正如您所说的“不推荐”。这就是我这么说的原因。首先,使用这些 URL 的应用程序通常不是浏览器,因此它们缺乏常见浏览器的 30 秒故障转移属性/逻辑。其次,是否调用第二个 DNS 条目甚至是否重新轮询 DNS 在很大程度上取决于这些 API/REST 客户端使用的编程语言中网络库的低级编程细节,以及它们是如何被调用的。 API/REST 客户端应用程序。(在他们的介绍下,库是否调用 get_addr,何时调用?如果套接字挂起或关闭,应用程序是否会重新打开新的套接字?是否有某种超时逻辑?等等)
它便宜,经过良好测试,并且“大部分都有效”。因此,与大多数事情一样,您的里程可能会有所不同。
有很多人使用我们 (Dyn) 进行故障转移。这与网站可以在停机时创建状态页面的原因相同(想想 Twitter 的 Fail Whale 之类的事情)……或者只是根据 TTL 重新路由流量。有些人可能认为 DNS 故障转移是贫民窟……但我们从一开始就认真设计了具有故障转移功能的网络……这样它就可以像硬件一样工作。我不确定 DME 是如何做到的,但我们最近的 17 个任播 PoP 中有 3 个从最近的位置监控您的服务器。当它从三个中的两个中检测到它已关闭时,我们只需将流量重新路由到另一个 IP。唯一的停机时间是那些在该 TTL 间隔的剩余时间内请求的停机时间。
有些人喜欢同时使用两台服务器……在这种情况下,可以执行循环负载平衡……或基于地理的负载平衡。对于那些真正关心性能的人......我们的实时流量管理器将监控每台服务器......如果一个服务器较慢......根据您在主机名中链接的 IP 将流量重新路由到最快的服务器。再次...这基于您在我们的 UI/API/Portal 中设置的值。
我想我的意思是……我们故意设计了 dns 故障转移。虽然 DNS 在最初创建时并未用于故障转移……我们的 DNS 网络旨在从一开始就实施它。它通常可以像硬件一样有效......没有折旧或硬件成本。希望这不会让我对插入 Dyn 感到蹩脚……还有很多其他公司这样做……我只是从我们团队的角度发言。希望这可以帮助...
另一种选择是在位置 A 中设置名称服务器 1,在位置 B 中设置名称服务器 2,但是设置每个名称服务器,以便 NS1 上的所有 A 记录都指向位置 A 的 IP,而在 NS2 上,所有 A 记录都指向位置 A 的 IP位置 B. 然后将您的 TTL 设置为一个非常低的数字,并确保您在注册商处的域记录已为 NS1 和 NS2 设置。这样,它会自动进行负载平衡,并在一台服务器或一个指向某个位置的链接出现故障时进行故障转移。
我以稍微不同的方式使用了这种方法。我有一个有两个 ISP 的位置,并使用这种方法来引导每个链接上的流量。现在,它可能比您愿意做的维护要多一些……但我能够创建一个简单的软件,它可以自动提取 NS1 记录,更新选定区域的 A 记录 IP 地址,并将这些区域推送到NS2。
另一种方法是基于 BGP 的故障转移系统。设置起来并不简单,但它应该是防弹的。在一个位置设置站点 A,第二个站点 B 全部使用本地 IP 地址,然后获取 C 类或其他可移植的 IP 块,并设置从可移植 IP 到本地 IP 的重定向。
有一些陷阱,但如果您需要这种级别的控制,它比基于 DNS 的解决方案要好。
多数据中心故障转移的一种选择是培训您的用户。我们向客户宣传我们在多个城市和我们的注册电子邮件中提供多台服务器,其中包括直接指向每个“服务器”的链接,以便用户知道如果一台服务器出现故障,他们可以使用指向另一台服务器的链接。
这完全通过维护多个域名绕过了 DNS 故障转移的问题。访问 www.company.com 或 company.com 并登录的用户将被定向到 server1.company.com 或 server2.company.com,如果他们发现使用其中一个或另一个获得更好的性能,则可以选择将其中任何一个加入书签. 如果一个服务器出现故障,用户将接受培训以转到另一台服务器。
所有这些答案对他们都有一定的道理,但我认为这真的取决于你在做什么以及你的预算是多少。在 CloudfloorDNS,我们很大一部分业务是 DNS,不仅提供快速 DNS,还提供低 TTL 选项和 DNS 故障转移。如果这不起作用并且运作良好,我们将无法开展业务。
如果您是一家拥有无限正常运行时间预算的跨国公司,是的,硬件 GSLB 负载平衡器和 1 层数据中心很棒,但您的 DNS 仍然需要快速且坚如磐石。众所周知,DNS 是任何基础设施的一个关键方面,除了域名本身之外,它是您在线展示的所有其他部分所依赖的最低级别的服务。从可靠的域名注册商开始,DNS 与不让您的域名过期一样重要。DNS 出现故障,这意味着您组织的整个在线方面也出现故障!
使用 DNS 故障转移时,其他关键方面是服务器监控(始终要检查多个地理位置,并且始终应检查多个(至少 3 个)以避免误报)和正确管理 DNS 记录(检测到故障)。低 TTL 和故障转移的一些选项可以使这个过程成为一个无缝的过程,并且如果你是一个系统管理员,那么在半夜醒来一个寻呼机时会比这更糟糕。
总体而言,DNS 故障转移确实有效,而且价格实惠。在大多数情况下,从我们或大多数托管 DNS 提供商处,您将获得 Anycast DNS 以及服务器监控和故障转移,而成本只是硬件选项的一小部分。
所以真正的答案是肯定的,它有效,但它适用于每个人和每个预算吗?也许不是,但在您尝试并自己进行测试之前,如果您是一家 IT 预算有限且希望尽可能获得最佳正常运行时间的中小型企业,那么您很难忽视这一点。