1 概述
企业知名度增加,网站访问量逐渐上升,是每一个网管所盼望的。但同时应用服务器的数据流量和访问量将成倍增加,服务器将不堪重负。
普通的站群技术只是一种伪装的URL重写,而基于物理硬件的负载平衡如何与Zoomla!逐浪CMS结合?
这时,可采用两种方式解决此问题,一是进行硬件升级,购买配置更高、性能更好的服务器,这种方法的优点是简单易行,缺点是投资大, 会造成现有资源的浪费,且下一次业务量的提升还会面临同样问题。另一种方法是采用集群技术,利用两台以上的服务器进行协同工作,在集群系统中运行的服务器并不一定是高档产品(可以是企业现有的服务器),但服务器的集群却可以提供相当高性能的不停机服务;另外,随着业务量的增大,可随时增加集群系统中运行的服务器数量。集群技术的优点是高可靠性和强大灵活的系统扩充能力。
两台以上的服务器进行协同工作必然涉及到负载均衡问题,目前常用的负载均衡技术主要有:NAT负载均衡、反向代理负载均衡及DNS负载。
NAT负载均衡将一个外部IP地址映射为多个内部IP地址,对每次连接请求动态地转换为一个内部服务器的地址,将外部连接请求引到转换得到地址的那个服务器上[1]。反向代理负载均衡使用代理服务器将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的[2]。DNS负载均衡在DNS中为多个地址配置同一个名字,从而使得不同的客户访问不同的服务器来实现负载均衡。本文将详细介绍DNS负载均衡原理和技术实现。
2 DNS负载均衡原理
DNS负载均衡是通过循环复用实现的,如果发现主机名的多个地址资源记录,则可用它循环使用包含在查询应答中的主机资源记录。在默认情况下,DNS 服务器的服务使用循环复用对资源记录进行排序,这些资源记录是在解析为多个映射的主机名应答中返回的。该功能提供了一种非常简便的方法,用于对客户机使用 Web 服务器和其他频繁查询的多宿主计算机的负载平衡。
要使循环复用正常工作,必须首先在该区域中注册所查询名称的多个主机资源纪录,并启用DNS服务器循环复用。如果DNS服务器禁止循环复用,那么这些查询的响应顺序以应答列表中资源记录在区域中存储时的静态排序为基础。
3 四台服务器的负载均衡实例
可提供的服务:Web、Ftp系统实现的目的:做一个较完善的负载均衡系统,以共享和高效地利用资源设备状况:五台服务器,其中四台服务器组成集群系统,IP地址分别为172.28.20.1、172.28.20.2、172.28.20.3、172.28.20.4;
一台服务器作为控制管理服务器,提供DNS服务,设企业域名为www.example.com.cn。
服务器配置:集群系统服务器安装Windows 2000 sever ,须安装Internet信息服务组件;
DNS服务器安装Windows 2000 sever ,须安装DNS组件。
⑴ 分别设置各台服务器IP地址、子网掩码、网关及DNS服务器地址,调通网络。
⑵ 设置DNS服务器
①在DNS中创建正向搜索的标准主要区域,实现域名
DNS服务器上单击开始/程序/管理工具/DNS,打开DNS控制台。
在控制台树中,右键单击 “正向搜索区域”,单击新建区域/新建区域向导/下一步,选择区域类型为“标准主要区域”。如果不是在活动目录的域控制器上创建DNS区域,则区域类型中的“与活动目录集成的区域”选项按钮不可用;单击“下一步”。
输入要创建的区域名称example.com.cn,选择创建新的区域文件,文件名为example.com.cn.dns,单击下一步/完成,区域example.com.cn出现在控制台树中的“正向搜索区域”下。
②在区域example.com.cn中注册查询名称www. example.com.cn的多个主机资源记录。
在DNS控制台树中右键单击区域example.com.cn,单击新建主机,弹出“新建主机”窗口。在“名称”栏输入主机名www,在“IP地址”栏输入对应的IP地址172.28.20.1,单击“添加主机”、“确定”按钮;重复此过程,主机名仍为www, IP地址依次为172.28.20.2、172.28.20.3、172.28.20.4。单击“完成”。
四条名为www的主机记录出现在正向搜索区域“example.com.cn”中,指针依次为172.28.20.1、172.28.20.2、172.28.20.3、172.28.20.4
③启用多宿主名称的循环复用
单击开始/程序/管理工具/DNS/DNS服务器名/属性/高级,在“服务器选项”中,选择“启用循环”复选框,然后单击“确定”。
至此,正向搜索型查询用于IP 地址分别为172.20.20.1、172.28.20.2、172.28.20.3和172.28.20.4的多宿主主机 (www. example.com.cn)配置完成,具体如图1所示。
DNS服务器配置图
当客户请求访问www.example.com.cn时,DNS服务器将循环调度IP地址的次序,将按172.28.20.1、172.28.20.2、172.28.20.3和172.28.20.4的顺序应答第一个客户的要求,下一个客户对同样信息的请求将用旋转后的172.28.20.2、172.28.20.3、172.28.20.4和172.20.20.1这样的顺序应答,旋转过程将持续下去,成功实现DNS负载均衡。
按以上步骤设置好后,有时会有疑问,为什么ping www.example.com.cn,返回的都是同一个IP?原因很简单,这是因为只用1台电脑做。
测试,ping了第一次后,电脑就会做一个缓存。用多台电脑来ping,或在一台电脑上ping完每一次后,均运行ipconfig/flnshdns,就可测试
出系统实现目的已达到。
4 需注意的两点问题
⑴ 本地子网优先级
当集群中的服务器不在同一网段时,默认情况下,当客户机查询解析映射到多个 IP 地址的主机名时,DNS 服务使用本地子网优先排序作为
给出同一网络上首选 IP 地址的方法。此功能要求客户应用程序尝试使用连接可用的最近(一般是最快的)IP 地址连接至主机。
DNS 服务按以下方式使用本地子网优先级:
①DNS 服务确定是否需要本地子网的优先级排序查询响应。
如果有多个地址资源记录与要查询的主机名匹配,则 DNS 服务可按其子网位置重新对记录进行排序。如果查询的主机名只与一个 地址资源
记录匹配,或者客户机的 IP 网络地址与多重资源记录响应列表上的任何映射地址的 IP 网络地址匹配,则不需要进行优先排列。
②对于匹配响应列表中的每一个资源纪录,DNS 服务决定了哪些记录(如果有)与查询客户机的子网位置匹配。
③DNS 服务重新对响应列表进行排序,以便将与发出请求的客户机的本地子网匹配的 主机地址资源记录排在响应列表中的第一位。
④按子网的顺序进行优先级排序后,响应列表将返回给发出请求的客户机。
⑵ 不足之处
虽然循环复用 DNS 是一个普遍使用的在 Web 服务器上负载平衡的解决方案,但是,该方式有它自身的缺陷。循环复用 DNS 使用 DNS
将传入的 IP 请求映射到定义的一系列循环形式的服务器。一旦发生服务器故障,循环复用 DNS 继续把请求发送到这个故障服务器,一直
到把该服务器从 DNS 中移走为止。这样许多用户必须等到 DNS 连接超时以后才能成功地访问目标网站。
5 结束语
集群负载均衡被认为是目前十大热门技术之一,它也是一个高端应用,Internet/Intranet中负载均衡方案应用十分广泛,许多大中型网
站都难脱离这种技术。NAT负载均衡、反向代理均衡及DNS负载均衡,将视需要而被采用。利用循环复用DNS实现负载均衡是一种经济又实用的方法,不需要添加昂贵的负载均衡设备,并且服务器可以位于互联网的任意位置,该技术当前使用在包括Yahoo在内的一些Web站点上。
附:
对于负载均衡的一个典型应用就是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排序”。