Hadoop學習(三):Zookeeper實現Hadoop集羣高可用

Hadoop集羣高可用

Hadoop 高可用 (High Availability) 分爲 HDFS 高可用和 YARN 高可用,兩者的實現基本類似,但 HDFS NameNode 對數據存儲及其一致性的要求比 YARN ResourceManger 高得多。對於HDFS來說,高可用其實就是針對NameNode的高可用。因爲NameNode保存着集羣的元數據信息,一旦丟失整個集羣將不復存在。

在這裏插入圖片描述
我們來看上面的HDFS高可用框架:

  • Active NameNode 和 Standby NameNode:
    兩臺 NameNode 形成互備,一臺處於 Active 狀態,爲主 NameNode,另外一臺處於 Standby 狀態,爲備 NameNode,只有主 NameNode 才能對外提供讀寫服務。
  • 主備切換控制器 ZKFailoverController:
    ZKFailoverController 作爲獨立的進程運行,對 NameNode 的主備切換進行總體控制。ZKFailoverController 能及時檢測到 NameNode 的健康狀況,在主 NameNode 故障時藉助 Zookeeper 實現自動的主備選舉和切換,當然 NameNode 目前也支持不依賴於 Zookeeper 的手動主備切換。
  • Zookeeper 集羣:
    爲主備切換控制器提供主備選舉支持。
  • 共享存儲系統:
    共享存儲系統是實現 NameNode 的高可用最爲關鍵的部分,共享存儲系統保存了 NameNode 在運行過程中所產生的 HDFS 的元數據。主 NameNode 和 NameNode 通過共享存儲系統實現元數據同步。在進行主備切換的時候,新的主 NameNode 在確認元數據完全同步之後才能繼續對外提供服務。
  • DataNode 節點:
    除了通過共享存儲系統共享 HDFS 的元數據信息之外,主 NameNode 和備 NameNode 還需要共享 HDFS 的數據塊和 DataNode 之間的映射關係。DataNode 會同時向主 NameNode 和備 NameNode 上報數據塊的位置信息。

個人理解:
ZKFC -> Zookeeper Failover Controller 是Zookeeper用來維護HDFS HA的實例,監控NameNode健康狀況,當主NameNode死亡,通過Zookeeper的選舉自動完成主備切換
Zookeeper Failover Controller -> healthy message / exchange active-standby
JN -> 作爲共享存儲系統,用來共享主備節點的editLog,即向備NameNode共享主NameNode的meta data
Journal Node -> as a cluster to synchronized EditLog
在這裏插入圖片描述

基於 QJM 的共享存儲系統的數據同步機制分析

目前 Hadoop 支持使用 Quorum Journal Manager (QJM) 或 Network File System (NFS) 作爲共享的存儲系統,這裏以 QJM 集羣爲例進行說明:Active NameNode 首先把 EditLog 提交到 JournalNode 集羣,然後 Standby NameNode 再從 JournalNode 集羣定時同步 EditLog,當 Active NameNode 宕機後, Standby NameNode 在確認元數據完全同步之後就可以對外提供服務。

需要說明的是向 JournalNode 集羣寫入 EditLog 是遵循 “過半寫入則成功” 的策略,所以你至少要有 3 個 JournalNode 節點,當然你也可以繼續增加節點數量,但是應該保證節點總數是奇數。同時如果有 2N+1 臺 JournalNode,那麼根據過半寫的原則,最多可以容忍有 N 臺 JournalNode 節點掛掉。

在這裏插入圖片描述

NameNode 主備切換

在這裏插入圖片描述
1.HealthMonitor 初始化完成之後會啓動內部的線程來定時調用對應 NameNode 的 HAServiceProtocol RPC 接口的方法,對 NameNode 的健康狀態進行檢測。 2. HealthMonitor 如果檢測到 NameNode 的健康狀態發生變化,會回調 ZKFailoverController 註冊的相應方法進行處理。 3. 如果 ZKFailoverController 判斷需要進行主備切換,會首先使用 ActiveStandbyElector 來進行自動的主備選舉。 4. ActiveStandbyElector 與 Zookeeper 進行交互完成自動的主備選舉。 5. ActiveStandbyElector 在主備選舉完成後,會回調 ZKFailoverController 的相應方法來通知當前的 NameNode 成爲主 NameNode 或備 NameNode。 6. ZKFailoverController 調用對應 NameNode 的 HAServiceProtocol RPC 接口的方法將 NameNode 轉換爲 Active 狀態或 Standby 狀態。

YARN高可用

YARN ResourceManager 的高可用與 HDFS NameNode 的高可用類似,但是 ResourceManager 不像 NameNode ,沒有那麼多的元數據信息需要維護,所以它的狀態信息可以直接寫到 Zookeeper 上,並依賴 Zookeeper 來進行主備選舉。
在這裏插入圖片描述
YARN HA

Zookeeper -> synchronized Resource Manager meta data

基於ZooKeeper搭建Hadoop高可用集羣

https://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-name-node/index.html#icomments

https://www.edureka.co/blog/how-to-set-up-hadoop-cluster-with-hdfs-high-availability/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章