HA結構圖
HA是用來解決單點故障問題
- DN: DataNode,啟動時會往所有的NameNode彙報
- NN: NameNode(主 Active(一個) 備 Standby(可以有多個))
- JournalNodes:JournalNodes就是用來存儲中繼資料的,是一個叢集,節點數量必須為奇數個。
- 如果主NameNode的中繼資料存在本地磁盤中的fsimage及edits檔案中,如果主挂掉了,那麼備用NameNode将無法從主NameNode擷取中繼資料檔案,是以中繼資料檔案不能存儲在主NameNode的本地了,而是存儲在JournalNodes中
- 所有的NameNode,不管是主還是備,讀寫中繼資料都是在JournalNodes中進行的。
- 主NameNode 挂掉後,備NameNode自動從JournalNodes中加載到中繼資料,然後進行工作。
- FailoverController: 控制NameNode切換的一個服務,還對NameNode進行心跳檢查,判斷是否挂掉,挂掉後要切換到另外一個NameNode
- ZooKeeper:主要工作是做高可用,任何一個服務的高可用都可以用ZooKeeper來做,節點數量必須為奇數個
- 用戶端不指定IP位址通路NameNode,用戶端去請求ZooKeeper,ZooKeeper知道哪個NameNode是Active的,然後ZooKeeper傳回給用戶端真正工作的NameNode
- 自動:ZooKeeper會對所有的NameNode進行心跳檢測,檢測有沒有挂掉,可通過FailoverController對NameNode進行切換
- 手動:正常情況下,如果想對某個Active NameNode進行修改配置,可手動将其閑置下來,變成Standby,将另一個Standby的NameNode變成Active
HA優點
- 主備NameNode
- 解決單點故障
- 主NameNode對外提供服務,備NameNode同步主NameNode中繼資料,以待切換
- 所有DataNode同時向兩個NameNode彙報資料塊資訊
- 兩種切換選擇
- 手動切換:通過指令實作主備之間的切換,可以用HDFS更新等場合
- 自動切換:基于ZooKeeper實作
- 基于ZooKeeper自動切換方案
- ZooKeeper FailoverController : 監控NameNode健康狀态
- 并向Zookeeper注冊NameNode
- NameNode挂掉後,ZKFC為NameNode競争鎖,獲得ZKFC鎖的NameNode變為active