基于DNS的负载均衡

1.通过CNAME方式实现负载均衡
 CNAME记录是描述一个域名或主机名的别名,域名服务器获得CNAME记录后,就会用记录中的别名来替换查找的域名或主机名.后面会查询这个别名的A记录来获得相应的IP地址,如:
 先将GSLB的主机名定义为所查询域名的权威DNS服务器的别名,然后将GSLB主机名添加多条A记录,分别对应多个服务器的IP地址.
 这样本地服务器会向客户端返回多个IP地址作为域名的查询结果,并且这些IP地址的排列顺序是轮换的.客户端一般会选择首个IP地址进行访问.
 因为不需要更改公共DNS系统的配置,所以通过CNAME方式实现负载均衡是目前业界使用最多的方式.

2.负载均衡器作为权威DNS服务器
 这种方式是把负载均衡器作为一个域名空间的权威DNS服务器,这样负载均衡器就会接收所有对这个域的DNS请求,从而能够根据预先设置的一些策略来提供对域名的智能DNS解析.
 此时,负载均衡器已经接管了权威DNS服务器的所有解析工作,无论用户访问的网站是否是进行解析的域名,其DNS请求都会被发送到负载均衡器上,所以整个域的DNS解析能力或多或少都会受到影响,影响的程度取决于负载均衡器的实现的DNS功能的程序,因产品而异.

3.负载均衡器作为代理DNS服务器
 在这种方式下,负载均衡器被注册为一个域名空间的权威DNS服务器,而真正的权威域名服务器则部署在负载均衡器后面.所有的DNS请求都会先到达负载均衡器,由负载均衡器转发至真正的权威DNS服务器,然后修改权威DNS服务器返回的响应信息,从而实现负载均衡功能.
 为实现这一过程,首先要将对外公布的权威DNS服务器的地址注册成负载均衡器上的VIP地址.真正的权威DNS服务器正常响应浏览器的DNS请求,返回域名解析结果列表,这个响应会先发送到负载均衡器,而负载均衡器会根据自己的策略选择一个性能最好的服务器IP并修改DNS服务器的应答信息,然后将应答信息转发给客户.负载均衡器只修改需要实现GSLB的域名的DNS查询响应,对其他请求透明转发,这样就不会影响整个域名空间的解析性能.
 在代理方式下,如果权威DNS服务器负载均衡器相隔很远,那么负载均衡器向权威DNS服务器转发DNS请求时就会产生额外的延时.解决这个问题的办法是,在负载均衡器上对DNS响应进行缓存,在缓存失效时间之前,对于之前已经从权威DNS服务器上获得过DNS响应的同一域名,就可以直接进行GSLB计算,响应用户DNS请求,不用去访问远程的权威DNS服务器了
 需要注意的是,在基于DNS方式下无论采用何种工作方式,都会有一些请求不会到达GSLB,这是DNS系统本身的缓存机制在起作用.当用户请求的域名在本地DNS或本机就得到了解析结果,这些请求就不会到达GSLB.Cache更新时间越短,用户请求到达GSLB的几率越大.由于DNS的缓存机制屏蔽掉相当一部分用户请求,从而大大减轻了GSLB处理压力,使得系统抗流量冲击能力显著提升,这也是很多商业CDN选择DNS机制做全局负载均衡的原因之一.但弊端在于,如果在DNS缓存刷新间隔之内系统发生影响用户服务的变化,比如某个节点故障,某个链路拥塞等,用户依然会被调度到故障部位去.

猜你喜欢

转载自xiangjie88.iteye.com/blog/2227041