因為arp 問題導致的vip 故障與解決方案

babyyellow發表於2014-06-13
這幾天進行了關於vip 方面的檢測的 測試,

遇到了一個奇怪的問題,vip 服務正常,資料庫可以透過vip訪問,但是從庫在ping vip 的時候,卻告警ping 不通,

出現的次數也不多,每天有2,3次的樣子,檢測過程經過了容錯包裝,也不至於會導致系統誤切換。

但是還是搞清楚,心裡才踏實。 

聯合網路做了些分析: 

經過檢視當時的日誌還是發現了一些端倪的: 

從機會透過arping 去確認vip 是否存活, 然後我們就在這裡發現了問題了。 


這套裝置是啟動了雙網路卡的,一個工作網路,一個是心跳網路

最後發現 在ping 之前發出的那個arp 相應包,是不是工作網路卡的mac 地址

而是心跳 網路卡的mac 地址

然後ping 完後,就變工作網路卡的mac 地址了。 



在網路同事的幫助下,分析了原因: 


預設情況,linux 的arp 響應是出在混雜模式的, 
主機預設是開啟arp 混雜模式的,
就說這臺機器上如果有多個網路卡啟動,那麼在混雜模式下,我這個網路卡收到arp 詢問的時候,如果如果這臺機器上配置了對應的ip 但不是配置我當前的網路卡上,那麼這個網路卡還是可能會響應arp 詢問包,把自己的arp 回給對方。

這個情況下,就導致對方詢問的arp 不是目標ip 所在的網路卡。 

從日誌裡也得到了證實, 我們從庫會透過arp 廣播來確定確定vip 是否在執行,這個時候某些情況下,我們接受的arp 回應是主庫的另外一個網路卡的arp 不是vip 所在網路卡的arp ,在接下來的ping 的檢測,因為在不同的網段,arp 表中標記的arp 跟vip 不在同一個子網裡,導致ping 不通。


這樣就解釋的通,為什麼ping 不同vip 

解決方案: 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2


這兩個引數寫到/etc/sysctl.conf 裡面 


怎麼生效,就不說了吧?

sysctl  -p 後 

是需要重啟網路卡生效的 



一般情況下都不太可能用到這種混雜模式的,所以在裝機的就處理掉最好,免得夢多。 


祝玩得愉快!!



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-1182301/,如需轉載,請註明出處,否則將追究法律責任。

相關文章