现代 DNS 负载平衡解决方案

现代 DNS 负载平衡解决方案

我正在学习分布式系统,现在正在研究 DNS 负载平衡主题。

我有几台 Linux 服务器,我想设置下一个配置:

  1. 一个 DNS 负载均衡器,用于解析负载较少的服务器的 IP 地址;
  2. 多个应用服务器处理用户请求并将自己的负载统计信息发送到 DNS 负载均衡器。

我在谷歌上搜索了一段时间,找到了命名似乎是根据动态域名解析idea 并做我需要的事情。令我困惑的是,它似乎停滞了一段时间(自 2006 年以来没有更新),尽管有评论说它存在一些问题。而且我找不到任何其他解决方案。所以我想也许我在谷歌上搜索错了,或者这种功能可能包含在一些广泛使用的应用程序中,例如 bind。

所以我的问题是:DNS 负载平衡方法现在是否实用,以及可以使用哪些现代解决方案(应用程序)?

提前致谢!

答案1

大多数基于 DNS 的负载平衡并不适用于单个数据中心内的集群,但更多时候用于将用户指向地理位置较近的应用程序实例。

DNS 的问题在于记录被缓存,通常比 TTL 还要长,这意味着当您更新集群和 DNS 的配置时,客户端仍可能会被定向到不活动/无响应的节点。

这意味着,在 DNS 缓存被清除期间,越来越小比例的用户会遇到暂时性问题。

这可以完全接受,也可以不接受。这还取决于您的应用程序是公开的还是在企业内联网上,并且您的客户端是否仅使用 Active Directory 域控制器作为 DNS 服务器。

DNS 负载平衡的第二个可能的问题是,许多用户可能使用单个缓存名称服务器,因此名称服务器收到的 DNS 查询数量可能与您收到的请求数量无关。

所以不,在您的情况下,您最好使用第 3 层,网络负载平衡或可能像 HAproxy 之类的东西,而不是 DNS 负载平衡。

答案2

就我个人而言,我永远不会使用基于 DNS 的负载平衡。最重要的原因是 ISP 和客户端机器上有太多行为不当的解析器。例如,这些解析器可以忽略 TTL,从而缓存 DNS 答案并可能返回错误答案。由于您无法正确影响这些事情,我宁愿不依赖它们来使负载平衡正常工作。

我见过的所有负载平衡设置(F5,A10和keepalived等开源工具)都对TCP会话(或UDP,ICMP)进行负载平衡。

答案3

“负载平衡”虽然在历史上并不是“真正的”平衡,但如今,基于 DNS 的负载平衡已成为高容量、高可用性解决方案的必要且非常有效的部分(第一层)。

DNS 层能够根据客户端的地理位置(GeoIP)解析客户端的 DNS 名称,从而将响应时间缩短几百毫秒。

这在几年前是不可能的,当时 DNS 负载平衡或穷人的平衡意味着具有多个 IP 的单个 DNS A 记录。这些 IP 本身甚至不是负载平衡器(就像您今天看到的运行 CARP/VRRP/HSRP/等),但它们是实际的端点 Web 服务器!!!!在这种模型下,任何一台服务器宕机都会导致所有流量的一小部分被黑洞。

如今,使用复杂的 DNS 作为其自身的 HA 层是非常有效的。例如,aws route53 使用不符合 rfc 的“A/ALIAS”记录,将顶级域名与 ELB 绑定,以实现大规模的可扩展性和正常运行时间。(不,我不为 aws 工作)但是,还有其他几家提供商可以根据距离客户端最近的、可以为请求提供服务的数据中心,将您的 DNS 解析为客户端请求。

http://dyn.com/managed-dns/

http://aws.amazon.com/route53/

相关内容