循环 DNS 是实现高可用性的可能解决方案吗?

Get*_*ree 9 domain-name-system high-availability redundancy fault-tolerance round-robin

假设我有给定域的 2 个 IP(循环 DNS)。
如果一个 IP 变得无响应,客户端是否会尝试连接到另一个 IP?或者他们将无法与域建立通信?

小智 18

使用负载均衡器仍然会留下单点故障。如果您的负载均衡器离线,您的网站就会关闭。

Conterary上述答案,大多数HTTP客户端已经DO支持,试图从一个DNS查询返回到一个有效的响应的一个回报每一个IP地址。请看这里:

http://blog.engelke.com/2011/06/07/web-resilience-with-round-robin-dns/

看来作者已经测试了以下浏览器并发现它们可以正常工作。

Windows 7 上的 Chrome 11 Windows 7 上的
Firefox 4.0 Windows 7 上的
Internet Explorer 8 Windows 7 上的
Opera 11 Windows 7 上的
Safari 5
Windows XP 上的 Internet Explorer 7(明显延迟后)
Windows XP 上的 Firefox 4.0(明显延迟后)
Android 原生浏览器在 Android 2.3.3 上
iPhone 原生浏览器 在 iOS 4.3.3 上

使用轮询无法完成负载平衡服务器的所有功能,例如能够监视来自两台服务器的响应时间,并将更多流量路由到一台服务器,如果另一台服务器响应速度不够快)。对于弹性,我会说循环 DNS 可能是更好的解决方案,因为不再存在单点故障。


Rya*_*ies 13

DNS 循环不能很好地替代负载平衡器。DNS 服务器将继续分发已关闭节点的 IP,因此您的一些用户将获得您的服务,而其中一些则不会。

当客户端进行 DNS 查询时,DNS 服务器返回与该名称关联的所有IP 地址。魔术是通过 DNS 服务器为每个查询轮换该列表的顺序来完成的。但是,由应用程序实现“遍历”列表的功能,直到找到一个有效的 IP。大多数应用程序不会这样做。

奇怪的是,Windows Telnet 就是这样一种应用程序,它足够聪明,可以遍历返回 IP 的链接列表。例如,如果您尝试 telnet 到 google.com,您可以自己看到这种行为。您会注意到最终失败需要很长时间。那是因为 google.com 有很多 IP 地址,而 telnet 客户端正在尝试每一个。

  • 这完全取决于应用程序。例如,如果我们谈论 Web 浏览器,大多数现代 Web 浏览器将遍历列表直到成功,某些浏览器(通常是较旧的浏览器)在尝试第一个不成功的 IP 后就会失败。更多信息:http://www.nber.org/sys-admin/dns-failover.html 和 http://blog.engelke.com/2011/06/07/web-resilience-with-round-robin-dns (12认同)
  • 大多数应用程序*会*尝试不同的 IP 地址。 (2认同)