服务器负载均衡到现在已经有很多成熟的技术实现,本文介绍两种成本低,容易实现的方案。一种是利用防火墙的IP地址重定向技术(rdr),另一种大家可能不是很成熟悉就是DNS负载均衡技术。
在BSD系统中IPF和PF防火墙都可以利用IP地址重定向技术实现服务器的负载均衡。具体操作也很简单。这种技术多用于为没有公网IP地址的多个服务器提供负载均衡这种情况。使用这种技术的好处是你只需要一个公网IP就可以了(本文中是:221.35.21.2),如下面例子:
使用pf防火墙实现服务器负载均衡:
web_servers = "{ 10.0.0.10, 10.0.0.11, 10.0.0.12, 10.0.0.13 }"
rdr on $ext_if proto tcp from any to any port 80 -> $web_servers \
round-robin sticky-address
使用ipfilter防火墙实现服务器负载均衡:
web_servers = "{ 10.0.0.10, 10.0.0.11, 10.0.0.12, 10.0.0.13 }"
rdr $ext_if 221.35.21.2/32 port 80 -> $web_servers port 80 tcp round-robin
IPFW防火墙没有使用过不知能否实现类似上面的技术。
要使用DNS服务器负载均衡技术,首先要自己建立自用DNS服务器(因为目前在公用DNS服务器上这个功能都没有开放),还要有合法的域名(这个可能是废话)。在你的DNS服务器上和你域名对应的ZONE文件中添加多个(具体是几个要看你要负载均衡的实际主机数)域名记录。比如你申请了域名home.com,而且你有3台需要负载均衡的主机,他们的IP地址分别是221.35.21.2,221.35.21.3,221.35.21.4。下面是ZONE文件中的设置:
# vi home.com
===========+===========+===========+============
$TTL 12h
$ORIGIN com.
@ IN SOA ns.home.com. root.home.com.(
2005121013 ; Serial
3600 ; Refresh ( seconds )
900 ; Retry ( seconds )
68400 ; Expire ( seconds )
12h ) ; Minimum TTL for Zone ( seconds )
;
@ IN NS ns.home.com.
www IN A 221.35.21.2
www IN A 221.35.21.3
www IN A 221.35.21.4
===========+===========+===========+============
上面是在你自己的DNS服务器上的设置,你还需要登陆域名提供商提供的域名管理后台那里修改关于home.com这个域名的NS记录为你自己的DNS服务器。所有设置完成后DNS负载均衡就做好了,从此互联网上的用户每次访问www.home.com时解析到的IP都时不一样的,而且他解析到每个IP的几率是相同的,也就是说实现了三台主机的负载均衡。
以上简单介绍了使用防火墙和DNS服务器来实现多网络主机的负载均衡。对比一下,用防火墙实现的负载均衡在网络流量很大时防火墙本身会成为性能上的瓶颈,而采用DNS的负载均衡技术不存在这个问题。
10.结束语
就目前国内的网络状况看,南方电信和北方网通之间的网络互通是个突出的问题。而且有些朋友在国内和国外都托管了服务器想分别为国内外的用户提供服务器,但怎样实现就近访问两台服务器也是个比较头痛的问题。现在第三方DNS策略解析服务已经有了,关于这方面的技术问题文中没有提及,有这方面需求的朋友不妨和我取得联系。