JournalNode 和 Secondary NameNode

在一個典型的HA集羣中,兩個或更多的獨立機器被配置爲NameNodes。在任何時間點上,正好有一個NameNode處於活動狀態,其他的NameNode處於待機狀態。Active NameNode 負責集羣中的所有客戶機操作,而Standbys 只是作爲worker,保持足夠的狀態,以便在必要時提供快速故障切換。

爲了讓Standby 節點與Active節點保持狀態同步,這兩個節點都會與一組獨立的守護進程進行通信,這些守護進程被稱爲 "JournalNodes"(JNs)。當Active節點執行任何命名空間修改時,它就會持久地將修改的記錄記錄記錄到這些JNs中的大部分。Standby節點能夠讀取這些JNs中的編輯,並時刻關注這些JNs對編輯日誌的修改。當Standby節點看到這些編輯後,它會將其應用到自己的命名空間中。在發生故障切換時,Standby節點將確保它已經讀取了來自JournalNodes的所有編輯,然後再將自己提升到Active狀態。這樣可以確保在故障切換髮生之前,命名空間狀態完全同步。

爲了提供快速故障切換,還需要Standby節點掌握集羣中塊位置的最新信息。爲了實現這一點,DataNode配置了所有NameNode的位置,並向所有的NameNode發送塊位置信息和心跳信息。

 

對於HA集羣的正確運行來說,一次只能有一個NameNode處於Active狀態是至關重要的。否則,命名空間的狀態會很快在這兩個節點之間發生分歧,有可能造成數據丟失或其他不正確的結果。爲了保證這個屬性,並防止所謂的 "分裂腦的情況",JournalNode將永遠只允許一個NameNode作爲一個寫入器。在故障切換期間,將成爲活動狀態的NameNode將簡單地接管向JournalNode寫入的角色,這將有效地阻止另一個NameNode繼續處於活動狀態,允許新的Active安全地進行故障切換。

 

爲了部署HA集羣,您應該準備以下內容:

  • NameNode machines: 運行 Active 和 Standby NameNode 的機器應該具有同等的硬件,並與非 HA 集羣中使用的硬件相當。
  • JournalNode machines:JournalNode的機器上運行JournalNode守護進程。JournalNode 守護進程相對較輕,因此這些守護進程可以合理地與其他 Hadoop 守護進程(例如 NameNodes、JobTracker 或 YARN ResourceManager)搭配在一起運行的機器上。注意:必須至少有3個JournalNode守護進程,因爲編輯日誌修改必須寫到大部分的JN。這將使系統能夠容忍單機故障。你也可以運行3個以上的JournalNode,但爲了實際增加系統可以容忍的故障數量,你應該運行奇數的JN,(即3、5、7等)。注意,當運行N個JournalNodes時,系統最多可以容忍(N - 1)/2的故障,並繼續正常運行。

請注意,在HA集羣中,備用NameNode也會執行命名空間狀態的檢查點,因此在HA集羣中沒有必要運行SecondaryNameNode、CheckpointNode或BackupNode。事實上,這樣做是會出錯的。這也允許正在重新配置一個非 HA 啓用的 HDFS 集羣的人重新配置爲 HA 啓用的 HDFS 集羣,以重新使用之前專門用於 Secondary NameNode 的硬件。(非HA SecondaryNameNode)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章