echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce ifconfig lo:0 172.16.21.100 broadcast 172.16.21.100 netmask 255.255.255.255 up route add -host 172.16.21.100 dev lo:0
解释一下脚本意思 ,因为linux系统对把ip当成是系统资源而不是网卡资源,当主机中有多块网卡时,对于arp解析请求,
系统就会默认将ip与mac的映射关系全部通告出去。
arp-ignore 定义在响应别人的arp广播请求时所使用的不同的模型
0 (DEFAULT)
1只响应目标IP地址与自己是同一个网段的arp请求
arp-annoance 定义不同的限制级别通过某个接口通告源ip的ARP
0(DEFAULT) 将任意本地地址,向外通告
1 当有多个IP地址时,当处理arp请求时,试图响应的是同一网络的arp请求所对应的ip地址
2 一定��应的是同一网络的arp请求
这样就保证了Realserver的出站的数据包在ip头部中定义的源地址为client所请求的目标ip
Director(172.16.21.1) 中的配置
#ifconfig eth0:1 172.16.21.100 broarcast 172.16.21.100 netmask 255.255.255.255 up将eth0:1定义为VIP
#iptables -t mangle -A PREROUTING -i eth0 -p tcp -d 172.16.21.100 --dport 80 -j MARK --set-mark 20 #iptables -t mangle -A PREROUTING -i eth0 -p tcp -d 172.16.21.100 --dport 443 -j MARK --set-mark 20 因为是基于防火墙的,需要在mangle表PREROUTING链做端口标记
#ipvsadm -A -f 20 -s wlc -p 1200 #ipvsadm -a -f 20 -r 172.16.21.21 -g -w 3 #ipvsadm -a -f 20 -r 172.16.21.22 -g -w 2
将Realserver1和Realserver2添加进来
脚本:
A=172.16.21.21 B=172.16.21.22 elinks -dump $A/a.index >/tmp/21.txt elinks -dump $B/a.index >/tmp/22.txt if grep 'ok' /tmp/21.txt ;then if ipvsadm -L |grep $A &>/dev/null;then sleep 1; else ipvsadm -a -f 20 -r $A -g -w 3 fi else ipvsadm -d -f 20 -r $A fi if grep 'ok' /tmp/22.txt ;then if ipvsadm -L |grep $B &>/dev/null;then sleep 1; else ipvsadm -a -f 20 -r $B -g -w 3 fi else ipvsadm -d -f 20 -r $B fi
实验结果测试:
1.打开浏览器输入https:172.16.21.100
2.我们关掉172.16.21.22这台服务器,在访问172.16.21.100
我们执行上面的测试脚本:
再访问172.16.21.100
Director检测结果