hadoop的高可用機制和聯邦機制

1. hadoop的高可用機制

高可用機制主要是解決NameNode單點故障問題

在Hadoop 中,NameNode 所處的位置是非常重要的,整個HDFS文件系統的元數據信息都由NameNode 來管理,NameNode的可用性直接決定了Hadoop 的可用性,一旦NameNode進程不能工作了,就會影響整個集羣的正常使用。所以在實際應用中一般會使用高可用集羣(HA),在hadoop集羣中配置兩個NameNode。

在典型的HA集羣中,兩臺獨立的機器被配置爲NameNode。在工作集羣中,NameNode機器中的一個處於Active狀態,另一個處於Standby狀態。Active NameNode負責羣集中的所有客戶端操作,而Standby充當從服務器。Standby機器保持足夠的狀態以提供快速故障切換(如果需要)。

在這裏插入圖片描述

ZKFC組件:

  • ZKFailoverController

    是基於Zookeeper的故障轉移控制器,它負責控制NameNode的主備切換,ZKFailoverController會監測NameNode的健康狀態當發現Active NameNode出現異常時會通過Zookeeper進行一次新的選舉,完成Active和Standby狀態的切換

  • HealthMonitor

    週期性調用NameNode的HAServiceProtocol RPC接口(monitorHealth 和 getServiceStatus),監控NameNode的健康狀態並向ZKFailoverController反饋

  • ActiveStandbyElector

    接收ZKFC的選舉請求,通過Zookeeper自動完成主備選舉,選舉完成後回調ZKFailoverController的主備切換方法對NameNode進行Active和Standby狀態的切換.

DataNode

NameNode包含了HDFS的元數據信息數據塊信息(blockmap),其中數據塊信息通過DataNode主動向Active NameNode和Standby NameNode上報

共享存儲系統

共享存儲系統負責存儲HDFS的元數據(EditsLog),Active NameNode(寫入)和 Standby NameNode(讀取)通過共享存儲系統實現元數據同步,在主備切換過程中,新的Active NameNode必須確保元數據同步完成才能對外提供服務
在這裏插入圖片描述

高可用的具體操作如上圖所示。

  • 通過共享存儲系統來保證兩個NameNode之間的數據同步
  • 通過ZKFC和Zookeeper來實現NameNode狀態的切換
    1. HealthMonitor監控工作NameNode的狀態,當發現NameNode宕機馬上彙報給ZKFalloverController
    2. ZKFalloverController向ActiveStandbyElector彙報NameNode已經宕機
    3. ActiveStandbyElector告訴Zookeeper重新選舉新的NameNode
    4. Zookeeper選舉完成後回覆ActiveStandbyElector新的選舉結果
    5. ActiveStandbyElector報告ZKFalloverController新的選舉結果
    6. ZKFalloverController改變原來NameNode的狀態
    7. ZKFalloverController讓新選舉的NameNode狀態變爲Active

還需要注意的一點是,SecondaryNameNode不是高可用中的備份NameNode

二者主要區別可以用下面兩個圖來顯示

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

具體區別可以參考這篇博客https://blog.csdn.net/andyguan01_2/article/details/88696239

2. hadoop的聯邦機制

聯邦機制主要是解決NameNode的橫向擴展問題

單NameNode的架構使得HDFS在集羣擴展性和性能上都有潛在的問題,當集羣大到一定程度後,NameNode進程使用的內存可能會達到上百G,NameNode成爲了性能的瓶頸。因而提出了namenode水平擴展方案– Federation,即聯邦機制。

NameNode的運行存在多個NameNode,多個NameNode的情況意味着有多個namespace(命名空間),區別於HA模式下的多NameNode,它們是擁有着同一個namespace。不同的namespace之間是隔離的不同namespace會有其對應的編號,並在對應的DataNode中創建對應的目錄,也就是說DataNode下不同目錄下的數據由不同namespace管理。

在這裏插入圖片描述

概括起來:

多個NN共用一個集羣裏的存儲資源,每個NN都可以單獨對外提供服務。

每個NN都會定義一個存儲池,有單獨的id,每個DN都爲所有存儲池提供存儲。

DN會按照存儲池id向其對應的NN彙報塊信息,同時,DN會向所有NN彙報本地存儲可用資源情況。

HDFS Federation不足

HDFS Federation並沒有完全解決單點故障問題。雖然namenode/namespace存在多個,但是從單個namenode/namespace看,仍然存在單點故障:如果某個namenode掛掉了,其管理的相應的文件便不可以訪問。Federation中每個namenode仍然像之前HDFS上實現一樣,配有一個secondary namenode,以便主namenode掛掉一下,用於還原元數據信息。

所以一般集羣規模真的很大的時候,會採用HA+Federation的部署方案。也就是每個聯合的namenodes都是ha的。

發佈了87 篇原創文章 · 獲贊 32 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章