故障現象:bash
主機名 | director-A | director-B |
IP | 192.168.14.128 | 192.168.14.131 |
默認主備 | MASTER | BACKUP |
優先級 | 90 | 80 |
VIP爲 192.168.14.201ssh
先啓動主節點keepalived服務,後啓動備節點keepalived,發現主備節點都配置了vip。tcp
分析與解決過程:
理應主節點啓動keepalived後發送vrrp廣播報文,備節點啓動keepalived後由於配置同一個廣播域,能收到vrrp廣播報文,從而運行在BACKUP狀態,一直監聽着MASTER發送的vrrp廣播。ide
首先檢查BACKUP節點message日誌,發現keepalived先進入BACKUP狀態(根據keepalived.conf配置,正常行爲),但間隔4s後vrrp實例切換爲MASTER狀態,這行爲不符合正常邏輯。spa
而備vrrp實例切換爲MASTER的緣由一般是必定時間內沒有收到MASTER節點發出的vrrp廣播報文,所以在備節點物理網卡上tcpdump抓包可見,主節點192.168.14.128發出的vrrp廣播報文已經到達備節點。這種狀況下,keepalived仍認爲主節點是down,極可能是OS對物理網卡收到的vrrp廣播報文並未送進內核,keepalived進程沒法從捕獲主節點發出的vrrp報文。.net
所以要檢查Linux防火牆Selinux和iptables規則
跟蹤iptables規則發現,默認的iptables規則僅容許22端口和icmp報文經過
嘗試經過另外一個客戶端192.168.14.129訪問備節點80端口,在客戶端就能抓包icmp 通知報文。
此iptables鏈表結構爲系統默認配置,該鏈結構太過複雜,且多有iptables鏈爲空鏈。所以將多餘的iptables規則清理掉,多餘的iptables鏈刪除,容許全部報文經過便可。
此時問題已解決,keepalived只有MASTER節點配置vip,且主備節點之間切換vip正常。
不過vip切換的問題雖然解決了,但iptables的遺留問題是在配置文件/etc/sysconfig/iptables中並未配置以上覆雜的iptables規則,且重啓系統以後,也仍然會生成以上覆雜的iptables規則。修改了/etc/sysconfig/iptables-config配置也在重啓系統後被複原。定是那系統啓動腳本搞得鬼,還得繼續排查。
原文轉載至:
http://blog.51cto.com/13599730/2161622