集群负载均衡系统.docx
- 文档编号:12263005
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:16
- 大小:365.79KB
集群负载均衡系统.docx
《集群负载均衡系统.docx》由会员分享,可在线阅读,更多相关《集群负载均衡系统.docx(16页珍藏版)》请在冰豆网上搜索。
集群负载均衡系统
如何在RedHat7.3/8.0/9.0上实现集群负载均衡系统
摘要
负载均衡集群是在应用服务器高负载的情况下,由多台节点提供可伸缩的,高负载的服务器组以保证对外提供良好的服务响应;而LVS就是实现这一功能的技术,它通过使内核支持ipvs来实现LVS/DirectRouting(DR)、LVS/IPTunnel、LVS/NAT的功能。
(2004-06-2121:
43:
44)
Bylanf,出处:
LinuxAID
作者:
崔涛
1.前言
先来简单说说负载均衡集群,它是在应用服务器高负载的情况下,由多台节点提供可伸缩的,高负载的服务器组以保证对外提供良好的服务响应;而LVS就是实现这一功能的技术,它通过使内核支持ipvs来实现LVS/DirectRouting(DR)、LVS/IPTunnel、LVS/NAT的功能。
由于本文的着眼点在于如何利用LVS构建一个负载均衡集群,所以关于负载均衡集群、LVS的详细内容就不在这里阐述了,如果大家有兴趣可参考如下信息:
http:
//www.linuxvirtualserver.org/LVS的官方网站
LVS项目介绍
RedHat7.3/8.0都把ipvs预先编译到了RedHat发行版的内核中,但使用的ipvs版本比较低是ipvs0.9.7/1.0.4,从RedHat9开始ipvs不再被预先编译到了RedHat发行版的内核中,本文介绍了如何把最新版的ipvsVersion1.0.9编译到内核中并配置负载均衡集群的方法和一些技巧。
不论是在哪个版本的RedHatLinux上安装ipvs,工作大都可以分为如下几步:
图1给出了最简单的负载均衡集群的网络拓扑,这里需要指出的是以上提到的安装ipvs/ipvsadm的工作都是在Director上进行的。
图1
2.在RedHatLinux上实现ipvs
在RedHat7.3/8.0已经预先打了ipvs的补丁,在预安装的内核中已将ipvs编译成模块,如果你能在目录/lib/modules/2.4.18-*/kernel/net/ipv4/ipvs中看到ip_vs_*文件,就证明你的系统已经支持ipvs,可以通过如下步骤安装ipvsadm并配置转发方式。
但系统预编译的ipvs是比较早的版本(version0.9.7/1.0.4),本文把它升级到最新的版本Version1.0.9。
2.1得到内核源码和相关的软件包
这里需要强调的是由于RedHat7.3/8.0的内核源码中已经预先打了ipvs的补丁,所以在安装ipvs时不能使用RedHat光盘中的KernelSource,而是需要去下载标准的内核。
对于RedHat9.0,虽然内核中没有预编译ipvs,但我还是提倡使用standardkernel,因为所有的ipvs的补丁包都是为标准内核开发的。
从kernelftpsite得到standardkernellinux-2.4.18.tar.gz(RedHat7.3/8.0),linux-2.4.20.tar.gz(RedHat9.0),从lvshomepage得到ipvs-1.0.9.tar.gz、ipvsadm-1.21.tar.gz。
(在下面的阐述中都以内核linux-2.4.18.tar.gz为例,对于内核linux-2.4.20.tar.gz做法是完全相同的)
2.2把ipvs补丁Patch到内核源码中
把linux-2.4.18.tar.gz解压到/usr/src目录,生成了/usr/src/linux目录;如果生成的是/usr/src/linux-2.4.18*目录,则要在/usr/src下建立一个连接ln–slinux-2.4.18*linux,因为在ipvs-1.0.9中的makefile文件中默认指定KernelSource的路径为:
KERNELSOURCE=/usr/src/linux(当然,如果您直接修改makefile中的KERNELSOURCE值,使它指向源码的目录也可以)。
把ipvs-1.0.9.tar.gz解压缩到某个目录,如/usr/src/source,生成了/usr/src/source/ipvs-1.0.9目录;进入/usr/src/source/ipvs-1.0.9,依次执行如下命令:
makepatchkernel、makeinstallsource,将ipvs的Patch加载到kernel的source中。
当然您也可以用linux-2.4.20-ipvs-1.0.9.patch.gz直接patch到内核中,在/usr/src执行gzip-cdlinux-2.4.20-ipvs-1.0.9.patch.gz,然后进入/usr/src/linux执行patch-p1<../linux-2.4.20-ipvs-1.0.9.patch
2.3重新编译支持ipvs的内核
进入/usr/src/linux目录,分别执行:
makemrproper为创建新的内和配置做好准备
makemenuconfig进行配置
主界面-->Networkingoptions选项-->IP:
VirtualServerConfiguration选项(如图2图3)
IP:
VirtualServerConfiguration中的选项设定都用M
makedep检测是否有相关的软件包被使用
makeclean为新内核结构准备源目录树
makebzImage创建内核引导映像
makemodules、makemodules_install生成模块
图2
图3
注意的问题:
如果使用StandardKernel,在makemenuconfig时可能在Networkingoptions选项中找不到IP:
VirtualServerConfiguration选项,这是因为没有选中Networkpacketfiltering选项,如图4
图4
IP:
VirtualServerConfiguration选项是基于Networkpacketfiltering选项的。
技巧:
在makemenuconfig时,我们面对众多的选项常常不知道该如何选择,此时可以把安装时的配置文件copy到/usr/src/linux中:
cp/boot/config-2.4.*/usr/src/linux/.config,再用makemenuconfig编译,它会读取.config中原来的配置信息,这样只要对IP:
VirtualServerConfiguration中的新选项选择即可。
2.4启用新内核
mkinitrd/boot/initrd-2.4.18ipvs.img2.4.18创建initrd映像
cp/usr/src/linux/arch/i386/boot/bzImage/boot/vmlinuz-2.4.18ipvs
cd/boot
rmvmlinuz
ln–svmlinuz-2.4.18ipvsvmlinuz
cp/usr/src/linux/System.map/boot/System.map-2.4.18ipvs
cd/boot
rmSystem.map
ln–sSystem.map-2.4.18ipvsSystem.map
vi/etc/lilo.conf
添加启动选项:
image=/boot/vmlinuz-2.4.18ipvs
label=linux-ipvs
initrd=/boot/initrd-2.4.18ipvs.img
read-only
root=/dev/hda3
lilo
然后重新启动,选择新内核就可支持最新的ipvs
2.5安装ipvs管理工具ipvsadm
当使用了支持ipvs的内核后,就可以安装ipvsadm,ipvsadm是设置ipvs转发方式和调度算法的工具
tarxzvfipvsadm-1.21.tar.gz
cd./ipvsadm-1.21
make
makeinstall
安装完成后,执行ipvsadm命令,如果有如下信息出现则说明安装成功了。
到现在为止,支持负载均衡功能的director就配置成功了,接下来我们可以通过ipvsadm来配置一个负载均衡集群。
3.配置LVS,构建负载均衡集群
LVS提供了三种转发方式:
VS/NAT、VS/DR、VS/TUN,而不同的转发方式对后端的realserver要求也不同(如表1)
表1
构建负载均衡集群的工作主要涉及三个方面(如图5):
图5
3.1修正realserver上可能的arpproblem
注意的问题:
这里所说的修正系统的arpproblem主要是针对realserver使用linux操作系统,而且转发方式为VS/DR和VS/TUN的情况。
这是因为在使用VS/DR和VS/TUN的时候,会需要一块网卡上绑定两个IP的情况,但linux在kernel2.2.14以后就将eth0:
1的NOARPFLAG关闭,这使得eth0:
1仅仅是eth0的别名,任何对eth0:
1的操作都对eth0有效,因此如果此时使eth0:
1NOARP,则也使得eth0NOARP,这样整个网卡都不会收到数据包,所以要修正系统的arpproblem,使eth0:
1不响应arp请求,同时eth0仍能接受数据包。
有关Arp问题的详细内容请参见:
LVS-HOWTO-arpproblem。
由表1可以看出对应不同的转发方式,realserver上可以使用的操作系统也是不同的,而linux和windows2000server则是所有转发方式都支持的操作系统,作者在本文中也是分别以这两种操作系统为例予以介绍。
修正realserver上可能的arpproblem时,根据转发方式和操作系统的不同分为如下几种情况:
3.1.1VS/NAT方式
不论操作系统选择linux还是windows2000server,对系统不需要做任何修改。
3.1.2VS/DR和VS/TUN方式
realserver使用linux操作系统,对系统的修改如下:
1)下载所需的软件包
从kernelftpsite得到standardkernellinux-2.4.18.tar.gz,;从Julian'spatchesandsoftwarepage得到hidden-2.4.5-1.diff
2)重新编译内核,修正arpproblem
把linux-2.4.18.tar.gz解压倒/usr/src目录,生成了/usr/src/linux目录;(如果生成的是/usr/src/linux-2.4.18*目录,则要在/usr/src下建立一个连接ln–slinux-2.4.18*linux)
把hidden-2.4.5-1.diff放到/usr/src/linux下,用命令patch-p1 进入/usr/src/linux目录,依次执行makemrproper、makemenuconfig(可以把安装时的配置文件copy到/usr/src/linux中: cp/boot/config-2.4.*/usr/src/linux/.config,再编译)、makedep、makeclean、makebzImage、makemodules、makemodules_install 3)启用新内核(与2.4节相同) realserver使用windows2000server操作系统 不需对系统本身作修改,但要在配置时(图5中步骤③)屏蔽arp响应,具体方法在3.2.2中介绍。 3.2配置LVS 对LVS的配置分为在director上的设置和在realserver上的设置,而对于不同的转发方式: VS/NAT、VS/DR、VS/TUN,这些设置也有所不同。 3.2.1使用VS/NAT方式 1)网络拓扑(如图6) 图6 2)Director上执行的设置(以Telnet服务,轮叫(rr)策略为例) 3)Realserver上的设置 ⑴使用Linux操作系统,执行如下命令 ⑵使用windows2000server操作系统,则只要把默认网关设置成192.168.1.9 3.2.2使用VS/DR方式 1)网络拓扑(如图7) 图7 2)Director上执行的设置(以Telnet服务,轮叫(rr)策略为例) 3)Realserver上的设置 ⑴使用Linux操作系统(patch过hidden-2.4.5-1.diff),执行如下命令 ⑵使用windows2000server操作系统 3.2.3使用VS/TUN方式 1)网络拓扑(如图8) 图8 2)Director上执行的设置(以Telnet服务,轮叫(rr)策略为例) 3)Realserver上的设置 ⑴使用Linux操作系统(patch过hidden-2.4.5-1.diff),执行如下命令 ⑵使用windows2000server操作系统 技巧: 在上文设置过程中给出的命令都可以改写成符合init语法的标准脚本,并加入到/etc/init.d/rc.local中,这样在每次系统启动时都可以自动运行进行设置了。 4.总结 本文中所讨论的负载均衡其实只是集群应用中的一个方面,其它的集群应用还包括高性能计算集群、高可用性集群等,而每种应用都涉及到很多具体的技术,希望能和大家共同交流,一同推动集群技术的应用和发展。 5.参考文献 •LVS-HOWTO,http: //www.linuxvirtualserver.org/Joseph.Mack/HOWTO/ •LVS项目介绍, •HiddenPatch,http: //www.ssi.bg/~ja/ •TCP/IPIllustractedVolume1: TheProtocols,W.RichardStevens,AddisonWesley 关于作者 现从事高性能服务器方面的研发工作,对集群、Linux方面都很有兴趣。 您可以通过email: taocui@与他取得联系。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 集群 负载 均衡 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)