1. 程式人生 > 程式設計 >帶你瞭解HDFS的Namenode 高可用機制

帶你瞭解HDFS的Namenode 高可用機制

目錄
  • HDFS NameNode 高可用
  • Hadoop Namenode 高可用架構
  • Namenode 高可用的實現
    • 隔離(Fencing)
    • QJM共享儲存

HDFS NameNode 高可用

在 Hadoop 2.0.0 之前,一個叢集只有一個Namenode,這將面臨單點故障問題。如果 Namenode 機器掛掉了,整個叢集就用不了了。只有重啟 Namenode ,才能恢復叢集。另外正常計劃維護叢集的時候,還必須先停用整個叢集,這樣沒辦法達到 7 * 24小時可用狀態。Hadoop 2.0 及之後版本增加了 Namenode 高可用機制,下面詳細介紹。

Hadoop Namenode 高可用架構

帶你瞭解HDFS的Namenode 高可用機制

Hadoop 2.0 克服了 Namenode 單點故障問題,即在一個叢集中有2個 Namenode 節點,一個是活動的Namenode節點(Active Namenode),即主節點,一個是備用 Namenode(Passive Namenode),即備用節點,而且支援熱備份和故障切換。

活動 Namenode:負責處理叢集中所有客戶端請求。
備用 Namenode:備用節點,擁有和活動的 Namenode 一樣的元資料。在活動 Namenode 失效後,會接管它的工作。

活動 Namenode 和備用 Namenode 之間是如何同步資料的呢?即他們是怎麼保持一致性的,主要有下面幾點:

  • 活動和備用 Namenode 兩者總是同步的,例如,他們儲存著一樣的元資料,這可以把叢集恢復到系統奔潰時的狀態。而且基於此還能實現自動故障切換。
  • 同一時間,叢集只能有一個活動的 Namenode 節點,否則,兩個 Namenode 會導致資料發生錯亂並且無法恢復。我們把這種情況稱為“腦裂”現象,即一個叢集被分成兩個小叢集,並且兩邊都認為自己是唯一活動的叢集。Zookeeper 社群對這種問題的解決方法叫做 fencing,中文翻譯為隔離,也就是想辦法把舊的 活動 NameNode 隔離起來,使它不能正常對外提供服務,使叢集始終只有一個活動的 Namenode。

瞭解完 Hadoop 高可用架構之後,讓我們來看一下 Hadoop Namenode 高可用是怎麼實現的。

Namenode 高可用的實現

這裡主要介紹通過隔離(fencing)和Quorum Journal Manager(QJM)共享儲存實現的 HDFS 高可用。

隔離(Fencing)

隔離(Fencing)是為了防止腦裂,就是保證在任何時候HDFS只有一個Active NN,主要包括三個方面:

  • 共享儲存fencing:確保只有一個NN可以寫入edits。QJM中每一個JournalNode中均有一個epochnumber,匹配epochnumber的QJM才有許可權更新 JN。當 Namenode 由 standby 狀態切換成 active 狀態時,會重新生成一個 epochnumber,並更新 JN 中的 epochnumber,以至於以前的 Active Namenode 中的QJM 中的 epoch number 和 JN 的 epochnumber 不匹配,故而原 Active Namenode上的 QJM 沒法往 JN 中寫入資料(後面會介紹原始碼),即形成了 fencing。
  • 客戶端f encing:確保只有一個 Namenode 可以響應客戶端的請求。
  • DataNode fencing:確保只有一個 Namenode 可以向 Datanode 下發命令,譬如刪除塊,複製塊,等等。

QJM 的 Fencing 方案只能讓原來的 Active Namenode 失去對 JN 的寫許可權,但是原來的 Active Namenode 還是可以響應客戶端的請求,對 Datanode 進行讀。對客戶端和 DataNode 的 fence 是通過配置 dfs.ha.fencing.methods 實現的。

Hadoop 公共庫中有兩種Fencing實現:sshfence、shell

  • sshfence:ssh到原Active NN上,使用fuser結束程序(通過tcp埠號定位程序 pid,該方法比 jps 命令更準確)。
  • shell:即執行一個使用者事先定義的shell命令()完成隔離。

QJM共享儲存www.cppcns.com

Qurom Journal Manager(QJM)是一個基http://www.cppcns.com於 Paxos 演算法實現的 HDFS 元資料共享儲存的方案。QJM 的基本原理就是用 2N+1 臺 JournalNode 儲存 EditLog,每次寫資料操作有大多數(>=N+1)返回成功時即認為該次寫成功,資料不會丟失。這個演算法所能容忍的是最多有 N 臺機器掛掉,如果多於 N 臺掛掉,這個演算法就失效了。這個原理是基於 Paxos 演算法的。

用QJM的方式來實現HA的主要好處有:

  • 不需要配置額外的高共享儲存,這樣對於基於商用硬體的雲端計算資料中心來說,降低了複雜度和維護成本;
  • 不在需要單獨配置 fencing 實現,因為 QJM 本身內建了 fencing 的功能;
  • 不存在單點故障問題;
  • 系統魯棒性的程度是可配置的( QJM 基於 Paxos 演算法,所以如果配置 2N+1 臺 JournalNode 組成的叢集,能容忍最多 N 臺機器掛掉);
  • QJM 中儲存日誌的 JournalNode 不會因為其中一臺的延遲而影響整體的延遲,而且也不會因為 JournalNode 的數量增多而影響效能(因為 Namenode 向 JournalNode 傳送日誌是並行的)。

以上就是帶你連線HDFS的Namenode 高可用機制的詳細內容,更多關於HDFS Namenode 高可用的資料請關注我們其它相關文章!