hadoop2的HDFS的高可用性

在hadoop1中,namenode存在單點故障,每一個集羣中只有一個namenode,如果namenode所在的機器出現了故障,那麼將導致整個集羣無法利用

主要在兩方面影響了HDFS的可用性:

1)、在不可預測的情況下,如果namenode所在的機器崩潰了,整個集羣將無法利用,直到namenode被重新啓動;
2)、在可預知的情況下,比如namenode所在的機器硬件出錯,將導致集羣宕機。

HDFS的高可用性:在一個集羣中運行兩個namenode(active namenode & standby namenode)來解決上面兩個問題,這種方案使得機器出現故障時可以快速地啓用一個新的

namenode來恢復。

高可用性(High Availability),簡稱HA

在HA集羣中,要有兩臺不同的機器充當namenode。在任何時間,只有一臺機器處於Active狀態;另一臺機器是處於Standby狀態。Active namenode負責集羣中所有客戶端的操

作;而Standby namenode主要用於備用,它維持足夠的狀態,如果必要,可以提供快速的故障恢復。

Standby namenode和Active namenode必須保持同步,即元數據保持一致,它們都會和JournalNode進程通信。當Active namenode執行任何有關命名空間的修改,它需要持久化到JournalNode上(通過edits log持久化存儲),而Standby namenode負責觀察edits log的變化,它能夠從JournalNode中讀取edits log的信息,並更新其內部的命名空間。一旦Active namenode出現故障,Standby namenode將迅速切換成Active狀態。Standby namenode讀取全部的edits log可確保發生故障時,是和Active namenode擁有完全相同的狀態。

爲了實現快速的故障恢復,Standby namenode也需要保存集羣中各個文件塊的存儲位置。爲了實現這個,集羣中所有的Datanode向Active namenode和Standby namenode發送塊文件所在的位置及心跳,如下圖所示:



在任何時候,集羣中只有一個namenode處於Active狀態。

爲了保證這種情況,在任何時間,JournalNode只允許一個 namenode充當writer。


注意以下事項:
1)、運行Active namenode和Standby namenode的機器需要相同的硬件配置;
2)、JournalNode守護進程相對來說比較輕量,所以該守護進程可以與其他守護線程(比如namenode,ResourceManager)運行在同一臺機器上。在一個集羣中,最少要運行3個JournalNode守護進程,這將使得系統有一定的容錯能力。當然,你也可以運行3個以上的JournalNode,但是爲了增加系統的容錯能力,你應該運行奇數個JournalNode(3、5、7等),系統將最多容忍(N-1)/2個JournalNode崩潰。


HA中NameNode之間共享數據(NFS 、Journal Node(用得多))

NFS作爲active namenode和standby namenode之間數據共享的存儲。active namenode會把最近的edits文件寫到NFS,而standby namenode從NFS中把數據讀過來。這個方式的缺點是,如果active namenode或者standby namenode有一個和NFS之間網絡有問題,則會造成他們之前數據的同步出問題。

Journal Node方式有容錯的機制,可以容忍n個journalnode的失敗。

兩個NameNode爲了數據同步,會通過一組稱作JournalNode的獨立進程進行相互通信。當active狀態的NameNode的命名空間有任何修改時,會告知大部分的JournalNode進程。standby狀態的NameNode有能力讀取JournalNode中的變更信息,並且一直監控edit log的變化,把變化應用於自己的命名空間。standby可以確保在集羣出錯時,命名空間狀態已經完全同步了。


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