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. 例子如下图:
你会发现,这几个NS 是放在世界不同的地区的,这可以让你的域名分析得更快。
Route53 里面有5 种域名的记录。
简单说明:
Simple - 就是一般的,跟其他的DNS没差别。
Weighted 就是可以把请求跟据weight 来分到不到的 IP , 比如你有 2 个 ip. 第一ip weight = 5, 第二ipweight = 10 那分到第一ip 的请求数就是 5+10 / 5 = 1/3。
Latency 就是把请求发到反应最快的那个服务中心 (region) **. 这个可以选内地的AWS!
Failover 就和负载均衡器做法一下,有一个healthchecker 看着你的服务器,要是服务器死了,那就不会把请求派过去。
Geolocation 就是跟据请求的发出地址,把请求分到最近的服务器。
我觉得AWSroute53 跟其他的DNS 最大差别就是
1. Route53 有healthchecker,根据health checker 反应做出相应动作。 2. Route53 支持Fail over 3. Route53 的一切都可以用API定义,那就是说可以跟据你写的程序动态改变。
Health checker 是一款给DNS 定制的 monitor 工具。
有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的理解。