需求
- 高可用
- 跨地域,多活的数据中心
实现
如下图所示,即可完成上面的需求。
为什么是这样的拓扑
- 首先针对关键应用,部署3个服务。
- 在3个服务上有一层负载均衡。即loadbalancer service。每个service通过service controller来配置一个外部的负载均衡器。并且把负载均衡器分配的ip写回到service的地址里。这样在每一个图中App Tiler LB都有一个虚ip来指向后端pod。外部直接访问虚ip即可访问后端服务。
- dns本身有ttl的问题。如果直接在LB上挂dns的话,region的网络故障导致网络不通,这样通过dns到这个region的请求都会失败。如果客户端缓存了这个region的LB dns记录,那么请求仍然会发到这个失败的region上面,这样切流量是失败的。一般dns记录可能持续几分钟或者几十分钟才会失效,故障就会被放大。
- 为了解决ttl的问题,在APP Tiler LB也就是vip上面再挂一层Web Tiler LB。这层LB除了指向本region的下层LB地址,还会指向其他region的LB vip。
- 这样当region1出现故障时,只需要在上层LB上把指向region1 vip的流量切掉,这样故障就会从分钟级降到了秒级。
- 在上层LB上使用weight的负载均衡策略,99%的流量进到本地,1%的流量到其他region。这样99%的流量都是高效的。
- 在上层LB上再挂dns。