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狀態的切換
- HealthMonitor監控工作NameNode的狀態,當發現NameNode宕機馬上彙報給ZKFalloverController
- ZKFalloverController向ActiveStandbyElector彙報NameNode已經宕機
- ActiveStandbyElector告訴Zookeeper重新選舉新的NameNode
- Zookeeper選舉完成後回覆ActiveStandbyElector新的選舉結果
- ActiveStandbyElector報告ZKFalloverController新的選舉結果
- ZKFalloverController改變原來NameNode的狀態
- 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的。