首页 Linux网维 在RedHat上实现集群负载均衡系统

在RedHat上实现集群负载均衡系统

负载均衡集群是在应用服务器高负载的情况下,由多台节点提供可伸缩的,高负载的服务器组以保证对外提供良好的服务响应;而LVS就是实现这一功能的技术,它通过使内核支持ipvs来实现LVS…

负载均衡集群是在应用服务器高负载的情况下,由多台节点提供可伸缩的,高负载的服务器组以保证对外提供良好的服务响应;而LVS就是实现这一功能的技术,它通过使内核支持ipvs来实现LVS/Direct Routing (DR)、LVS/IP Tunnel、LVS/NAT的功能。

1.前言 先来简单说说负载均衡集群, 它是在应用服务器高负载的情况下,由多台节点提供可伸缩的,高负载的服务器组以保证对外提供良好的服务响应;而LVS就是实现这一功能的技术,它通过使内核支持ipvs来实现LVS/Direct Routing (DR)、LVS/IP Tunnel、LVS/NAT的功能。

由于本文的着眼点在于如何利用LVS构建一个负载均衡集群,所以关于负载均衡集群、LVS的详细内容就不在这里阐述了,如果大家有兴趣可参考如下信息: http://www.linuxvirtualserver.org/

LVS的官方网站 http://www-900.ibm.com/developerWorks/cn/linux/cluster/lvs/part1/index.shtml LVS项目介绍  RedHat 7.3/8.0都把ipvs预先编译到了RedHat发行版的内核中,但使用的ipvs版本比较低是ipvs 0.9.7/1.0.4,从RedHat 9开始ipvs不再被预先编译到了RedHat发行版的内核中,本文介绍了如何把最新版的ipvs Version 1.0.9编译到内核中并配置负载均衡集群的方法和一些技巧。

不论是在哪个版本的RedHat Linux上安装ipvs,工作大都可以分为如下几步:

在RedHat上实现集群负载均衡系统插图

图1给出了最简单的负载均衡集群的网络拓扑,这里需要指出的是以上提到的安装ipvs/ipvsadm的工作都是在Director上进行的。 

在RedHat上实现集群负载均衡系统插图1

图 12.在RedHat Linux上实现ipvs 在RedHat 7.3/8.0已经预先打了ipvs的补丁,在预安装的内核中已将ipvs编译成模块,如果你能在目录/lib/modules/2.4.18- */kernel/net/ipv4/ipvs中看到ip_vs_*文件,就证明你的系统已经支持ipvs,可以通过如下步骤安装ipvsadm并配置转发方式。

在RedHat上实现集群负载均衡系统插图2

但系统预编译的ipvs是比较早的版本(version 0.9.7/1.0.4),本文把它升级到最新的版本Version 1.0.9 2.1得到内核源码和相关的软件包 这里需要强调的是由于RedHat 7.3/8.0的内核源码中已经预先打了ipvs的补丁,所以在安装ipvs时不能使用RedHat光盘中的Kernel Source,而是需要去下载标准的内核。

对于RedHat 9.0,虽然内核中没有预编译ipvs,但我还是提倡使用standard kernel,因为所有的ipvs的补丁包都是为标准内核开发的从kernel ftp site得到standard kernel linux-2.4.18.tar.gz(RedHat 7.3/8.0), linux-2.4.20.tar.gz (RedHat 9.0), 从lvs homepage 得到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 –s linux-2.4.18* linux,因为在ipvs-1.0.9中的makefile文件中默认指定Kernel Source的路径为: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,依次执行如下命令:make patchkernel、make installsource,将ipvs的Patch加载到kernel的source中。

当然您也可以用linux-2.4.20-ipvs- 1.0.9.patch.gz直接patch到内核中,在/usr/src执行 gzip -cd linux-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目录,分别执行: make mrproper 为创建新的内和配置做好准备 make menuconfig 进行配置 主界面–>Networking options选项–>IP:Virtual Server Configuration选项(如图2 图3)

