三台虚拟机来做lvs的负载均衡实验,vm01是负载均衡器,只有一块网卡,vm02和vm03是真正的web服务器,他们的关系 ,这里和nat模式的lvs之间的区别就是他们之间的服务器ip地址可以在一个网段。这里就是传说中的tun隧道模式 

vm01 

eth0:192.168.1.200

vip:192.168.1.30 

vm02

eth1:192.168.1.201 

vm03

eth1:192.168.1.202 


一,负载均衡器安装

IPVS是整个负载均衡的基础,如果没有这个基础,那么故障隔离和失败切换就没有意义

[root@vm01 ~]# yum install -y ipvsadm

[root@vm01 ~]# lsmod |grep ip_vs
[root@vm01 ~]# modprobe ip_vs
[root@vm01 ~]# lsmod |grep ip_vs
ip_vs 122241 0 
这里不能靠进程来判断是不是加载了ip_vs模块,因为这里就是一个命令,没有产生进程。


二,创建lvs tun模式启动脚本

[root@vm01 ~]# vim /etc/init.d/lvstun 

#!/bin/bash
VIP=192.168.1.30
RIP1=192.168.1.201
RIP2=192.168.1.202
case "$1" in
start)
echo "start LVS of DirectorServer tun"
/sbin/iptables -F
/sbin/ipvsadm -C
/sbin/ifconfig tunl0 $VIP 
broadcast $VIP netmask 255.255.255.255 up

/sbin/route add -host $VIP dev tunl0 

/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -i
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -i
/sbin/ipvsadm
;;
stop)
echo "stop LVS of DirectorServer tun"
echo "0" >/proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm -C
/sbin/ifconfig tunl0 down
;;
*)

echo "error"
exit 1
esac

[root@vm01 ~]#chmod a+x /etc/init.d/lvstun


三,vm02和vm03上的配置

#vim /etc/init.d/lvsrstun

#!/bin/bash

#DR server

VIP=192.168.1.30

case "$1" in

start)

echo "start LVS of tun"

/sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up

/sbin/route add -host $VIP dev tunl0

echo "1" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore

echo "2" > /proc/sys/net/ipv4/conf/tunl0/arp_announce

echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

;;

stop)

echo "stop LVS of tun"

/sbin/ifconfig tunl0 down

echo "0" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore

echo "0" > /proc/sys/net/ipv4/conf/tunl0/arp_announce

echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore

echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce

;;

*)

echo "Usage:$0 {start|stop}"

esac

exit 1

注:tun模式VIP必须跟服务器同一网段

echo"1";echo"2" 是为了抑制arp广播作用

#chmod a+x /etc/init.d/lvsrstun

#service lvsrstun start



vim /etc/sysconf/network-script/ifcfg-eth1

DEVICE=eth1
BOOTPROTO=static
ONBOOT=yes
HWADDR=00:16:3e:79:71:18
IPADDR=192.168.1.202
NETWORK=192.168.1.0
NETMASK=255.255.255.0


排错。

Attempting to checksum a non-TCP/UDP packet, dropping a protocol 4 packet<3>

由于上面用的是xen的虚拟化,但是使用vmware的虚拟化时,就可以了.具体的原因还不清楚

四,测试

[root@vm01 ~]# ipvsadm -lnc
IPVS connection entries
pro expire state source virtual destination
TCP 01:56 FIN_WAIT 192.168.1.203:35952 192.168.1.30:80 192.168.1.202:80
TCP 01:44 FIN_WAIT 192.168.1.203:35951 192.168.1.30:80 192.168.1.201:80

可以看到这些连接被平均的分配两个主机上了

211914237.jpg