DNS负载均衡的优点是简单易行,而且实现代价小。它在DNS服务器中为同一个域名配置多个IP地址(即为一个主机名设置多条A资源记录),在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的计算机上去,从而达到负载均衡的目的。
下面是一个实现邮件服务器负载平衡的配置片段(在区域数据文件中)。
www IN A 192.168.0.4
IN A 192.168.0.5
IN A 192.168.0.6
在以上配置中,当客户端查询www服务器IP地址时,Bind将根据rrset-order语句定义的次序把配置中设定的3条A记录都发送给客户端,客户端可以使用自己规定的算法从3条记录中挑选一条。rrset-order语句是主配置文件中options主语句的一条子语句,可以定义固定、随机和轮询的次序。
order_spec定义:
[ class class_name ][ type type_name ][ name "domain_name"] order ordering
如果没有设定类,默认值为ANY。如果没有设定类型,默认值为ANY。如果没有设定
名称,默认值为"*"。
合法的排序值是:
fixed:记录以它们在域文件中的顺序
random:记录以随机顺序被返回
cyclic:记录以环顺序被返回
例如:
rrset-order {
class IN type A name "host.example.com" order random;
order cyclic;
};
将会使得任何处于IN类中的A类记录的响应以随机顺序返回,IN 类以"host.example.com"为后缀。其他的记录以循环记录被返回。如果多重rrset-order语句出现,它们并不组合在一起,只适用于最后一个条。但是rrset-order语句不被BIND9支持,BIND9目前只支持"random-cyclic"排序,服务器随机选择RRset集中的开始点,有顺序返回在那个点开始的记录。
可以通过配置全局配置
dns 轮询配置options来实现轮询。
options {
rrset-order { order cyclic; };
.....
};
fixed在默认编译的时候是关闭的,需要在编译的时候打开:
Allow 'fixed' rrset-order (--enable-fixed-rrset)
./configure --enable-largefile --enable-threads --disable-openssl-version-check --enable-fixed-rrset --prefix=/home/slim/bind9.9.7 --with-libtool