三台虚拟机来做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
可以看到这些连接被平均的分配两个主机上了