
Real 1
Eth1
Eth0
Director
Real 1
注:我这些实验都是用虚拟机做的,eth0是桥接,eth1是host-only
本址网卡IP地址为:10.1.1.252,host-onlyIP地址是192.168.1.252
所以自己的真实主机也可以做客户机来测试的!!!!!!!!!!!
| 主机 | IP | 网关 |
| Client | 192.168.1.11 | 192.168.1.10 |
| Director | Eth1:192.168.1.10/24(VIP) Eth0:10.1.1.10/24(DIP) | |
| Real1 | Eth0:10.1.1.11/24(RIP) | 10.1.1.10 |
| Real2 | Eth0:10.1.1.12/24(RIP) | 10.1.1.10 |
real1、real2都启动http服务
Real1网页的内容为:
I'm Real 1 !!!!!!!!!!!!!
IP:10.1.1.11
Real2网页的内容为:
I'm Real 2 !!!!!!!!!!!!!
IP:10.1.1.12
安装软件:
ln -s /usr/src/kernels/2.6.18-194.el5-i686/ /usr/src/linux
tar xf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
make
make install
在Director自己编辑一个服务脚本lvsdi,内容如下:
[root@director ~]# more /etc/init.d/lvsdi
#!/bin/bash
#description:start LVS of DirectorServer
VIP=192.168.1.10
RIP1=10.1.1.11
RIP2=10.1.1.12
case "$1" in
start)
echo "start LVS of DirectorServer"
echo "1" > /proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm -C
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -m
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -m
touch /var/lock/subsys/ipvsadm > /dev/null 2>&1
/sbin/ipvsadm
;;
stop)
/sbin/ipvsadm -C
/sbin/ipvsadm -Z
rm -rf /var/lock/subsys/ipvsadm > /dev/null 2>&1
echo "ipvsadm stoped!!"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
echo "ipvsadm stoped!!!!!!!!"
exit 1
else
ipvsadm -ln
echo "...............ipvsadm is OK!"
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage:$0 {start|stop|restart|status}"
exit 1
esac
exit 0
注意权限:chmod +x /etc/init.d/lvsdi
我们运行这个服务:service lvsdi start
测试:
我们在客户机浏览器中输入http://192.168.1.10,可以看到浏览的是real的内容,反复刷新,出现的内容:
我们关闭real中的一台,网页内容都还可以显示
因为在工作环境中,所有的real都是共享数据的,也就是说他们提供的服务都是一样的,这里因为是做测试,所以两台主机的网页内容不一样,成功了!!!!!!!!!!!!!!!
我们看一下director的状态,由于使用的是Round Robin(rr)算法,发现real1、real2的应答数都是一样的
[root@director ~]# /etc/init.d/lvsdi status
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.10:80 rr
-> 10.1.1.12:80 Masq 1 0 16
-> 10.1.1.11:80 Masq 1 0 16
...............ipvsadm is OK!
下面我们使用另一个算法Weighted Round Robin(wrr)
改变算法:
[root@director ~]# /etc/init.d/lvsdi stop
ipvsadm stoped!!
[root@director ~]# /etc/init.d/lvsdi start
start LVS of DirectorServer
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.10:http rr
-> 10.1.1.12:http Masq 1 0 0
-> 10.1.1.11:http Masq 1 0 0
[root@director ~]# ipvsadm -E -t 192.168.1.10:80 -s wrr
改变权重:
[root@director ~]# ipvsadm -e -t 192.168.1.10:80 -r 10.1.1.11 -m -w 1
[root@director ~]# ipvsadm -e -t 192.168.1.10:80 -r 10.1.1.12 -m -w 5
然后我们到客户端的网页反复刷新,再次查看director的状态:
[root@director ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.10:80 wrr
-> 10.1.1.12:80 Masq 5 0 70
-> 10.1.1.11:80 Masq 1 0 45
我们可以看出
两台主机响应请求的次数不一样了!!!!!!!!!!
VS/DR
| 主机 | IP | 网关 |
| 真实机 | 10.1.1.252 | |
| Director | Eth0:10.1.1.10(DIP) Eth0:0:10.1.1.250/32(VIP) | 10.1.1.252 |
| Real1 | Eth0:10.1.1.11(RIP) lo0:0:10.1.1.250/32(VIP) | 10.1.1.252 |
| Real2 | Eth0:10.1.1.12(RIP) lo0:0:10.1.1.250/32(VIP) | 10.1.1.252 |
本址网卡IP地址为:10.1.1.252,host-onlyIP地址是192.168.1.252
所以自己的真实主机也可以做客户机来测试的!!!!!!!!!!!
测试环境:
real1、real2都启动http服务
Real1网页的内容为:
I'm Real 1 !!!!!!!!!!!!!
IP:10.1.1.11
Real2网页的内容为:
I'm Real 2 !!!!!!!!!!!!!
IP:10.1.1.12
安装软件:
ln -s /usr/src/kernels/2.6.18-194.el5-i686/ /usr/src/linux
tar xf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
make
make install
在Director自己编辑一个服务脚本lvsdi,内容如下:
[root@director ~]# more /etc/init.d/lvsdi
#!/bin/bash
#description:start LVS of DirectorServer
#define used ip.
#GW=10.1.1.252
VIP=10.1.1.250
RIP1=10.1.1.11
RIP2=10.1.1.12
case "$1" in
start)
echo "start LVS of Directort Server"
/sbin/ipvsadm -C
/sbin/ifconfig eth0:0 $VIP broadcast $VIP 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:0
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
touch /var/lock/subsys/ipvsadm > /dev/null 2>&1
/sbin/arping -I eth0 -c 5 -s $VIP $GW > /dev/null 2>&1
/sbin/ipvsadm
;;
stop)
/sbin/ipvsadm -C
/sbin/ipvsadm -Z
/sbin/ifconfig eth0:0 down
route del $VIP
rm -rf /var/lock/subsys/ipvsadm > /dev/null 2>&1
/sbin/arping -I eth0 -c 5 -s $VIP $GW
echo "ipvsadm stoped"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
echo "ipvsadm stoped!!!"
exit 1
else
ipvsadm -ln
echo "............ipvsadm is OK!"
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage:$0{start|stop|restart|status}"
exit 1
esac
exit 0
在两个real名自编辑一个一样的的服务脚本lvs_r,内容如下:
[root@real1 ~]# more /etc/init.d/lvs_r
#!/bin/bash
#chkconfig: 2345 70 80
#description:lvs_rs
VIP=10.1.1.250
case $1 in
start)
echo "Start LVS of Real Server"
echo "lo:0 port starting"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/eth0/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/eth0/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
;;
stop)
echo "close LVS Real Server"
echo "lo:0 port closing"
/sbin/ifconfig lo:0 down
echo "0" >/proc/sys/net/ipv4/conf/eth0/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/eth0/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}"
exit 1
esac
测试:
在real1和real2启动lvs_r脚本:[root@real1 ~]# service lvs_r start
在directory启动lvsdi脚本:[root@director ~]# service lvsdi start
[root@director ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.1.1.250:80 rr
-> 10.1.1.12:80 Route 1 0 26
-> 10.1.1.11:80 Route 1 0 26
跟上面一样的,这里就不折腾了!!!!!!!!!!!!!!!!!!!1
VS/TUN
| 主机 | IP | 网关 |
| 真实机 | 10.1.1.252 | |
| Director | Eth0:10.1.1.10(DIP) Eth0:0:10.1.1.250/32(VIP) | 10.1.1.252 |
| Real1 | Eth0:10.1.1.11(RIP) Tunl0:0:10.1.1.250/32(VIP) | 10.1.1.252 |
| Real2 | Eth0:10.1.1.12(RIP) Tunl0:0:10.1.1.250/32(VIP) | 10.1.1.252 |
本址网卡IP地址为:10.1.1.252,host-onlyIP地址是192.168.1.252
所以自己的真实主机也可以做客户机来测试的!!!!!!!!!!!
测试环境:
real1、real2都启动http服务
Real1网页的内容为:
I'm Real 1 !!!!!!!!!!!!!
IP:10.1.1.11
Real2网页的内容为:
I'm Real 2 !!!!!!!!!!!!!
IP:10.1.1.12
安装软件:
ln -s /usr/src/kernels/2.6.18-194.el5-i686/ /usr/src/linux
tar xf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
make
make install
其实这个拓扑和其它方面都是一样的,只是把lo0:0设备变成了tunl0设备了,下面我就写
Director跟real的配置了,每台主机的配置都是以脚本的形式形成
Directory:
[root@director ~]# more /etc/init.d/lvsdi
#!/bin/bash
#description:start LVS of DirectorServer
#define used ip.
#GW=10.1.1.252
VIP=10.1.1.250
RIP1=10.1.1.11
RIP2=10.1.1.12
case "$1" in
start)
echo "start LVS of Directort Server"
/sbin/ipvsadm -C
/sbin/ifconfig eth0:0 $VIP broadcast $VIP 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:0
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -i
touch /var/lock/subsys/ipvsadm > /dev/null 2>&1
/sbin/arping -I eth0 -c 5 -s $VIP $GW > /dev/null 2>&1
/sbin/ipvsadm
;;
stop)
/sbin/ipvsadm -C
/sbin/ipvsadm -Z
/sbin/ifconfig eth0:0 down
route del $VIP
rm -rf /var/lock/subsys/ipvsadm > /dev/null 2>&1
/sbin/arping -I eth0 -c 5 -s $VIP $GW
echo "ipvsadm stoped"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
echo "ipvsadm stoped!!!"
exit 1
else
ipvsadm -ln
echo "............ipvsadm is OK!"
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage:$0{start|stop|restart|status}"
exit 1
esac
exit 0
Real:
[root@real1 ~]# more /etc/init.d/lvs_r
#!/bin/bash
#chkconfig: 2345 70 80
#description:lvs_rs
VIP=10.1.1.250
case $1 in
start)
echo "Start LVS of Real Server"
echo "tunl0:0 port starting"
ip addr add dev tunl0 10.1.1.250/24 broadcast 10.1.1.250
ip link set dev tunl0 up
/sbin/route add -host $VIP dev tunl0
echo "1" >/proc/sys/net/ipv4/conf/eth0/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/eth0/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
;;
stop)
echo "close LVS Real Server"
echo "tunl0 port closing"
/sbin/ifconfig tunl0 down
echo "0" >/proc/sys/net/ipv4/conf/eth0/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/eth0/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}"
exit 1
esac
测试:
跟前面是一样的!!!!!!!!!!!!!
[root@director init.d]# service lvsdi start
start LVS of Directort Server
SIOCSIFADDR: 无效的参数
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.1.1.250:http rr
-> 10.1.1.12:http Tunnel 1 0 0
-> 10.1.1.11:http Tunnel 1 0 0
NAT + DR + TUN
| 主机 | IP | 网关 |
| 真实机 | 10.1.1.252 | |
| Director | Eth0:10.1.1.10(DIP) Eth1:192.168.1.10(DIP) Eth0:0:10.1.1.250/32(VIP) | 10.1.1.252 |
| Real1 | Eth0:192.168.1.11(RIP) | 192.168.1.10 |
| Real2 | Eth0:10.1.1.12(RIP) Lo:0:10.1.1.250/32(VIP) | 10.1.1.252 |
| Real3 | Eth0:10.1.1.13(RIP) Tunl0:10.1.1.250/32(VIP) | 10.1.1.252 |
本址网卡IP地址为:10.1.1.252,host-onlyIP地址是192.168.1.252
所以自己的真实主机也可以做客户机来测试的!!!!!!!!!!!
测试环境:
real1、real2都启动http服务
Real1网页的内容为:
I'm Real 1 !!!!!!!!!!!!!
IP:192.168.1.11
Real2网页的内容为:
I'm Real 2 !!!!!!!!!!!!!
IP:10.1.1.12
Real3网页的内容为:
I'm Real 3 !!!!!!!!!!!!!
IP:10.1.1.13
安装软件:
ln -s /usr/src/kernels/2.6.18-194.el5-i686/ /usr/src/linux
tar xf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
make
make install
其实这个拓扑和其它方面都是一样的,只是把lo0:0设备变成了tunl0设备了,下面我就写
Director跟real的配置了,每台主机的配置都是以脚本的形式形成
Director配置:
[root@director init.d]# more /etc/init.d/lvsdi
#!/bin/bash
#description:start LVS of DirectorServer
#define used ip.
#GW=10.1.1.252
VIP=10.1.1.250
RIP1=192.168.1.11
RIP2=10.1.1.12
RIP3=10.1.1.13
case "$1" in
start)
echo "start LVS of Directort Server"
echo "1" >/proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm -C
/sbin/ifconfig eth0:0 $VIP broadcast $VIP 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:0
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -m
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -i
touch /var/lock/subsys/ipvsadm > /dev/null 2>&1
/sbin/arping -I eth0 -c 5 -s $VIP $GW > /dev/null 2>&1
/sbin/ipvsadm
;;
stop)
/sbin/ipvsadm -C
/sbin/ipvsadm -Z
/sbin/ifconfig eth0:0 down
route del $VIP
rm -rf /var/lock/subsys/ipvsadm > /dev/null 2>&1
/sbin/arping -I eth0 -c 5 -s $VIP $GW
echo "ipvsadm stoped"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
echo "ipvsadm stoped!!!"
exit 1
else
ipvsadm -ln
echo "............ipvsadm is OK!"
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage:$0{start|stop|restart|status}"
exit 1
esac
exit 0
Real1不需要配置,只要把网关指向directory就行了
Real2跟Real3是一样的:
[root@real2 ~]# more /etc/init.d/lvs_r
#!/bin/bash
#chkconfig: 2345 70 80
#description:lvs_rs
VIP=10.1.1.250
case $1 in
start)
echo "Start LVS of Real Server"
echo "lo:0 port starting"
ip addr add dev lo:0 10.1.1.250/32 broadcast 10.1.1.250
ip link set dev lo:0 up
/sbin/route add -host $VIP dev tunl0
echo "1" >/proc/sys/net/ipv4/conf/eth0/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/eth0/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
;;
stop)
echo "close LVS Real Server"
echo "lo:0 port closing"
/sbin/ifconfig lo:0 down
echo "0" >/proc/sys/net/ipv4/conf/eth0/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/eth0/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}"
exit 1
Esac
