大家好,又见面了,我是你们的朋友全栈君。
采用全局负载均衡(GSLB)的前提是在不同地区设立多个数据中心,业务已经做了分布式部署的规划,无论用户从哪个IDC访问都能得到相同的结果,或者用户基本不会出现跨区域流动访问的情况,只会访问就近IDC。
解析步骤
1.用户向本地DNS服务器发出查询请求,如果本地DNS服务器有该域名的缓存记录,如果本地DNS服务器有该域名的缓存记录,则返回给用户,否则进行第2步
2.本地DNS服务器进行递归查询,最终会查询到域名注册商处的授权DNS服务器
3.授权DNS服务器其返回一条NS记录给本地DNS服务器。根据授权DNS服务器上的不同设置,这条NS记录可能指向随机一个GSLB设备的接口地址或者是所有GSLB设备的接口地址
4.本地DNS服务器向其中一个GSLB地址发出域名查询请求,如果请求超时会向其他地址发出查询
5.GSLB设备选出最优解析结果,返回一条A记录给本地DNS服务器。根据全局负载均衡策略设定的不同可能返回一个或者多个VIP地址
6.本地服务器将查询结果通过一条记录返回给用户,并将缓存这条记录
通过DNS解析报文中的TTL(Time To Live)字段可以控制客户端缓存这条记录的时间,在缓存时间内客户端会使用旧的查询结果,当缓存时间超时后才可能重新发出查询,TTL值过大会导致故障发生时切换时间过长,TTL值太小会造成查询频繁,对设备和网络的压力增大。
局限性
请注意GSLB设备收到的DNS请求的源地址不是用户的地址而是用户所配置的本地DNS服务器地址,而GSLB的就进性探测是根据这个地址来判断的,在我国大多数ADSL拨号上网用户都能就近分配正确的数据中心,但是当用户用户通过4G移动网络上网的情况下,客户会一直使用归属地的DNS服务器,或这手动设定本地DNS而设置的DNS距离用户较远的情况,GSLB不能分配最佳的地址。这种情况很常见,国内有很多人使用google的公有dns或者opendns。
这种情况可以使用重定向来解决,SLB设备正式收到用户发来的请求时,会再次查找就进性表,当发现用户的最佳访问节点非自己时,通过http 302重定向来再次引导用户流量。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/145900.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...