Hadoop 2.x 之 HA 簡介
阿新 • • 發佈:2017-07-28
算法 另一個 實現 con nal 數據塊 網絡 內部使用 加載
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
主NameNode掛掉後,Standby競爭鎖,每個NameNode對應的FailoverController在Zookeeper上競爭鎖,獲得鎖之後就可以把該NameNode變成Active了
任何一個NameNode都要對應一個FailoverController
Zookeeper必須是奇數個,否則將不會得到一個鎖,Zookeeper內部使用的是一個投票機制,競爭鎖算法用的是投票機制
NFS網絡文件系統(了解)
NFS 網絡文件系統,相當於一個共享目錄,找一臺機器專門共享文件,讓所有NameNode讀寫元數據都在那臺共享機器上操作,讀寫在共享的目錄中。(也會有單點故障問題)
Hadoop 2.x 之 HA 簡介