说明:写此文仅为让大家知道各大网站上看到的配置文件中的一个误区!!
前面刚发表一篇关于LVS原理的博客,随后有位兄弟就问了一个特别的问题:为何需要在lo:0上配置路由,我没配置lvs也正常啊?刚开始我给他分析了一下:
client请求包是:Src_ip=cip, Dst_ip=vip
RS响应包是:Src_ip=vip, Dst_ip=cip
这上面是client收到RS响应必须的要求,所以会带来个问题:我在此之前的观点是:linux中报文从哪个网口出去,它的源IP就是那个网口的IP,所以默认情况下是不行的;只有当在内核中就指定路由先从lo:0出去再经过eth0才符合要求的;然后我就想,既然这位兄弟没配置路由,是不是linux系统能自动识别或者其它机制实现RS响应包的源IP就是VIP,目标IP就是CIP呢?带着这个问题,我简单地搭建了一个LVS-DR环境:
具体配置:DR上的配置:
# ifconfig eth0:1 192.168.100.100 up
# echo 1 >/proc/sys/net/ipv4/ip_forward
# ipvsadm -A -t 192.168.100.100:80 -s rr
# pvsadm -a -t 192.168.100.100:80 -r 192.168.100.102 -g
# ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.103 -g
(2)RS上的配置:
# echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
# echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce
# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
# ifconfig lo:0 192.168.100.100 netmask 255.255.255.255 broadcast 192.168.100.100 up
(3)测试
在IE上输入http://192.168.100.100完全没问题。
总结
由于之前学习LVS时看各种各网站上的配置文件都会加入
# route add -host 192.168.100.100 dev lo:0
而且也符合此前我所认知的观点,由于只是知道此观点是错的,但错在哪呢?随后相到查看路由表,于是man 了一下route 找到-C 参数查看路由表缓存;跟据最后一条信息估计,如果还是此前那种观点,那么就应该解释为:系统会自动补充路由信息。在这里,我需要感谢这位兄弟:福州-北纬27度