转自 : http://network.51cto.com/art/201004/195417.htm 

对于负载均衡的一个典型应用就是DNS负载均衡。庞大的网络地址和网络域名绝对是负载均衡体现优势的地方。那么它的具体原理是如何的呢?本文就将为大家详细介绍一下相关内容。

DNS负载均衡

DNS负载均衡技术是在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。

DNS负载均衡的优点是经济简单易行,并且服务器可以位于internet上任意的位置。但它也存在不少缺点:

为了使本DNS服务器和其他DNS服务器及时交互,保证DNS数据及时更新,使地址能随机分配,一般都要将DNS的刷新时间设置的较小,但太小将会使DNS流量大增造成额外的网络问题。

一旦某个服务器出现故障,即使及时修改了DNS设置,还是要等待足够的时间(刷新时间)才能发挥作用,在此期间,保存了故障服务器地址的客户计算机将不能正常访问服务器。

DNS负载均衡采用的是简单的轮循负载算法,不能区分服务器的差异,不能反映服务器的当前运行状态,不能做到为性能较好的服务器多分配请求,甚至会出现客户请求集中在某一台服务器上的情况。

要给每台服务器分配一个internet上的IP地址,这势必会占用过多的IP地址。

判断一个站点是否采用了DNS负载均衡的最简单方式就是连续的ping这个域名,如果多次解析返回的IP地址不相同的话,那么这个站点就很可能采用的就是较为普遍的DNS负载均衡。但也不一定,因为如果采用的是DNS响应均衡,多次解析返回的IP地址也可能会不相同。不妨试试Ping一下www.sohu.com,www.yahoo.com

现假设有三台服务器来应对www.test.com的请求。在采用BIND 8.x DNS服务器的unix系统上实现起来比较简单,只需在该域的数据记录中添加类似下面的结果:

www1 IN A 192.1.1.1

www2 IN A 192.1.1.2

www3 IN A 192.1.1.3

www IN CNAME www1

www IN CNAME www2

www IN CNAME www3

在NT下的实现也很简单,下面详细介绍在win2000 server下实现DNS负载均衡的过程,NT4.0类似:

打开“管理工具”下的“DNS”,进入DNS服务配置控制台。

打开相应DNS 服务器的“属性”,在“高级”选项卡的“服务器选项”中,选中“启用循环”复选框。此步相当于在注册表记录HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters中添加一个双字节制值(dword值)RoundRobin,值为1。

打开正向搜索区域的相应区域(如test.com),新建主机添加主机 (A) 资源记录,记录如下:

www IN A 192.1.1.1

www IN A 192.1.1.2

www IN A 192.1.1.3

在这里可以看到的区别是在NT下一个主机名对应多个IP地址记录,但在unix下,是先添加多个不同的主机名分别对应个自的IP地址,然后再把这些主机赋同一个别名(CNAME)来实现的。

在此需要注意的是,NT下本地子网优先级会取代多宿主名称的循环复用,所以在测试时,如果做测试用的客户机IP地址与主机资源记录的IP在同一有类掩码范围内,就需要清除在“高级”选项卡“服务器选项”中的“启用netmask排序”。

测试 

在windows 2003 Server DNS 服务器中添加如下三条A记录

简单的DNS负载均衡_DNS

客户端DNS 指向该服务器 ping 主机域名后,清除DNS缓存,在ping主机,可以看到两次解析的地址不同 

 

简单的DNS负载均衡_DNS_02