HDFS High Availability Using the Quorum Journal Manager

不要亂摸發表於2017-12-26

http://hadoop.apache.org/docs/r2.9.0/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

背景

在Hadoop 2.0.0以前,在一個HDFS叢集中NameNode存在單點故障。每個叢集中只有一個NameNode,如果這個機器不可用的話,那麼整個叢集將不可用,直到這個機器被重啟或者其它的機器來替代它。這就意味著:

  • 萬一NameNode機器當機了,那麼整個叢集不可用
  • NameNode機器上的軟體或者硬體升級的時候,叢集不得不停止執行

HDFS HA在每個叢集中執行兩個NameNode,一個是Active的,一個Passive的,作為熱備。

架構

在典型的HA叢集中,兩個分開的機器均被配置為NameNode。在任意時刻,只有一個NameNode處於活動狀態,另一個處於備用狀態。處於活動狀態的NameNode負責處理叢集中所有客戶端操作,此時處於備用狀態的NameNode只是扮演者slave的角色。這個備用的NameNode維護足夠的狀態,以防快速容災。

備用NameNode為了保持和活動NameNode的狀態同步,這兩個節點用一組單獨的後臺程式進行通訊,這個守護程式被叫做“JournalNodes”(簡稱JNs)。當處於活動狀態的NameNode做了任何修改以後,它將修改的日誌傳給大部分JNs。備用的NameNode從JNs中讀取這種修改,並且會把這種改變寫到EditLog中。因為備用NameNode看到這些編輯,所有它將這種改變應用到自己的namespace中。

要想保住HA叢集正確的操作,至關重要的一點是,同一時間叢集中只能有一個NameNode處於活動狀態。為了保證這一點,JournalNodes只允許同一時間只有一個NameNode可以寫。

硬體資源

為了部署一個HA叢集,你需要準備下列資源:

  • NameNode machines:執行活動的和備用的NameNode的機器的硬體配置應該是相等的
  • JournalNode machines:必須至少3個JournalNode,因為Edit Log必須被寫到大多數JNs上。也就是說,可以容忍單個機器失敗。你也可以執行3個以上的JournalNode,但是為了能夠增加系統承受失敗的數量,你應該執行奇數個JNs(比如:3,5,7等等)。當執行的JournalNode數量是N的時候,系統最多可以容忍(N - 1)/ 2個失敗,並且正常服務。

 

其它參考

http://blog.csdn.net/strongerbit/article/details/7013221/

 

相關文章