1.NameNode HA概述
所謂HA(High Availablity [əˌveɪlə’bɪləti] ),即高可用(7*24小時服務不中斷)。通過主備NameNode解決,如果主NameNode發生故障,則切換到備NameNode上,進而解決NameNode單點故障的問題。
- 實作高可用最關鍵的目的是消除單點故障。HA嚴格來說應該分成各個元件的HA機制:HDFS的HA和YARN的HA。
- Hadoop1.x在HDFS叢集中NameNode存在單點故障;Hadoop2.0+可以通過NameNode HA解決單點故障的問題。
- Hadoop2.x中支援兩個NameNode做HA,一個主,一個備。Hadoop3.x中支援兩個或兩個以上的NameNode做HA,一主一備,或一主多備。
- NameNode主要在以下兩個方面影響HDFS叢集
- NameNode機器發生意外,如當機,叢集将無法使用,直到管理者修複重新開機後。
- NameNode機器需要更新,包括軟體、硬體更新,此時叢集也将無法使用
- 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
- 一個NameNode程序處于Active狀态,另1個NameNode程序處于Standby狀态。Active的NameNode負責處理用戶端的請求。
- Active的NN修改了中繼資料之後,會在JNs的半數以上的節點上記錄這個日志。Standby狀态的NameNode會監視任何對JNs上edit log的更改。一旦edits log出現更改,Standby的NN就會根據edits log更改自己記錄的中繼資料。
- 當發生故障轉移時,Standby主機會確定已經讀取了JNs上所有的更改來同步它本身記錄的中繼資料,然後手動完成由Standby狀态切換為Active狀态。
- 為了確定在發生故障轉移操作時擁有相同的資料塊位置資訊,DNs向所有NN發送資料塊位置資訊和心跳資料。
- JNS隻允許一台NameNode向JNs寫edits log資料,這樣就能保證不會發生“腦裂”。
- 手動切換:通過指令實作主備之間的切換,可以用HDFS更新等場合
3.自動NameNode HA概述
- 主NameNode對外提供服務,備NameNode同步主NameNode中繼資料,以待切換
- 所有DataNode同時向兩個NameNode彙報資料塊資訊(位置)
- JNN:叢集(屬性)同步edits log
- standby:備,完成了fsimage+edits.log檔案的合并産生新的fsimage,推送回ANN
- 自動切換:基于Zookeeper自動切換方案
- ZooKeeper Failover Controller:監控NameNode健康狀态,并向Zookeeper注冊NameNode。NameNode挂掉後,ZKFC為NameNode競争鎖,獲得ZKFC 鎖的NameNode變為active