用LVS构架负载均衡Linux集群系统Word文档下载推荐.docx
《用LVS构架负载均衡Linux集群系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《用LVS构架负载均衡Linux集群系统Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
选用的LVS实际上是一种Linux操作系统上基于IP层的负载均衡调度技术,它在操作系统核心层上,将来自IP层的TCP/UDP请求均衡地转移到不同的服务器,从而将一组服务器构成一个高性能、高可用的虚拟服务器。
使用三台机器就可以用LVS实现最简单的集群,如图1所示。
图1显示一台名为Director的机器在集群前端做负载分配工作;
后端两台机器称之为RealServer,专门负责处理Director分配来的外界请求。
该集群的核心是前端的Director机器,LVS就是安装在这台机器上,它必须安装Linux。
RealServer则要根据其选用的负载分配方式而定,通常RealServer上的设置比较少。
接下来介绍Director机器上LVS的安装过程。
图1LVS实现集群系统结构简图
安装
LVS的安装主要是在Director机器上进行,RealServer只需针对不同的转发方式做简单的设定即可。
特别是对LVS的NAT方式,RealServer惟一要做的就是设一下缺省的网关。
所以构架集群的第一步从安装Director机器开始。
首先要在Director机器上安装一个Linux操作系统。
虽然早期的一些RedHat版本,如6.2、7.2、8.0等自带RedHat自己的集群软件,或者是在内核中已经支持LVS,但是为了更清楚地了解LVS的机制,笔者还是选择自行将LVS编入Linux内核的方式进行安装,Linux版本采用RedHat9.0。
如果用户对RedHat的安装比较了解,可以选择定制安装,并只安装必要的软件包。
安装中请选择GRUB做为启动引导管理软件。
因为GRUB在系统引导方面的功能远比LILO强大,在编译Linux内核时可以体会它的方便之处。
LVS是在Linux内核中实现的,所以要对原有的Linux内核打上支持LVS的内核补丁,然后重新编译内核。
支持LVS的内核补丁可以从LVS的官方网站http:
//www.linuxvirtualserver.org下载,下载时请注意使用的Linux核心版本,必须下载和使用的Linux内核版本相一致的LVS内核补丁才行。
对于RedHat9.0,其Linux内核版本是2.4.20,所以对应内核补丁应该是http:
//www.linuxvirtualserver.org/software/kernel-2.4/linux-2.4.20-ipvs-1.0.9.patch.gz。
笔者经过多次实验,使用RedHat9.0自带的Linux源代码无法成功编译LVS的相关模组。
由于时间关系笔者没有仔细研究,而是另外从kernel.org上下载了一个tar包格式的2.4.20内核来进行安装,顺利完成所有编译。
下面是整个内核的编译过程:
1.删除RedHat自带的Linux源代码
#cd/usr/src
#rm-rflinux*
2.下载2.4.20内核
#wgetftp:
//ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.20.tar.bz2
3.解压到当前目录/usr/src
#tar-xjpvflinux-2.4.20.tar.bz2
4.建立链接文件
#cd/usr/src#ln-slinux-2.4.20linux-2.4#ln-slinux-2.4.20linux
5.打上LVS的内核补丁
#wgethttp:
//www.linuxvirtualserver.org/software/kernel-2.4/linux-2.4.20-ipvs-1.0.9.patch.gz
#gzip-cdlinux-2.4.20-ipvs-1.0.9.patch.gz
#cd/usr/src/linux
#patch-p1<
../linux-2.4.20-ipvs-1.0.9.patch
在打补丁时,注意命令执行后的信息,不能有任何错误信息,否则核心或模组很可能无法成功编译。
6.打上修正ARP问题的内核补丁
//www.ssi.bg/~ja/hidden-2.4.20pre10-1.diff
../hidden-2.4.20pre10-1.diff
这一步在Director机器上可以不做,但是在使用LVS/TUN和LVS/DR方式的RealServer上必须做。
7.为新核心命名
打开/usr/src/linux/Makefile。
注意,在开始部分有一个变量EXTRAVERSION可以自行定义。
修改这个变量,比如改成“EXTRAVERSION=-LVS”后,编译出的核心版本号就会显示成2.4.20-LVS。
这样给出有含义的名称将有助于管理多个Linux核心。
8.检查源代码
#makemrproper
这一步是为确保源代码目录下没有不正确的.o文件及文件的互相依赖。
因为是新下载的内核,所以在第一次编译时,这一步实际可以省略。
9.配置核心选项
#makemenuconfig
命令执行后会进入一个图形化的配置界面,可以通过这个友好的图形界面对内核进行定制。
此过程中,要注意对硬件驱动的选择。
Linux支持丰富的硬件,但对于服务器而言,用不到的硬件驱动都可以删除。
另外,像Multimediadevices、Sound、Bluetoothsupport、AmateurRadiosupport等项也可以删除。
注意,以下几项配置对LVS非常重要,请确保作出正确的选择:
(1)Codematurityleveloptions项
对此项只有以下一个子选项,请选中为*,即编译到内核中去。
[*]Promptfordevelopmentand/orincompletecode/drivers
(2)Networkingoptions项
对此项的选择可以参考以下的配置,如果不清楚含义可以查看帮助:
<
*>
Packetsocket
[]Packetsocket:
mmappedIO
>
Netlinkdeviceemulation
[*]Networkpacketfiltering(replacesipchains)
[]Networkpacketfilteringdebugging
[*]SocketFiltering
Unixdomainsockets
[*]TCP/IPnetworking
[*]IP:
multicasting
advancedrouter
policyrouting
[]IP:
usenetfilterMARKvalueasroutingkey
fastnetworkaddresstranslation
M>
IP:
tunneling
broadcastGREoverIP
multicastrouting
ARPdaemonsupport(EXPERIMENTAL)
TCPExplicitCongestionNotificationsupport
TCPsyncookiesupport(disabledperdefault)
NetfilterConfiguration--->
VirtualServerConfiguration--->
(3)Networkingoptions项中的IP:
VirtualServerConfiguration项
如果打好了LVS的内核补丁,就会出现此选项。
进入VirtualServerConfiguration选项,有以下子选项:
virtualserversupport(EXPERIMENTAL)
[*]IPvirtualserverdebugging
(12)IPVSconnectiontablesize(theNthpowerof2)
---IPVSscheduler
round-robinscheduling
weightedround-robinscheduling
least-connectionschedulingscheduling
weightedleast-connectionscheduling
locality-basedleast-connectionscheduling
locality-basedleast-connectionwithreplicationscheduling
destinationhashingscheduling
sourcehashingscheduling
shortestexpecteddelayscheduling
neverqueuescheduling
---IPVSapplicationhelper
FTPprotocolhelper
以上所有项建议全部选择。
(4)Networkingoptions项中的IP:
NetfilterConfiguration项
对于2.4版本以上的LinuxKernel来说,iptables是取代早期ipfwadm和ipchains的更好选择,所以除非有特殊情况需要用到对ipchains和ipfwadm的支持,否则就不要选它。
本文在LVS/NAT方式中,使用的就是iptables,故这里不选择对ipchains和ipfwadm的支持:
ipchains(2.2-style)support
ipfwadm(2.0-style)support
10.编译内核
(1)检查依赖关系
#makedep
确保关键文件在正确的路径上。
(2)清除中间文件
#makeclean
确保所有文件都处于最新的版本状态下。
(3)编译新核心
#makebzImage
(4)编译模组
#makemodules
编译选择的模组。
(5)安装模组
#makemodules_install
#depmo