比方说,我有一个给定的域的2个IP(循环赛DNS)。
如果一个IP变得没有响应,客户端是否会尝试连接到另一个IP? 或者他们只是不能build立与域的沟通?
DNS循环不是负载均衡器的好替代品。 DNS服务器将继续分发closures的节点的IP,因此一些用户将获得您的服务,其中一些用户不会。
当客户端进行DNS查询时,DNS服务器将返回与该名称关联的所有 IP地址。 神奇的是由DNS服务器为每个查询旋转该列表的顺序。 然而,实施在列表中“行走”的能力取决于应用程序,直到find可用的IP为止。 而大多数应用程序不这样做。
奇怪的是,Windows Telnet就是一个足够聪明的应用程序,可以遍历返回的IP链表。 例如,如果您尝试telnet到google.com,则可以自己查看此行为。 你会注意到最后的失败需要很长的时间。 那是因为google.com有很多的IP地址,而且telnet客户端正在尝试每一个。
使用Load Balancer仍然会导致单点故障。 如果您的负载均衡器脱机,您的网站就会closures。
与上述答案相比,大多数HTTP客户端已经支持尝试从DNS查询返回的每个IP地址,直到返回一个有效的响应。 请看这里:
http://blog.engelke.com/2011/06/07/web-resilience-with-round-robin-dns/
看来,作者已经testing了以下浏览器,发现他们工作正常。
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 2.3.3上的Android本机浏览器
iOS 4.3.3上的iPhone本机浏览器
使用循环不会执行负载平衡服务器的所有function,例如能够监视来自两个服务器的响应时间,并将更多stream量路由到另一个服务器(如果另一个没有响应)。 对于弹性,我会说循环DNS是一个更好的解决scheme,因为不再有单点故障。
虽然循环DNS通常不会反馈到提供地址的服务器的状态,但是如果您为每个地址都有某种负载平衡器(包括基于路由器的技巧),则可能会有所帮助。
有些技巧会在事情失败时更新DNS; 如果发生这种情况,具有适当短的TTL的循环DNS可以是伪负载均衡器。