IP:Virtual Server Configuration中的选项设定都用M make dep 检测是否有相关的软件包被使用 make clean 为新内核结构准备源目录树 make bzImage 创建内核引导映像

make modules、make modules_install 生成模块 

在RedHat上实现集群负载均衡系统插图3

图2 

在RedHat上实现集群负载均衡系统插图4

图3注意的问题:如果使用Standard Kernel,在make menuconfig时可能在Networking options选项中找不到IP:Virtual Server Configuration选项,这是因为没有选中Network packet filtering选项,如图 4

在RedHat上实现集群负载均衡系统插图5

图 4IP:Virtual Server Configuration选项是基于Network packet filtering选项的 技巧:在make menuconfig时,我们面对众多的选项常常不知道该如何选择,此时可以把安装时的配置文件copy到/usr/src/linux中:cp /boot/config-2.4.* /usr/src/linux/.config,再用make menuconfig编译,它会读取.config中原来的配置信息,这样只要对IP:Virtual Server Configuration中的新选项选择即可。

2.4启用新内核 mkinitrd /boot/initrd-2.4.18ipvs.img 2.4.18 创建initrd映像 cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.18ipvs

cd /boot rm vmlinuz ln –s vmlinuz-2.4.18ipvs vmlinuz cp /usr/src/linux/System.map /boot/System.map-2.4.18ipvs

cd /boot rm System.map ln –s System.map-2.4.18ipvs System.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转发方式和调度算法的工具 tar xzvf ipvsadm-1.21.tar.gz

cd ./ipvsadm-1.21 make make install 安装完成后,执行ipvsadm命令,如果有如下信息出现则说明安装成功了。

在RedHat上实现集群负载均衡系统插图6

到现在为止,支持负载均衡功能的director就配置成功了,接下来我们可以通过ipvsadm来配置一个负载均衡集群 3.配置LVS,构建负载均衡集群 LVS提供了三种转发方式:VS/NAT、VS/DR 、VS/TUN, 而不同的转发方式对后端的realserver要求也不同(如表1)  。

表 1

在RedHat上实现集群负载均衡系统插图7

构建负载均衡集群的工作主要涉及三个方面(如图5): 

在RedHat上实现集群负载均衡系统插图8在RedHat上实现集群负载均衡系统插图9

图 53.1修正realserver上可能的arp problem  注意的问题:这里所说的修正系统的arp problem主要是针对realserver使用linux操作系统,而且转发方式为VS/DR和VS/TUN的情况。

这是因为在使用VS/DR和 VS/TUN的时候,会需要一块网卡上绑定两个IP的情况,但linux在kernel 2.2.14以后就将eth0:1的NOARP FLAG关闭,这使得eth0:1仅仅是eth0的别名,任何对eth0:1的操作都对eth0有效,因此如果此时使eth0:1 NOARP,则也使得eth0 NOARP,这样整个网卡都不会收到数据包,所以要修正系统的arp problem,使eth0:1不响应arp请求,同时eth0仍能接受数据包。

有关Arp问题的详细内容请参见:LVS-HOWTO-arp problem  由表1可以看出对应不同的转发方式,realserver上可以使用的操作系统也是不同的,而linux和windows 2000 server则是所有转发方式都支持的操作系统,作者在本文中也是分别以这两种操作系统为例予以介绍。

修正realserver上可能的arp problem时,根据转发方式和操作系统的不同分为如下几种情况: 3.1.1 VS/NAT方式  不论操作系统选择linux还是windows 2000 server,对系统不需要做任何修改。

3.1.2 VS/DR和VS/TUN方式  realserver使用linux操作系统,对系统的修改如下:  1) 下载所需的软件包  从kernel ftp site得到standard kernel linux-2.4.18.tar.gz,;从Julians patches and software page得到hidden-2.4.5-1.diff

