說明:寫此文僅爲讓大家知道各大網站上看到的配置文件中的一個誤區!!
前面剛發表一篇關於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環境:
具體配置:
1)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度