DR模式:通过director将报文源和目标MAC地址修改,发送给RS,RS不经过DS将响应报文直接发送给client。
LVS服务器(DS) | DIP:172.22.5.10 | VIP:172.22.5.200 |
---|---|---|
http服务器RS1 | RIP:172.22.5.20 | VIP:172.22.5.200 |
http服务器RS2 | RIP:172.22.5.30 | VIP:172.22.5.200 |
VIP:虚拟IP,也叫漂移地址,当一台DS死机时,VIP自动绑定到备用DS的网卡上,它是暴露给外部的访问地址。
注意:
1.测试效果时应该访问VIP
2.实验之前关闭所有机器的防火墙、selinux、NetworkManager
3.RS需要开启http服务及编写简单网页
LVS服务器(DS) 配置:
yum install -y ipvsadm #第一步:安装ipvsadm服务
第二步:执行脚本
#!/bin/bash
#定义相关参数
PORT=80
VIP=172.22.5.200
RIP=(172.22.5.20
172.22.5.30
)
start(){
echo 1 > /proc/sys/net/ipv4/ip_forward #开启转发
ifconfig ens33:0 $VIP netmask 255.255.255.0 up #开启虚拟网卡
route add -host $VIP dev ens33 #添加静态路由
ipvsadm -C #清空之前规则
ipvsadm -A -t $VIP:$PORT -s wrr #添加虚拟TCP服务,采用带权值轮询算法
for ((i=0;i<${#RIP[*]};i++))do #循环添加真实服务器节点
ipvsadm -a -t $VIP:$PORT -r ${RIP[$i]}:$PORT -g -w 100 #-g代表DR模式
done
}
stop(){
ipvsadm -C
ifconfig ens33:0 down #关闭虚拟网卡
route del -host $VIP dev ens33 #清除静态路由
}
case "$1" in #依据输入参数判断应该执行的行为
start)
start
echo "ipvs is start"
;;
stop)
stop
echo "ipvs is stop"
;;
restart)
stop
echo "ipvs is stop"
start
echo "ipvs is start"
;;
*)
echo "usage:$0 {start|stop|restart}"
esac
http服务器RS配置:
#!/bin/bash
VIP=172.22.5.200 #定义虚拟IP
PORT=80 #端口
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 up #开启回环地址
route add -host $VIP dev lo #添加静态路由
echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore # 将对应网卡设置为只回应目标IP为自身接口地址的ARP请求
echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce # 将ARP请求的源IP设置为eth0上的IP,也就是RIP
echo "1">/proc/sys/net/ipv4/conf/all/arp_announce
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
echo "start LVS of REALServer IP"
;;
stop)#操作流程与start()相反
ifconfig lo:0 $VIP/32 down
route del -host $VIP dev lo
echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0">/proc/sys/net/ipv4/conf/all/arp_announce
echo "0">/proc/sys/net/ipv4/conf/all/arp_announce
echo "stop LVS OF REALServer"
;;*)
echo "Usage: $0 {start|stop}"
esac