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

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

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

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

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

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

  现假设有三台服务器来应对www.test.com的请求。

  在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排序”。

 

一)负载均衡:


1)就是在DNS中为一个主机名对应上若干个不同的IP地址,如此,在应答DNS查询时,DNS SERVER对每个查询将按DNS文件中主机记录的IP地址顺序给出不同的解析结果,将客户端的访问引导到不同的机器上去,避免所有客户访问同一台机器。

如下例:

.........

@    IN    A    192.168.1.2

    IN    MX    10    mail

mail    IN    A    192.168.1.2


WWW    IN    A    192.168.1.3

WWW    IN    A    192.168.1.5

WWW    IN    A    192.168.1.4

........

........

上面的文件里,WWW这个主机名对应了若干个不同的IP地址,当该DNS SERVER接到第一个客户端的名字查询时(查询WWW),将给出192.168.1.3的查询结果;接到第二个客户端机器的WWW名字查询时,就按照域名记录的顺序给出192.168.1.5的查询结果,依此类推,直至最后一个记录;然后从头再来,又从192.168.1.3开始返回查询结果。


2)实现的方法:


NT4.0,MS DNS SERVER,SP4 安装完毕;打开注册表编辑器,在HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/DNS/Parameters中,添加一个新的值:RoundRobin

类型:DWORD

设定值:1(按照微软文档的说法是非零的数值)。如果设置为0,则意味着停止DNS的负载均衡式的查询,DNS SERVER在接受查询时将总是返回接近其记录文件顶端的那个记录(在上面的例子里就是192.168.1.3)。


好了,然后仿照上面的例子,改动你的DNS记录,为一个主机名对应若干个不同的IP地址,重新启动服务。现在ping你设定的主机名(在本地机上即可),你将发现每次得到的IP地址是不同的。


(二)泛域名解析:


1)这可能是目前在NT中无法完满解决的问题,至少使用微软的DNS SERVER无法完满解决。在INTERNET的新闻组中讨论这个问题的也有,但最后的答案大多是否定的。NT目前能够解决的泛域名解析基本上只用于MX记录。MX记录即mail exchanger记录,主要解决信件投递时的寻址问题,看下面的例子:

zone.domian.com

............

............

domain.com    IN    MX    10    mail

*.domain.com    IN    MX    10    s-mail-server

@    IN    A    192.168.1.2

mail    IN    A    192.168.1.2

s-mail-server    IN    A    192.168.1.10

sample1    IN    A    192.168.1.20

............

............


根据上面的文件记录,当有xxx@domain.com的信件需要处理时,中转信件的SMTP SERVER将把该邮件转发到mail这台机器上;现在又有一封xxx@sample1.domain.com的信需要处理,SMTP SERVER通过DNS查询得知sample1.domain.com的IP地址是192.168.1.20,但是该主机下面并无对应的MX记录,此时DNS SERVER获知文件中存在MX的泛域名记录,就把该记录返回给查询者(SMTP SERVER),于是xxx@sample1.domain.com这封信被转发至s-mail-server这台机器。这种泛域名解析使发往domain.com这个域中所有主机的邮件均有归宿。


2)实现方法:

NT4.0,MS DNS SERVER,SP4 安装完毕;打开注册表编辑器,进入

HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/DNS/Parameters

添加新值:LooseWildcarding

类型:DWORD

设定值:1(非零数值); 设置为0意味着禁止泛域名解析功能。