- 论坛徽章:
- 0
|
本文在撰写过程中参考过tigerlei 的《搭建集群负载均衡系统(学习笔记)》和陆飞(杭州市地方税务局西湖征收管理局)《LVS+Heartbeat+Ldirectord 在 Red Hat 9.0 下的实现》等等诸位大虾的文章,表示感谢,同时感谢开放源代码。
本文将通过实际操作,重点介绍如何在Redhat 9上用LVS构建一个负载均衡集群。
一 安装LVS
Red Hat在 9.0以后,就将ipvsadm这些套件去除,因此如果想使用LVS(Linux Virtual Server),就得自己重新编译核心(kernel)。
1下载所需软件
(1) 下载ipvs补丁包
从Red Hat 9开始ipvs不再被预先编译到了RedHat发行版的内核中,我们需要从http://www.linuxvirtualserver.org/software/kernel-2.4下载新版的ipvs, 这里我们使用ipvs-1.0.9.tar.gz这个版本.
(2) 下载内核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
(3)下载ipvs管理工具ipvsadm
在http://www.linuxvirtualserver.org/ 得到ipvs管理工具ipvsadm-1.21.tar.gz, ipvsadm是设置ipvs转发方式和调度算法的工具.
开始安装
2 安装内核源码
把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(注:不需要建立新的linux文件夹),因为在ipvs-1.0.9中的makefile文件中默认指定Kernel Source的路径为:KERNELSOURCE = /usr/src/linux
3 把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中。
4 重新编译支持ipvs的内核
进入/usr/src/linux目录,分别执行:
make mrproper 为创建新的内和配置做好准备
make menuconfig 进行配置
/1. Code maturity level options
代码成熟等级。此处只有一项:
prompt for development and/or incomplete code/drivers
如果你要试验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须
把该项选择为Y了;否则可以把它选择为N。
/2. Loadable module support
对模块的支持。这里面有三项:
Enable loadable module support:
除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。
Set version information on all module symbols:
可以不选它。
Kernel module loader:
让内核在启动时有自己装入必需模块的能力,建议选上。
/3. Processor type and features
CPU类型,选项很多,不一一介绍了,有关的几个如下:
Processor family:
根据你自己的情况选择CPU类型。
High Memory Support:
大容量内存的支持。可以支持到4G、64G,一般可以不选。
Math emulation:
协处理器仿真,协处理器是在386时代的宠儿,现在早已不用了。
MTTR support:MTTR支持。可不选。
Symmetric multi-processing support:
对称多处理支持。除非你富到有多个CPU,否则就不用选了。
/4. General setup
这里是对最普通的一些属性进行设置。这部分内容非常多,一般使用缺省设置就可以了。下面介绍一下经常使用的一些选项:
Networking support:
网络支持,必须选,没有网卡也建议选上。
PCI support:
PCI支持,必选.
PCI access mode:
PCI存取模式。可供选择的有BIOS、Direct和Any,选Any吧。
Support for hot-pluggabel devices:
热插拔设备支持,可选.
PCMCIA/CardBus support:
PCMCIA/CardBus支持,有PCMCIA就必选了。
System V IPC
BSD Process Accounting
Sysctl support:
以上三项是有关进程处理/IPC调用的,主要就是System V和BSD两种风格。
如果你不是使用BSD,就按照缺省吧。
Power Management support:电源管理支持,可选上,特别是笔记本.
Advanced Power Management BIOS support:高级电源管理BIOD支持。
/5. Memory Technology Device(MTD)
MTD设备支持
可不选。
/6. Parallel port support
串口支持。如果不打算使用串口,就别选了。
/7. Plug and Play configuration
即插即用支持。选上吧,可以体验一下Linux下即插即用的感觉。
/8. Block devices
块设备支持,需要针对每个人的具体情况来选:
Normal PC floppy disk support:普通PC软盘支持,一般要选,我的没有,
就没选
XT hard disk support:
Compaq SMART2 support:
Mulex DAC960/DAC1100 PCI RAID Controller support:RAID镜像用的。
Loopback device support:
Network block device support:网络块设备支持。如果想访问网上邻居的
东西,就选上。
Logical volume manager(LVM)support:逻辑卷管理支持。
Multiple devices driver support:多设备驱动支持。
RAM disk support:RAM盘支持。
/9. Networking options
还有,“Networking options”中还有一些关于网络的选项,要注意按自己的需要去选择:
<*> Packet socket
[ ] Packet socket: mmapped IO
<*> Netlink device emulation
Network packet filtering (replaces ipchains)
Network packet filtering debugging
Socket Filtering
<*> Unix domain sockets
TCP/IP networking
IP: multicasting
IP: advanced router
IP: policy routing
[ ] IP: use netfilter MARK value as routing key
[ ] IP: fast network address translation
<M> IP: tunneling
可以查看到“IP: Virtual Server Configuration”选项,将其它所有的子选项都选上:
<M> virtual server support (EXPERIMENTAL)
IP virtual server debugging
(12) IPVS connection table size (the Nth power of 2)
--- IPVS scheduler
<M> round-robin scheduling
<M> weighted round-robin scheduling
<M> least-connection scheduling scheduling
<M> weighted least-connection scheduling
<M> locality-based least-connection scheduling
<M> locality-based least-connection with replication scheduling
<M> destination hashing scheduling
<M> source hashing scheduling
<M> shortest expected delay scheduling
<M> never queue scheduling
--- IPVS application helper
<M> FTP protocol helper
另外,“Networking options”中的“IP: Netfilter Configuration"中的选项的所有子项,除了以下两项不要选之外,其它全可以选:
< > ipchains (2.2-style) support
< > ipfwadm (2.0-style) support
/10. Telephony Support
Linux下可以支持电话卡,这样你就可以在IP上使用普通的电话提供语音服务.详细情况可看看help内容.
/11. ATA/IDE/MFM/RLL support
这个是有关各种接口的硬盘/光驱/磁带/软盘支持的,内容太多了,使用缺省的选项吧。
/12. SCSI support
SCSI设备的支持, 如果你用了SCSI的硬盘/光驱/磁带等设备,自己找好了.
/13. IEEE 1394(FireWire)support
试验中,没选。
/14. I2O device support
在智能Input/Output(I2O)体系接口中使用,不会,用缺省吧.
/15. Network device support
网络设备支持。上面选好协议了,现在该选设备.
Ethernet (10 or 100Mbit) --->
耐心点,一般说来你都能找到自己用的网卡。如果没有,你只好自己到厂商那里去down驱动了,或者去www.mydrivers.com看看
/16. Amateur Radio support
没有,不选.
/17. IrDA(infrared)support
这个要红外支持.
/18. ISDN subsystem
如果你使用ISDN上网,这个就必不可少了
/19. Old CD-ROM drivers(not SCSI、not IDE)
专门为非SCSI/IDE口的光驱做的,但谁还在用那么老的东东啊,自己选吧.
/20.Input Core Support
这个选项很重要,除了joystick(游戏遥控杆)建议都选"m".切记!
/21. Character devices
字符设备。这个内容又太多了,先使用缺省设置,需要的话自己就修改:
I2C support:I2C是Philips极力推动的微控制应用中使用的低速串行
总线协议。如果你要选择下面的Video For Linux,该项必选。
Mice:鼠标。如果是笔记本,建议在Bus Mouse Support选上"y".
Joysticks:手柄。即使在Linux下把手柄驱动起来意义不大
Watchdog Cards:虽然称为Cards,这个可以用纯软来实现,当然也有
硬件的。如果你把这个选中,那么就会在你的/dev下创建一个名为
watchdog的文件,它可以记录你的系统的运行情况,一直到系统重新
启动的1分钟左右。有了这个文件,你就可以恢复系统到重启前的状态了。
Video For Linux:支持有关的音频/视频卡。
Ftape, the floppy tape device driver:
PCMCIA character device support:
/22.Multimedia devices
为捕捉audio/video用,如果感兴趣看看help
/23. File systems
文件系统。内容太多了,建议在缺省选项的基础上进行修改。
介绍以下几项:
Quota support:Quota可以限制每个用户可以使用的硬盘空间的上限,在多用户共同使用一台主机的情况中十分有效。
DOS FAT fs support:
DOS FAT文件格式的支持,可以支持FAT16、FAT32。
ISO 9660 CD-ROM file system support:光盘使用的就是ISO 9660的文件格式。
NTFS file system support:ntfs是NT使用的文件格式,你要在linux下mount ntfs分区的话,就要选上它。记得在mount的时候,
只有iocharset=cp936可以加上,codepage=936不能加。
/proc file system support:/proc文件系统是Linux提供给用户和系统进行交互的通道,建议选上,否则有些功能没法正确执行。
还有另外三个大类都规到这儿了:Network File Systems(网络文件系统)、
Partition Types(分区类型)、Native Language Support(本地语言支持)。
值得一提的是Network File Systems里面的两种:NFS和SMB分别是Linux和Windows相互以网络邻居的形式访问对方所使用的文件系统,根据需要加以选择。
/24 Console drivers
用缺省
/25 Sound
你用什么声卡?选选吧.
/26 USB Support
很重要,至少要选以下选项(不记得是哪位大虾说的了,好像不选也没问题)
Support for USB
UCHI Alternate Deriver (JE) Support
OCHI (Compaq,iMacs...
USB Audio...
USB MIDI...
USB Human Interface Device (full HID) support
HID input layer support
/dev/hiddev raw HID...
USB LCD device support
*如果有某些选项那不准,可以参考:
/usr/src/linux-2.4/Documentation/Configure.help
也可以search整个系统并看看相关的文字都在哪些文件出现:
make dep 检测是否有相关的软件包被使用
make clean 为新内核结构准备源目录树
make bzImage 创建内核引导映像
make modules、
make modules_install 生成模块
make install安装新的内核到指定位置并重新配置。
配置grub.conf装载启动信息:
Default=1 注:默认启动为以前的内核,改为0则可以从现在的新内核启动
Title Red Hat Linux(2.4.20)
Root (hd0,0)
Kernel /vmlinuz-2.4.20 ro root=/dev/hda6(根目录挂载分区)
Initrd /initrd-2.4.20.img
到这里新内核就安装完毕了,请重启并用此内核引导系统。
5 安装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 ort Scheduler Flags
->; RemoteAddress ort Forward Weight ActiveConn InActConn
到现在为止,支持负载均衡功能的director就安装成功了,接下来我们可以通过ipvsadm来配置一个负载均衡集群。
二 构建负载均衡集群
这里我们假设局域网中有两台Http服务器,实际IP分别为Http1:192.168.169.172,Http2: 192.168.169.240这里只说明DR(Direct Routing)方式的LVS负载平衡。
负载均衡机(实际IP192.168.169.206)上执行的设置
为了方便我们将所有步骤写成一个shell script.
#!/bin/bash
echo "0" > /proc/sys/net/ipv4/ip_forward (关闭ip_forward)
echo "1" > /proc/sys/net/ipv4/conf/all/send_redirects (开启ICMP Redirects)
echo "1" > /proc/sys/net/ipv4/conf/default/send_redirects (开启ICMP Redirects)
echo "1" > /proc/sys/net/ipv4/conf/eth0/send_redirects (开启ICMP Redirects)
ifconfig eth0:100 192.168.169.205 broadcast 192.168.169.205 netmask 255.255.255.255(设置负载均衡机的虚拟IP为192.168.169.205,100为虚拟机使用的端口号)
route add -host 192.168.169.205 dev eth0:100 (设置达到虚拟Ip的路由)
ipvsadm –C (清空ipvsadm table)
ipvsadm -A -t 192.168.169.205:80 -s wrr (-A添加虚拟的服务器,-t服务器地址端口,-s调度算法,当前调度算法为加权轮叫调度)
ipvsadm -a -t 192.168.169.205:80 -r 192.168.169.240 -g -w 1(-a添加真实服务器,-t虚拟服务器地址端口,-r真实服务器地址端口,-g网关,默认路由,-w权值)
ipvsadm -a -t 192.168.169.205:80 -r 192.168.169.172 -g -w 1
ipvsadm (检查当前ipvsadm table)
将此shell script加入到/etc/rc.local中,这样在每次系统启动时都可以自动运行进行设置了。
三 Realserver(即192.168.169.240和192.168.169.172)上的设置
安装MS Loopback Adapter,在添加新硬件-〉添加网络适配器-〉microsoft->Loopback adapter,设置Loopback Adapter的IP为192.168.169.205子网掩码可以通过修改注册表设置子网掩码为255.255.255.255, 这在DR系统中工作良好。而且这比每次启动时删除外部路由的方法要方便的多。
在Windows 2003,中 打开注册表在:
HKEY_LOCAL_MACHINE\System\CurrentControl\SetServices\Tcpip\Parameters\Interfaces
找到适当的网络界面IP地址,修改它的子网掩码,(注意修改方式)不需要重启,只需重新激活该网络界面即可。
四Ldirectord的安装配置
1. 相关软件下载
Ldirector(Linux Director Daemon)是Jacob Rief开发的为监控真实服务器的专门软件。它不光可以在HeartBeat中启动还可以单独在命令行启动。
一些文章介绍在ipvs-x.x.x.tar.gz中已包含了Ldirectord,估计该作者并没有进入到相关目录中去仔细查看,该目录中只有一个README文件,告诉你在哪里可以找到Ldirecrtord的代码。总之我在ipvs-1.0.9.tar.gz中是没有看到Ldirectord 源代码。其实它的源代码是包含在heartbeat-1.0.3.tar.gz中的。下载该文件。
安装过程中可能会需要下载其他的相关软件如:glid和libnet,可以到ftp://ftp.gtk.org/pub/gtk/v1.2/和http://www.packetfactory.net/libnet/下载新的版本。
2. 安装过程
进入到hearbeat-1.0.3.tar.gz所在的文件并对文件进行解压。然后:
cd heartbeat-1.0.3
./ConfigureMe configure
make
make install
这时hearbeat和ldirectord都已经安装完毕。
关于配置文件。heartbeat -1.0.3/ ldirectord/ldirectord.cf文件是Ldirectord的配置文件的范例。拷贝该文件到/etc/ha.d/目录下,修改其内容,并另存为xxx.cf(例如:www.cf,mail.cf),以便在Heartbeat的配置文件haresources中使用。
checktimeout=3 (一个真实的服务器被认为出错所需的时间间隔)
checkinterval=1 (发出检查的时间间隔)
#autoreload=no (自动重载,默认值是no,选yes时配置文件发生变化后就会自动载入)
#callback=配置文件的路径(用来重载配置文件)
fallback=127.0.0.1:80 (当所有的真实服务器出错时,web服务重定向的地址)
#logfile="/var/log/ldirectord.log" (日志文件的目录)
#logfile="local0"
#execute=”configuration”(为这个配置文件启动ldirectord的实例)
quiescent=yes(当选择yes时,一台真实服务器down以后,并不是把它从lvs的表中删除,而是把它的权值设为0,新的链接将不可达)
# A sample virual with a fallback that will override the gobal setting
virtual=192.168.169.205:80 (虚拟的ip和端口号)
real=192.168.7.11:80 gate ( 真实的服务器)
real=192.168.7.12:80 gate
fallback=127.0.0.1:80 gate
checktype=negotiate(检测类型,默认为negotiate)
service=http
checkport:80 (检查的端口号)
request="test" (负载平衡机将查询实际server的服务目录下面是不是 有该文件,如果有说明server还是在服务的,没有将认为它已经出错)
receive="test "
scheduler=rr (调度算法)
#persistent=600
#netmask=255.255.255.255
protocol=tcp (协议)
3. 启动
输入 ldirectord start 启动服务,ldirectord stop停止服务,ldirectord rload 重新载入配置信息。
现在本人试装了双网卡不过还有一些问题,有时间和大家讨论。
[ 本帖最后由 llsshh 于 2006-5-25 15:33 编辑 ] |
|