2015-10-23 67 views
13

Hadoop的defintive指南說 -Hadoop Namenode故障轉移過程如何工作?

每個的Namenode運行一個輕量級的故障轉移控制器的過程,其 工作是監視其故障(使用簡單 心跳機制)NameNode和觸發故障切換應在namenode 失敗。

怎麼一個namenode可以運行某些東西來檢測自己的失敗?

誰給誰發心跳?

這個過程在哪裏運行?

它如何檢測namenode失敗?

它通知過渡的人?

回答

27

Apache docs

ZKFailoverController(ZKFC)是一種新的組分,它是一個動物園管理員客戶端也監視和管理名稱節點的狀態。每一個運行在的NameNode的機器還運行ZKFC,那ZKFC負責:

健康監測 - 有定期的ZKFC坪當地的NameNode健康檢查命令。只要NameNode以及時響應且健康狀態,認爲節點健康。如果節點崩潰,凍結或以其他方式進入不健康狀態,則健康監視器會將其標記爲不健康。

ZooKeeper的會話管理 - 當本地NameNode的是健康的,在ZKFC持有ZooKeeper的開放的會話。如果本地NameNode處於活動狀態,則它還包含一個特殊的「」znode。此鎖使用ZooKeeper對「短暫」節點的支持;如果會話過期,鎖定節點將被自動刪除。

基於ZooKeeper的選 - 如果本地NameNode的是健康的,而ZKFC認爲沒有其他節點當前持有鎖Z序節點,它會自己嘗試獲取鎖。如果成功,則它有「贏得選舉」,並負責運行故障轉移以使其本地NameNode處於活動狀態。

看一看這個Apache PDF是從

http://www.slideshare.net/cloudera/hdfs-update-lipcon-federal-big-data-apache-hadoop-forum

enter image description hereHDFS-2185 JIRA問題

幻燈片16部分:

自動的Namenode故障轉移過程Hadoop:

在典型的HA羣集中,兩臺獨立的機器配置爲NameNode。在任何時候,只有一個NameNodes處於Active狀態,另一個處於Standby狀態。活動NameNode負責羣集中的所有客戶端操作,而Standby僅充當從服務器,並保持足夠的狀態以在必要時提供快速故障轉移。

爲了使待機的Namenode,以保持其與Active的Namenode同步狀態,兩個節點與一組獨立的守護進程稱爲JournalNodes(JNS)進行通信。

當活動節點執行任何名稱空間修改時,它會將修改記錄持久記錄到大多數這些JN中。備用節點從JN讀取這些編輯並應用於其自己的名稱空間。

如果發生故障切換,備用服務器將確保在將自己提升爲活動狀態之前,它已從JounalNodes中讀取所有編輯。這確保了在故障轉移發生之前命名空間狀態已完全同步。

對於HA羣集而言,一次只有一個名稱節點處於活動狀態是至關重要的。 ZooKeeper已用於避免裂腦情況,以便名稱節點狀態不會因故障轉移而發散。

幻燈片8從:http://www.slideshare.net/cloudera/hdfs-futures-world2012-widescreen

enter image description here

總結:名稱節點是守護進程&故障切換控制器是守護進程。如果名稱節點守護進程失敗,故障轉移控制器守護進程將檢測並採取糾正措施。即使整個機器崩潰,ZooKeeper服務器檢測到它,鎖定將過期,其他備用名稱節點將被選爲活動名稱節點。

+0

Awsome!謝謝。我認爲書本文本不合適,它想convay每個namenode **(機器)**運行一個輕量級故障轉移控制器進程,其工作是監視其名稱節點**(守護進程)**失敗 – K246

+0

我建議編輯您的問題更加通用,如:Hadoop Name節點故障轉移過程如何工作? –