作为他非常受欢迎的问题的后续问题:为什么不推荐 DNS 故障转移?,我认为大家一致认为,由于缓存,DNS 故障转移并非 100% 可靠。
然而,投票最高的答案并没有真正讨论在两个不同数据中心之间实现故障转移的更好解决方案。提出的唯一解决方案是本地负载平衡(单个数据中心)。
所以我的问题很简单,跨数据中心故障转移的真正解决方案是什么?
作为他非常受欢迎的问题的后续问题:为什么不推荐 DNS 故障转移?,我认为大家一致认为,由于缓存,DNS 故障转移并非 100% 可靠。
然而,投票最高的答案并没有真正讨论在两个不同数据中心之间实现故障转移的更好解决方案。提出的唯一解决方案是本地负载平衡(单个数据中心)。
所以我的问题很简单,跨数据中心故障转移的真正解决方案是什么?
这开始是作为评论......但它变得太长了。
可悲的是,前一个问题的大部分答案都是错误的:他们假设故障转移与 TTL 有关。投票最高的答案是错误的,特别是没有引用任何来源。TTL 应用于整个区域记录,与 Round Robin 无关。
来自 RFC 1794(这是关于循环 DNS服务的全部内容)
(IME 在你得到完全传播之前接近 3 小时)。
来自 RFC 1035
RFC 1034 规定了负缓存的要求——一种指示所有请求必须从权威 DNS 服务器新鲜提供的方法(在这种情况下,TTL 确实控制故障转移)——根据我的经验,对此的支持各不相同。
由于任何故障转移都必须在客户端堆栈的高层实施,因此可以说它不是 TCP/IP 或 DNS 的一部分——实际上,SIP、SMTP、RADIUS 和其他运行在 TCP/IP 之上的协议定义了客户端应该如何与 Round 一起工作Robin - RFC 2616 (HTTP/1.1) 值得注意的是没有提及它应该如何表现。
然而,根据我的经验,在过去 10 年中编写的每个浏览器和大多数其他 HTTP 客户端都会透明地检查额外的 A RR,如果连接似乎花费的时间比预期的要长。不仅仅是我:
故障转移时间因实施而异,但在几秒钟内。这不是一个理想的解决方案,因为(由于 DNS 的限制)失败节点的发布采用 DNS TTL - 同时你必须依赖客户端检测。
Round-Robin 不能替代站点内的其他 HA 机制。但它确实是对它的补充(编写 HAProxy 的人建议使用一对通过循环 DNS 访问的安装)。它是跨多个站点实现 HA 的最佳受支持机制:事实上,据我所知,它是标准客户端上可用的唯一受支持的故障转移机制。
整个数据中心需要停机或无法访问才能应用。然后通过将 IP 地址路由到另一个数据中心,可以访问您在另一个数据中心的备份。这将通过不再提供来自主数据中心的 BGP 路由公告来实现。然后将使用来自辅助数据中心的辅助公告。
较小的企业通常不够大,无法证明便携式 IP 地址分配的费用和他们自己的自治系统编号来宣布 BGP 路由。在这种情况下,提供者将多个位置是可行的方法。
您要么必须通过原始 IP 地址联系到您,要么通过 DNS 更改 IP 地址联系到您。由于 DNS 的设计目的不是按照“故障转移”所需的方式执行此操作(用户可能至少在您的 TTL 或某些缓存服务器强加的 TTL 内无法访问),因此转到备份站点相同的 IP 是最好的解决方案。
双 DC 冗余的最简单方法是在两个站点之间使用 L2 MPLS VPN,同时维护两个站点之间的 BGP 会话。
然后,您基本上可以为每个服务器拥有一个物理 IP 和一个在两者之间浮动的虚拟 IP(HSRP/VRRP/CARP 等)。您的 DNS 将被路由到这个特定的 IP 并相应地定向。
下一个考虑因素是脑裂——但这是另一个问题了。
Juniper 写了一篇关于使用 MPLS 进行双 DC 管理的优秀白皮书,您可以在此处获取 PDF http://www.juniper.net/us/en/local/pdf/whitepapers/2000407-en.pdf