Linux负载均衡软件LVS的简单示例

jopen 10年前

本文一个简单的示例演示LVS的配置(DR模式)和测试。
使用的配置环境如下:
Director server: 192.168.8.4
Real server1: 192.18.8.5
Real server2: 192.168.8.6
VIP: 192.168.8.200
网络topology图如下:
20140921153317209.gif
图2中的VIP指的是虚拟IP地址,还可以叫做LVS集群的服务IP,在DR、TUN模式中,
数据包是直接返回给用户的,所以,在Director Server上以及集群的每个节点上都需要设置这个地址。
此IP在Real Server上一般绑定在回环地址上,例如lo:0。
在Director Server上,虚拟IP绑定在真实的网络接口设备上,例如eth0:0。
Linux2.6内核默认支持LVS功能,系统安装完毕,可以通过如下命令检查kernel是否已经支持LVS的ipvs模块:
[root@localhost ~]#modprobe -l |grep ipvs
/lib/modules/2.6.18-53.el5/kernel/net/ipv4/ipvs/ip_vs_sh.ko
/lib/modules/2.6.18-53.el5/kernel/net/ipv4/ipvs/ip_vs_rr.ko
如果有类似上面的输出,表明系统内核已经默认支持了IPVS模块。接着就可以安装IPVS管理软件了。

一  在Director Serve上安装IPVS管理软件
下载对应的ipvsadm-1.24版本,接着进行安装:
tar zxvf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
make
make install
注意:在make时可能会出现错误编译信息,这是由于编译程序找不到对应内核的原因,
按照如下操作就可以正常编译:
[root@localhost ~]#ln -s /usr/src/kernels/2.6.18-53.el5-i686/  /usr/src/linux
安装完成后,通过ipvsadm命令行进行配置

首先在Director Server上绑定一个虚拟IP,此IP用于对外提供服务,执行如下命令:
ifconfig eth0:0 192.168.8.200 broadcast 192.168.8.200 netmask 255.255.255.255 up

这样在eth0设备上绑定了一个虚拟设备eth0:0,同时设置了一个虚拟IP是192.168.8.200,
也就是上面我们规划的IP地址,然后指定广播地址也为192.168.8.200,需要特别注意的是,
这里的子网掩码为255.255.255.255。
然后给设备eth0:0指定一条路由,执行如下指令:
route add -host 192.168.8.200 dev eth0:0
接着启用系统的包转发功能,从而使系统充当路由器,执行如下指令:
[root@localhost ~]#echo "1" >/proc/sys/net/ipv4/ip_forward
指令中,参数值为1时启用ip转发,为0时禁止ip转发。其实在DR模式中,开启系统的包转发功能不是必须的,
而在NAT模式下此操作是必须的。
然后开始配置ipvs,执行如下操作:
ipvsadm -C
ipvsadm -A -t 192.168.8.200:8080 -s rr
ipvsadm -a -t 192.168.8.200:8080 -r 192.168.8.5:8080 -g
ipvsadm -a -t 192.168.8.200:8080 -r 192.168.8.6:8080 -g
上面操作中,第一行是清除内核虚拟服务器列表中的所有记录,
第二行是添加一条新的虚拟IP记录,同时指定策略为轮询。
第三、四行是在新加虚拟IP记录中添加两条新的Real Server记录,并且指定LVS的工作模式为直接路由模式。
-g代表gateway,意思为直接路由,还可以有-i(internet)隧道模型,-m(masq)伪装,NAT模式

二、Real server 的配置
在lvs的DR和TUN模式下,用户的访问请求到达真实服务器后,是直接返回给用户的,
而不再经过前端的Director Server,因此,就需要在每个Real server节点上增加虚拟的VIP地址,
这样数据才能直接返回给用户,增加VIP地址的操作可以通过下面的命令来实现:
ifconfig lo:0 192.168.8.200 broadcast 192.168.8.200 netmask 255.255.255.255 up
#子网掩码255.255.255.255表示这个整个网段只有这一个地址
route add -host 192.168.8.200 dev lo:0
#上面的命令表示网络请求地址是192.168.8.200的请求,返回的时候的源地址是lo:0网卡上配置的地址,
#这样出去的ip包的src地址就是192.168.8.200
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p

在回环设备上绑定了一个虚拟IP地址,并设定其子网掩码为255.255.255.255,
与Director Server上的虚拟IP保持互通,然后禁止了本机的ARP请求。
由于虚拟ip,也就是上面的VIP地址,是Director Server和所有的Real server共享的,
如果有ARP请求VIP地址时,Director Server与所有Real server都做应答的话,就会出现问题,
因此,需要禁止Real server响应ARP请求。

三、在Real server上配置tomcat服务,略。
在192.18.8.5建一个html文件内容为:
this is the test page

from server 192.168.8.5
在192.18.8.6建一个html文件内容为:
this is the test page

from server 192.168.8.6

四 测试
客户端通过VIP访问,如下面的url
http://192.168.8.200:8080/test/test.html
可以发现返回的内容由192.168.8.5和192.168.8.6轮流提供。 

来自:http://blog.csdn.net/kkdelta/article/details/39452019