AWS Route53 深度分析——如何实现全局负载均衡GSLB (Global server Load balancing)

近日,我在研究远程的,不使用云网络负载均衡器 Elastic Loadbalancer 的其他负载均衡的方法。

从AWS角度,在多区域下进行负载均衡的这个方法,有个学名叫全局负载均衡GSBL(Global Server Load Balancing),就是实现在广域网(包括互联网)上不同地域的服务器间的流量调配,保证使用最佳的服务器服务离自己最近的客户,从而确保访问质量。

当然,对此,GSBL有企业级的应对方法,也由自己就可以动手完成的解决方案。

在这里,我就简单说一下如果在AWS实现全部负载均衡GSBL。

AWS 中的Route53 是一个多功能的云端 DNS (域名服务器)。你只要在上面写入一个域名, 它会生成 4 个上级域名(NS) ,给你写到购买域名时的供应商做域名转移。比如 GoDaddy / who.is / DNSpod. 例子如下图:
AWS Route53 深度分析——如何实现全局负载均衡GSLB (Global server Load balancing)

你会发现,这几个NS 是放在世界不同的地区的,这可以让你的域名分析得更快。

Route53 里面有5 种域名的记录。
AWS Route53 深度分析——如何实现全局负载均衡GSLB (Global server Load balancing)

简单说明:

  1. Simple - 就是一般的,跟其他的DNS没差别。

  2. Weighted 就是可以把请求跟据weight 来分到不到的 IP , 比如你有 2 个 ip. 第一ip weight = 5, 第二ipweight = 10 那分到第一ip 的请求数就是 5+10 / 5 = 1/3。

  3. Latency 就是把请求发到反应最快的那个服务中心 (region) **. 这个可以选内地的AWS!
    AWS Route53 深度分析——如何实现全局负载均衡GSLB (Global server Load balancing)

  1. Failover 就和负载均衡器做法一下,有一个healthchecker 看着你的服务器,要是服务器死了,那就不会把请求派过去。

  2. Geolocation 就是跟据请求的发出地址,把请求分到最近的服务器。

我觉得AWSroute53 跟其他的DNS 最大差别就是

1.  Route53 有healthchecker,根据health checker 反应做出相应动作。
2.  Route53 支持Fail over
3.  Route53 的一切都可以用API定义,那就是说可以跟据你写的程序动态改变。

Health checker 是一款给DNS 定制的 monitor 工具。
AWS Route53 深度分析——如何实现全局负载均衡GSLB (Global server Load balancing)

有http / https / TCP。AWS 建议是 30秒更新一次。但可以选 10 秒。这裡问题是,如果你少于 30, 一般情况下会搞得服务器很忙,不建议。要是你选 10 秒,那基本上,每一秒都会给 PING 着。

原生是要FAIL 3 次,域名才会更动。但要是 30 *3 ,一分半的时间,才 failover有点长。所以我建议在 failture threshold 是1/2。

因为是DNS failover, 技术上原生就有一个问题: 就是已经被 DNS cache 的IP ,即使 fail over 也不会给更改。解决方法是依靠新型的溜览器的 failover 功能做这件事。我在Chrome 下测的 failover 没有任何问题。但在命令行的ping / nslookup 的确要等很长时间。所以建议这个DNS 的 failover 现在只用作网站会合理一些。

正如本文想表明的主题,如何实现全局负载均衡GSLB, 那很简单,基于 Route53 Failover 上,加上Simple / Weighted 的多IP Record Set 就行。这裡有一个小小的不方便,就是weighted 的记录要一条一条的加。

还有现在暂不支持CNAME,只支持IP. 但要是我们想用代码控制一个高可用环境时,用系统生成的域名是个很流行的做法。希望 AWS 将来可以支持 Route53 Load balanced CNAME.
AWS Route53 深度分析——如何实现全局负载均衡GSLB (Global server Load balancing)

以上就是我对AWS Route53 如何实现全局负载均衡GSLB的理解。

相关推荐