![DNS 负载平衡选项](https://linux22.com/image/704844/DNS%20%E8%B4%9F%E8%BD%BD%E5%B9%B3%E8%A1%A1%E9%80%89%E9%A1%B9.png)
我已经组装了一个高可用性系统,如下图所示:
DNS RR -> Balancer1
\
\
HAproxy1 ---> Backend Servers
HAproxy2 ---> Backend Servers
HAproxy3 ---> Backend Servers
/
/
DNS RR -> Balancer2
简而言之:两个带有 VIP 的负载均衡器接收来自客户端的请求,然后将其分配给 3 个充当 SSL 卸载和后端平衡的 HAproxy 服务器。
我现在的问题是 DNS RR。它有其优点,但我正在寻找更好的解决方案来在 Balancer1 和 Balancer2 之间分配客户端。有什么建议吗?
PS:GeoDNS 不是一个选项。
答案1
您可以使用 CDN 作为面向用户的客户端。然后,您将利用 CDN 的功能在 Balancer 主机之间进行负载平衡。这可能包括 DNS RR,但是 CDN 的配置是已知的并可管理的,因此您可以确信 CDN 将正确响应后端更改。
例如,您可以使用 Akamai CDN 路由用户请求。然后,您可以使用 Akamai Global Traffic Manager (GTM) 来控制 Akamai 使用哪些来源。它们具有“故障转移”和“循环”功能,您可以使用,并且 Akamai 的健康检查器将管理哪些来源可用。如果它们在与您的来源通信时遇到错误,它们还可以重试请求。
Amazon Cloudfront + Route53“加权”记录+Route53 健康检查以类似的方式实现此目的。
即使您的内容不可缓存,这种方法也能奏效,因为 CDN 不必专门用于可缓存内容。它的好处是将用户带入您在“边缘”附近控制的生态系统,并且排除 CDN->源连接故障比排除未知用户->源连接故障要容易得多。
由于您可以在边缘应用过滤器,因此此路由还为您提供了一定程度的 DoS 保护。