2)重新编译内核,修正arp problem  把linux-2.4.18.tar.gz解压倒/usr/src目录,生成了 /usr/src/linux目录;(如果生成的是/usr/src/linux-2.4.18*目录,则要在/usr/src下建立一个连接 ln –s linux-2.4.18* linux)

把hidden-2.4.5-1.diff放到/usr/src/linux下,用命令patch -p1 < hidden-2.4.5-1.diff对kernel进行patch  进入/usr/src/linux目录,依次执行make mrproper、make menuconfig(可以把安装时的配置文件copy到/usr/src/linux中:cp /boot/config-2.4.* /usr/src/linux/.config,再编译)、make dep、 make clean、make bzImage、make modules、make modules_install

3)启用新内核(与2.4节相同)  realserver使用windows 2000 server操作系统  不需对系统本身作修改,但要在配置时(图5中步骤③)屏蔽arp响应,具体方法在3.2.2中介绍。

3.2 配置LVS 对LVS的配置分为在director上的设置和在realserver上的设置,而对于不同的转发方式:VS/NAT、VS/DR 、VS/TUN,这些设置也有所不同 3.2.1使用VS/NAT方式。

1)网络拓扑(如图6) 

在RedHat上实现集群负载均衡系统插图10

图6 2)Director上执行的设置(以Telnet服务, 轮叫(rr)策略为例)

在RedHat上实现集群负载均衡系统插图11

3)Realserver上的设置  ⑴使用Linux操作系统,执行如下命令 

在RedHat上实现集群负载均衡系统插图12

⑵使用windows 2000 server操作系统,则只要把默认网关设置成192.168.1.9 3.2.2使用VS/DR方式  1)网络拓扑(如图7)

在RedHat上实现集群负载均衡系统插图13

图7 2)Director上执行的设置(以Telnet服务, 轮叫(rr)策略为例)

在RedHat上实现集群负载均衡系统插图14

3)Realserver上的设置  ⑴使用Linux操作系统(patch过hidden-2.4.5-1.diff),执行如下命令 

在RedHat上实现集群负载均衡系统插图15

⑵使用windows 2000 server操作系统

在RedHat上实现集群负载均衡系统插图16

3.2.3使用VS/TUN方式  1)网络拓扑(如图8) 

在RedHat上实现集群负载均衡系统插图17

图 8 2)Director上执行的设置(以Telnet服务, 轮叫(rr)策略为例) 

在RedHat上实现集群负载均衡系统插图18

3)Realserver上的设置  ⑴使用Linux操作系统(patch过hidden-2.4.5-1.diff),执行如下命令

在RedHat上实现集群负载均衡系统插图19

⑵使用windows 2000 server操作系统 

在RedHat上实现集群负载均衡系统插图20

技巧:在上文设置过程中给出的命令都可以改写成符合init语法的标准脚本,并加入到/etc/init.d/rc.local中,这样在每次系统启动时都可以自动运行进行设置了 4.总结  本文中所讨论的负载均衡其实只是集群应用中的一个方面,其它的集群应用还包括高性能计算集群、高可用性集群等,而每种应用都涉及到很多具体的技术,希望能和大家共同交流,一同推动集群技术的应用和发展。

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

作者: 3182235786a

为您推荐

linux文件命令

linux文件命令

在 Linux 中,我们可以使用 `with open()` 语句和 `write()` 函数来写入文件。以下是一个简单...
linux的命令

linux的命令

以下是一个简单的 Linux 命令示例,该命令将显示当前日期和时间: “`c #include <st...
linux 命令

linux 命令

由于 Linux 命令是由 C 语言编写的,因此下面是一个简单的用中文编写的 Linux 命令示例,它将输出“Hello...
linux命令tar

linux命令tar

这个问题看起来有些模糊,我不确定您是想了解如何在 Linux 系统中使用 tar 命令,还是如何编写一个名为 tar 的...
linux压缩命令

linux压缩命令

Linux压缩命令:高效管理文件和目录 Linux操作系统提供了一系列强大的压缩命令,使您能够高效地管理文件和目录。无论...

发表回复

返回顶部