有关负载均衡的方法
当我们在布署负载均衡方案时,将面临许多选择。传统的DNS负载均衡方案有许多的缺点,如占用合法IP过多、没有故障检测功能等。而如果考虑用第四层交换机、专用负载均衡器、防火墙等来实施负载均衡方案时,一是代价过于高昂,并且企业暂时还没有这么高的业务需求;二是安装配置过于复杂,一般的网络管理员难以胜任。下面我要介绍的这款简单实用的负载均衡软件,大家在布署负载均衡方案时不妨多加考虑。
balance是一款自由软件,支持BSD、Linux和SunOS/Solaris等操作系统,作用于OSI参考模型的第四层,当客户端向负载均衡服务器发出一个TCP连接请求时,balance将以轮循的方式选择服务器群中的某台服务器与客户端建立连接,从而响应客户端的连接请求。
balance提供了TCP Open故障侦测,通过检测服务器上提供服务的tcp端口(如telnet的23口,http的80口等)是否开放来判断服务器是否正常,从而避免服务请求被丢失,达到不间断可用性的要求。
balance的安装配置很简单,先到http:/sourceforge.net/projects/balance/下载软件源代码包,当前版本是2.24。解压缩:tar zxvf balance-2.24-1.tar.gz,进入源代码文件目录。如果有必要,可以打开Makefile文件修改默认C编译器及软件的安装路径等,然后输入如下命令编译安装:make;make install
负载均衡安装完成后,在/usr/local/bin目录下生成一个命令文件balance,所有的配置都用这一个命令完成,每个balance命令用于建立一个负载均衡策略组,一台负载均衡服务器上可以建立多个负载均衡策略组,其语法如下,[]表示可选项:
balance [-b host] [-t sec] [-dfp] port [h1[:p1[xc1]] [ ... hN[:pN[xcN]]]]
balance [-b host] [-id] port
各参数解释如下:
-b host 因为一台负载均衡服务器上可能有多个IP地址,此选项用于捆绑指定的IP,只有绑定的IP地址才会响应客户端发出的连接请求服务。如果不指定此项,则捆绑此均衡服务器上所有的IP地址。
port 指定均衡策略组向客户端提供服务的TCP端口号。每台负载均衡服务器上一个TCP端口号只能用于一个负载均衡策略组,多个负载均衡策略组上提供服务的TCP端口号不能冲突,否则将balance失败。
-d 开启调试状态。负载均衡在调试状态下,可以看到连接请求的处理状况。
-f 指定balance在前台工作状态下,如果不指定此项,balance将转入后台服务。
-p 显示数据包的使用状况。
-t sec 指定均衡服务器与均衡策略组中服务器的连接时间,一旦超出这个时间,则均衡服务器认为该服务器发生故障,而不把来自客户端的连接请求引向这台服务器,直至故障恢复为止,单位是秒。缺省值是5秒。
host[:port[xc]] 这里依次指明均衡策略组中各服务器的地址、端口号、最大通道数。均衡策略组中的服务器即可以是内部网络上的服务器,也可以是外部网络上的服务器,甚至是负载均衡服务器本身,重要的一点是负载均衡服务器能与均衡策略组中的服务器建立TCP连接。端口号是指服务器提供服务的TCP端口号,缺省值与均衡策略组的TCP端口号相同。最大通道数(max channel)是指每次轮循到该服务器上时所要建立的最大连接数。例如,服务器A的maxc值是3,则只有当服务器A与客户端建立了3个连接后,负载均衡服务器才会把来自客户端的连接请求引向下一个服务器。如果不指定maxc值,则相当于平均轮循;如果指定maxc值,则相当于权重轮循。
-i 进入交互配置模式。因为在交互配置模式下所有的功能配置均可以通过一条balance命令来替代,所以这里就不做过多介绍了,具体配置信息可以在交互模式下通过命令?或help来获取帮助。
注意:
host表示主机地址,可以是确定的IP地址,也可以是/etc/hosts文件里对应的host名,也可以是DNS上能解析的internet主机名,最终都将对应成确定的IP地址。
port表示TCP端口号,可以是具体的阿拉伯数字,也可以用/etc/services文件中相对应的service名来替代。
负载均衡服务器并不一定要处于内部网络服务器与外部网络间的网关位置,也可以处于与均衡策略组中服务器并行甚至无关的位置,重要的一点是均衡服务器能与均衡策略组中各服务器建立TCP连接。一旦想停止某组负载均衡服务,也很简单。如果该组负载均衡服务在前台工作状态下,只要在命令行下按Ctrl+C键中断该组服务就可以,否则,用ps -ef|grep balance找出要停止的负载均衡服务的pid,然后kill就可以了。
下面是一个配置实例:内部网络上有三台硬件配置并不高的服务器,为了处理好来自Internet上大量的web连接请求,因此需要将此三台服务器做为一个www服务均衡策略组来响应internet上的连接请求,同时,为了满足一定的发信需求,其中有台配置好一点的服务器同时做为smtp服务器。
在负载均衡服务器的hosts文件中分别建立不同的主机名与内部网络上三台服务器的IP地址相对应。
朋友或许会问了,为什么要用双网卡呢?用双网卡有什么好处?所谓双网卡,就是通过软件将双网卡绑定为一个IP地址,这个技术对于许多朋友来说并不陌生,许多高档服务器网卡(例如intel8255x系列、3COM服务器网卡等)都具有多网卡绑定功能,可以通过软硬件设置将两块或者多块网卡绑定在同一个IP 地址上,使用起来就好象在使用一块网卡。多网卡绑定的优点不少,首先,可以增大带宽,假如一个网卡的带宽是100M,理论上两块网卡就是200M,三块就是300M,当然实际上的效果是不会是这样简单的增加的,不过经实际测试使用多个网卡对于增加带宽,保持带宽的稳定性肯定是有裨益的,如果交换机等相关条件不错的话,这个效果还是很能令人满意;其次,可以形成网卡冗余阵列、分担负载,双网卡被绑定成“一块网卡”之后,同步一起工作,对服务器的访问流量被均衡分担到两块网卡上,这样每块网卡的负载压力就小多了,抗并发访问的能力提高,保证了服务器访问的稳定和畅快,当其中一块发生故障的时候,另一块立刻接管全部负载,过程是无缝的,服务不会中断,直到维修人员到来。
第一部分:硬件安装
虽然,理论上讲绑定越多网卡在一起,最终效果提升就越明显,但是考虑到复杂程度,这里就以绑定双网卡为例进行说明,如果读者觉得好玩,兴致很高的话,按照下面方法愿意绑定多少就绑定多少个网卡,其实一般同一台服务器,绑定2-3块网卡也就够了,太多了,据说因为链路聚合的先天缺点,会过多占用服务器资源,反过来会影响服务器速度负载均衡(关于这个我没实验,不过我觉得凡事都离不开物极必反的道理,适度最好)。
我取出“珍藏”的一对市场上随处可见的8139D10M/100M自适应网卡,市场价格25元一个,北京某厂的产品,做工还算精细,总成本50元人民币。
相关信息: