ZooKeeper集群相關(guān)問題處理大全






假死:由于心跳超時(網(wǎng)絡(luò)原因?qū)е碌模┱J為Leader死了,但其實Leader還存活著。
腦裂:由于假死會發(fā)起新的Leader選舉,選舉出一個新的Leader,但舊的Leader網(wǎng)絡(luò)又通了,導(dǎo)致出現(xiàn)了兩個Leader ,有的客戶端連接到老的Leader,而有的客戶端則連接到新的Leader。
Quorums(法定人數(shù))方式:比如3個節(jié)點的集群,Quorums = 2,也就是說集群可以容忍1個節(jié)點失效,這時候還能選舉出1個lead,集群還可用。比如4個節(jié)點的集群,它的Quorums = 3,Quorums要超過3,相當(dāng)于集群的容忍度還是1,如果2個節(jié)點失效,那么整個集群還是無效的。這是ZooKeeper防止“腦裂”默認采用的方法。
采用Redundant communications(冗余通信)方式:集群中采用多種通信方式,防止一種通信方式失效導(dǎo)致集群中的節(jié)點無法通信。
Fencing(共享資源)方式:比如能看到共享資源就表示在集群中,能夠獲得共享資源的鎖的就是Leader,看不到共享資源的,就不在集群中。
仲裁機制方式。
啟動磁盤鎖定方式。
集群中最少的節(jié)點數(shù)用來選舉Leader保證集群可用。
通知客戶端數(shù)據(jù)已經(jīng)安全保存前集群中最少數(shù)量的節(jié)點數(shù)已經(jīng)保存了該數(shù)據(jù)。一旦這些節(jié)點保存了該數(shù)據(jù),客戶端將被通知已經(jīng)安全保存了,可以繼續(xù)其他任務(wù)。而集群中剩余的節(jié)點將會最終也保存了該數(shù)據(jù)。
添加冗余的心跳線,例如雙線條線,盡量減少“裂腦”發(fā)生機會。
啟用磁盤鎖。正在服務(wù)一方鎖住共享磁盤,“裂腦”發(fā)生時,讓對方完全“搶不走”共享磁盤資源。但使用鎖磁盤也會有一個不小的問題,如果占用共享盤的一方不主動“解鎖”,另一方就永遠得不到共享磁盤。現(xiàn)實中假如服務(wù)節(jié)點突然死機或崩潰,就不可能執(zhí)行解鎖命令。后備節(jié)點也就接管不了共享資源和應(yīng)用服務(wù)。于是有人在HA中設(shè)計了“智能”鎖。即正在服務(wù)的一方只在發(fā)現(xiàn)心跳線全部斷開(察覺不到對端)時才啟用磁盤鎖。平時就不上鎖了。
設(shè)置仲裁機制。例如設(shè)置參考IP(如網(wǎng)關(guān)IP),當(dāng)心跳線完全斷開時,2個節(jié)點都各自ping一下 參考IP,不通則表明斷點就出在本端,不僅"心跳"、還兼對外"服務(wù)"的本端網(wǎng)絡(luò)鏈路斷了,即使啟動(或繼續(xù))應(yīng)用服務(wù)也沒有用了,那就主動放棄競爭,讓能夠ping通參考IP的一端去起服務(wù)。更保險一些,ping不通參考IP的一方干脆就自我重啟,以徹底釋放有可能還占用著的那些共享資源。
end
推薦閱讀:
如有收獲,點個在看,誠摯感謝
