HDFS的高可用(HA)圖文並茂

1:架構

在這裏插入圖片描述

上圖是一張Hadoop高可靠性的工作原理圖,其中NN代表的是NameNode,DN代表的是DataNode,ZK代表的是Zookeeper,我們發現這個集羣當中有兩個NameNode,一個處於Active狀態,另一個處於Standby狀態,NameNode是受Zookeeper控制的,但是又不是直接受Zookeeper控制,有一箇中間件FailoverController(也就是ZKFC進程),每一個NameNode所在的機器都有一個ZKFC進程,ZKFC可以給NameNode發送一些指令,比如切換指令。同時ZKFC還負責監控NameNode,一旦它發現NameNode宕機了,它就會報告給Zookeeper,另一臺NameNode上的ZKFC可以得到那一臺NameNode宕機的信息,因爲Zookeeper數據是同步的,因此它可以從ZK中得到這條信息,它得到這條信息之後,會向它控制的NameNode發送一條指令,讓它由Standby狀態切換爲Active狀態。具體原理是什麼呢,剛開始的時候兩個NameNode都正常工作,處於激活狀態的NameNode會實時的把edits文件寫入到存放edits的一個介質當中,Standby狀態的NameNode會實時的把介質當中的edits文件同步到它自己所在的機器。因此Active裏面的信息與Standby裏面的信息是實時同步的。FailoverController實時監控NameNode,不斷把NameNode的情況彙報給Zookeeper,一旦Active狀態的NameNode發生宕機,FailoverController就跟NameNode聯繫不上了,聯繫不上之後,FailoverController就會把Active宕機的信息彙報給Zookeeper,另一個FailoverController便從ZK中得到了這條信息,然後它給監控的NameNode發送切換指令,讓它由Standby狀態切換爲Active狀態。存放edits文件的方式可以使用NFS—網絡文件系統,另一種是JournalNode,DataNode連向的是NameService,DataNode既可以跟Active的NameNode通信又可以跟Standby的NameNode通信,一旦Active宕機,DataNode會自動向新的Active進行通信。

2: 問題(JN的引出)

  1. 客戶端如果同步寫入主NN,備NN(寫入主後繼續寫入備,直至寫完纔算寫入成功),就會導致效率很慢!
  2. 客戶端如果異步寫入主NN,備NN(寫入主後就返回寫入成功,備NN進行後臺同步主NN),就會存在備NN同步主NN時主NN掛了,導致備NN數據不全

解決辦法(JournalNode)

  • CAP原則(一致性、可用性、分區容忍性三者之間的衝突)
    在這裏插入圖片描述
  • Paxos算法
    • 一種基於消息傳遞的一致性算法(被公認爲類似算法中最有效的)
    • 類似一種帶存儲能力的消息隊列
    • JournalNode(JN)就是一種實現
      • 明確分佈式節點
      • 明確節點權重
      • 強一致性破壞可用性
      • 過半通過可以中和一致性和可用性
      • 最簡單的自我協調實現:主從
      • 主的選舉:明確節點數量和權重即可
      • 主從的職能
        • 主:增刪改查
        • 從:查詢,增刪改傳遞給主
        • 主與從:過半數就要同步數據

3:主備NN

  • Active NN 和 Standby NN:兩臺 NN形成互備,一臺處於 Active 狀態,爲主 NN,另外一臺處於 Standby 狀態,爲備 NN,只有主 NN才能對外提供讀寫服務。
  • 在HA模式中沒有SecondaryNameNode(SNN),StandBy角色會滾動EditLog日誌落向FSImage中,SNN只在非HA模式中

4:ZKFC

  • 主備切換控制器 ZKFailoverController:ZKFC作爲獨立的進程運行(運行在NN所在主機上),對 NN的主備切換進行總體控制。
    • 健康檢測:zkfc會週期性的向它監控的namenode(只有namenode纔有zkfc進程,並且每個namenode各一個)發生健康探測命令,從而鑑定某個namenode是否處於正常工作狀態,如果機器宕機,心跳失敗,那麼zkfc就會標記它處於不健康的狀態;
    • 會話管理:如果namenode是健康的,zkfc機會保持在zookeeper中保持一個打開的會話,如果namenode是active狀態的,那麼zkfc還會在zookeeper中佔有一個類型爲短暫類型的znode,當這個namenode掛掉時,這個znode將會被刪除,然後備用的namenode得到這把鎖,升級爲主的namenode,同時標記狀態爲active,當宕機的namenode,重新啓動,他會再次註冊zookeeper,發現已經有znode了,就自動變爲standby狀態,如此往復循環,保證高可靠性,但是Hadoop2.x僅支持最多配置兩個namenode,Hadoop3.x支持多個
    • master選舉:如上所述,通過在zookeeper中維持一個短暫類型的znode,來實現搶佔式的鎖機制,從而判斷哪個namenode爲active狀態。

5:zookeeper

  • Zookeeper 集羣:爲主備切換控制器提供主備選舉支持。
    • 目錄樹結構:/hadoop-ha/子目錄下 有鎖,主備NN爭搶
    • 事件機制–》callBack()回調函數,Watch監控着鎖
    • 有zkfc維持的臨時節點
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章