解决一:
Linux内置有过滤arp请求,直接响应
arp_announce
三个级别:0,default默认级别,用任何地址,能回答就回答
1, 尽量不用在不同子网和子接口的地址
2, 用最好的本地地址回答
arp_ignore 直接忽略
8个级别:0:default 默认
1:仅仅和请求的本地地址接口的地址一样才响应,否则ignore。
2.3…4…5..6..7..8
用sysctl –a |grep announce 可以查看arp_announce系统配置情况
同样sysctl -a|grep ignore 查看arp_ignore的系统配置情况
默认都为0
所以在director上的配置:
一块网卡:eth0 192.168.2.10
vip是拿eth0的子接口来充当eth0:0
Ifconfig eth0:0 192.168.2.100 netmask 255.255.255.255
#ipvsadm -A -t 192.168.2.100:80 -s rr
# ipvsadm -a -t 192.168.2.100:80 -r 192.168.2.20 -g
# ipvsadm -a -t 192.168.2.100:80 -r 192.168.2.30 -g
在所有的real server上边配置:
vip都是拿lo口的子接口来充当lo:0
Ifconfig lo:0 192.168.2.100 netmask 255.255.255.255
route add -host 192.168.2.100 dev lo:0 //配置一条路由强制返回时通过lo:0
vim /etc/sysctl.conf
添加下边的两行,其实只需要all就可以了。all包含所有接口
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
sysctl -p
测试:
访问
通过在director上ipvsadm -Ln查询流量的分发
因为权重没写,默认为1,所以采用轮回调度算法后,访问比例为1:1
解决二:
用iptables过滤arp。貌似有点困难。。。。
这个我还没认真做过,大家有想法的可以去尝试,嘿嘿。。。