在分布式系統(tǒng)中腦裂又稱為雙主現(xiàn)象拿愧,由于 Zookeeper 的“假死”可能會導(dǎo)致出現(xiàn)兩個 NameNode 同時為 Active 狀態(tài),此時兩個 NameNode 都可以對外提供服務(wù)康铭,無法保證數(shù)據(jù)一致性棒卷。ActiveStandbyElector 通過Fencing 機制防止腦裂現(xiàn)象。
當(dāng)某個 NameNode 競選成功碧绞,成功創(chuàng)建 ActiveStandbyElectorLock 臨時節(jié)點后會創(chuàng)建另一個名為 ActiveBreadCrumb 的持久節(jié)點府框,該節(jié)點保存了 NameNode 的地址信息,正常情況下刪除 ActiveStandbyElectorLock 節(jié)點時會主動刪除 ActiveBreadCrumb讥邻,但如果由于異常情況導(dǎo)致 Zookeeper Session關(guān)閉迫靖,此時臨時節(jié)點 ActiveStandbyElectorLock 會被刪除,但持久節(jié)點 ActiveBreadCrumb 并不會刪除兴使,當(dāng)有新的 NameNode 競選成功后它會發(fā)現(xiàn)已經(jīng)存在一個舊的 NameNode 遺留下來的 ActiveBreadCrumb 節(jié)點系宜,此時會通知 ZKFC 對舊的 ANN 進行 fencing,只有在成功完成 fencing 后发魄,選主成功的 NameNode 才能轉(zhuǎn)為 Active 狀態(tài)盹牧,開始對外提供服務(wù)