1. 程式人生 > >利用QJM和zookeeper實現HDFS高可用

利用QJM和zookeeper實現HDFS高可用

為防止單點故障,在hadoop2.X中通常由兩個NameNode組成,一個處於active狀態(皇帝),另一個處於standby狀態(太子)。Active NameNode負責和客戶端的交流,而Standby NameNode則不對外提供服務,僅同步active namenode的狀態,以便能夠在它失敗時快速進行切換。

那麼ActiveNameNode掛了怎麼辦?

這兩臺NameNode是以第三方的檔案系統QJM為中介實現通訊,Active NameNode做了什麼會記錄在edits檔案中,映象檔案fsimage會進行備份,如果這兩個檔案儲存在Active NameNode裡,那麼這臺機器掛了之後,Standby NameNode即使接手也會導致資料丟失,所以edits檔案被複制

儲存在第三方的檔案系統中(不需要Secondary NameNode來合併檔案了),而Standby NameNode定時與QJM通訊,同步edits與fsimage檔案。這樣即使ActiveNameNode掛了,Standby NameNode也會完美接手他的工作。

QJM中journalnode掛了怎麼辦?

journalnode負責Active NameNode  edits檔案和fsimage檔案的儲存,並把檔案定時傳送給Standby NameNode,若掛掉會導致癱瘓,所以我們多用幾臺journalnode以構成叢集,並用zookeeper負責協調

如果ActiveNameNode假死怎麼辦?

ActiveNameNode和Standy NameNode身邊都有一個zkfc(太監),皇帝身邊的太監負責在zookeeper中註冊監聽器。如果皇帝死掉(假死),太子身邊的太監將資訊傳遞給太子,太子隨即將standby狀態切換為active(登基),但是皇帝是假死,所以出現了兩個皇帝,這時客戶端不知道該和誰交流,就會導致brain split(腦裂)。

腦裂怎麼辦?

新皇帝身邊的太監首先會向老皇帝行凶(傳送命令:ssh kill-9 namenode),如果沒有成功,則會通知呼叫使用者自定義指令碼kill.sh,指令碼執行後會返回一個狀態碼,0表示成功。