搭建集群负载均衡系统
负载均衡集群是在应用服务器高负载的情况下,由多台节点提供可伸缩的,高负载的服务器组以保证对外提供良好的服务响应;而LVS就是实现这一功能的技 术.实际上LVS是一种Linux操作系统上基于IP层的负载均衡调度技术,它在操作系统核心层上,将来自IP层的TCP/UDP请求均衡地转移到不同的 服务器,从而将一组服务器构成一个高性能、高可用的虚拟服务器。使用三台机器就可以用LVS实现最简单的集群,如图1所示。
图1 LVS实现集群系统结构简图
图1显示一台名为Director的机器是前端负载均衡器,运行LVS,目前只能在Linux下运行.可以针对web、ftp、cache、mms甚至 mysql等服务做load balance;后端两台机器称之为Real Server,是需要负载均衡的服务器,可以为各类系统,Linux、Solaris、Aix、BSD、Windows都可,甚至Director本身也 可以作为Real Server.
本文将通过实际操作,重点介绍如何在Redhat 9上用LVS构建一个负载均衡集群,关于负载均衡集群、LVS的详细内容,可参考如下信息:
http://www.linuxvirtualserver.org/
http://www-900.ibm.com/developerWorks/cn/linux/cluster/lvs/part1/index.shtml
安装LVS
RedHat在 9.0以后,就将ipvsadm这些套件去除,因此如果想使用LVS(Linux Virtual Server),就得自己重新编译核心(kernel)。
下载所需软件
下载ipvs补丁包
从RedHat 9开始ipvs不再被预先编译到了RedHat发行版的内核中,我们需要从http: //www.linuxvirtualserver.org/software/kernel-2.4下载新版的ipvs, 这里我们使用ipvs-1.0.9.tar.gz这个版本.
下载内核linux-2.4.20.tar.gz
这里需要强调的是由于所有的ipvs的补丁包都是为标准内核开发的,所以安装ipvs时不能使用RedHat光盘中的Kernel Source,而是需要去下载标准的内核。所以我们从ftp://ftp.kernel.org/pub/linux/kernel/ 得到standard kernel linux-2.4.20.tar.gz
下载ipvs管理工具ipvsadm
从http://www.linuxvirtualserver.org/ 得到ipvs管理工具ipvsadm-1.21.tar.gz, ipvsadm是设置ipvs转发方式和调度算法的工具.
开始安装
安装内核源码
把linux-2.4.20.tar.gz解压到/usr/src目录,生成了/usr/src/linux目录;如果生成的是 /usr/src/linux-2.4.20目录,则要在/usr/src下建立一个连接 ln –s linux-2.4.20 linux,因为在ipvs-1.0.9中的makefile文件中默认指定Kernel Source的路径为:KERNELSOURCE = /usr/src/linux
把ipvs补丁Patch到内核源码中
把ipvs-1.0.9.tar.gz解压缩到某个目录,如/test,生成了/test/ipvs-1.0.9目录;进入/test/ipvs- 1.0.9,依次执行如下命令:make patchkernel、make installsource,将ipvs的Patch加载到kernel的source中。
重新编译支持ipvs的内核
进入/usr/src/linux目录,分别执行:
make mrproper 为创建新的内和配置做好准备
make menuconfig 进行配置
这里请确保IP:Virtual Server Configuration中的选项设定都用M
make dep 检测是否有相关的软件包被使用
make clean 为新内核结构准备源目录树
make bzImage 创建内核引导映像
make modules、make modules_install 生成模块
make install安装新的内核到指定位置并重新配置grub.conf
到这里新内核就安装完毕了,请重启并用此内核引导系统
安装ipvs管理工具ipvsadm
当使用新内核启动后,就可以安装ipvsadm:
tar xzvf ipvsadm-1.21.tar.gz
cd ./ipvsadm-1.21
make
make install
安装完成后,执行ipvsadm命令,如果有如下信息出现则说明安装成功了。
[root@leon c]# ipvsadm
IP Virtual Server version 1.0.9 (size=65536)
Prot LocalAddress
将此shell script加入到/etc/rc.local中,这样在每次系统启动时都可以自动运行进行设置了。
测试
为了使得我们清楚地知道访问的是那一台FTP服务器,我们在FTP1上编辑/etc/vsftpd/vsftpd.conf,设置ftpd_banner =Welcome to FTP1 server,在FTP2设置ftpd_banner=Welcome to FTP2 server,设置完毕后重启服务.
现在在另一台客户机开几个终端,依次输入ftp 10.83.33.100,我们可以从欢迎词上看到,每次登录的FTP服务器都不是固定的,它会在FTP1和FTP2上互相交替,试验成功!
小结
Cluster应用可分为三方面:High-Availability(HA)(高可用性集群)、Load Balance (负载均衡集群)、Scientific(科学集群)。本文只是简单的实现了其中的Load Balance,而High-Availability其实也是非常重要的.比如说如果FTP1死掉了,负责转送封包的DR并不晓得它已经故障无法使用, 还是会将封包往故障的FTP1处送,这样将导致用户某此的访问遭到拒绝.其次如果整个集群只有一台Director,那幺这台主机就成为了系统单一失效点 (a single failure point of the whole system),万一这部Director死掉了,那幺所有提供的服务都将失败.为了解决这两个问题,我们可以采用Mon+Heartbeat来进行进阶 的设置, 从而实现High-Availability,具体做法将在下一篇文章中叙述.