天天看點

HDFS NameNode HA(高可用)

1.NameNode HA概述

所謂HA(High Availablity [əˌveɪlə’bɪləti] ),即高可用(7*24小時服務不中斷)。通過主備NameNode解決,如果主NameNode發生故障,則切換到備NameNode上,進而解決NameNode單點故障的問題。

  1. 實作高可用最關鍵的目的是消除單點故障。HA嚴格來說應該分成各個元件的HA機制:HDFS的HA和YARN的HA。
  2. Hadoop1.x在HDFS叢集中NameNode存在單點故障;Hadoop2.0+可以通過NameNode HA解決單點故障的問題。
  3. Hadoop2.x中支援兩個NameNode做HA,一個主,一個備。Hadoop3.x中支援兩個或兩個以上的NameNode做HA,一主一備,或一主多備。
  4. NameNode主要在以下兩個方面影響HDFS叢集
  1. NameNode機器發生意外,如當機,叢集将無法使用,直到管理者修複重新開機後。
  2. NameNode機器需要更新,包括軟體、硬體更新,此時叢集也将無法使用
  1. HDFS HA功能通過配置Active/Standby兩個NameNodes實作在叢集中對NameNode的熱備來解決上述問題。如果出現故障,如機器崩潰或機器需要更新維護,這時可通過此種方式将NameNode很快的切換到另外一台機器。

2.手動NameNode HA概述

dfs.namenode.checkpoint.period   1小時
dfs.namenode.checkpoint.txns    100 0000事務
dfs.namenode.checkpoint.check.period  3s      
  1. 一個NameNode程序處于Active狀态,另1個NameNode程序處于Standby狀态。Active的NameNode負責處理用戶端的請求。
  2. Active的NN修改了中繼資料之後,會在JNs的半數以上的節點上記錄這個日志。Standby狀态的NameNode會監視任何對JNs上edit log的更改。一旦edits log出現更改,Standby的NN就會根據edits log更改自己記錄的中繼資料。
  3. 當發生故障轉移時,Standby主機會確定已經讀取了JNs上所有的更改來同步它本身記錄的中繼資料,然後手動完成由Standby狀态切換為Active狀态。
  4. 為了確定在發生故障轉移操作時擁有相同的資料塊位置資訊,DNs向所有NN發送資料塊位置資訊和心跳資料。
  5. JNS隻允許一台NameNode向JNs寫edits log資料,這樣就能保證不會發生“腦裂”。
  6. 手動切換:通過指令實作主備之間的切換,可以用HDFS更新等場合

3.自動NameNode HA概述

  1. 主NameNode對外提供服務,備NameNode同步主NameNode中繼資料,以待切換
  2. 所有DataNode同時向兩個NameNode彙報資料塊資訊(位置)
  3. JNN:叢集(屬性)同步edits log
  4. standby:備,完成了fsimage+edits.log檔案的合并産生新的fsimage,推送回ANN
  5. 自動切換:基于Zookeeper自動切換方案
  6. ZooKeeper Failover Controller:監控NameNode健康狀态,并向Zookeeper注冊NameNode。NameNode挂掉後,ZKFC為NameNode競争鎖,獲得ZKFC 鎖的NameNode變為active

繼續閱讀