1. 程式人生 > >Hadoop 2.x 之 HA 簡介

Hadoop 2.x 之 HA 簡介

算法 另一個 實現 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 簡介