(轉(zhuǎn)https://my.oschina.net/u/189445/blog/661561)
NameNode之間共享數(shù)據(jù)(NFS 、Quorum Journal Node(用得多))
兩個NameNode為了數(shù)據(jù)同步蕊梧,會通過一組稱作JournalNodes的獨立進程進行相互通信核偿。當active狀態(tài)的NameNode的命名空間有任何修改時构蹬,會告知大部分的JournalNodes進程枕屉。standby狀態(tài)的NameNode有能力讀取JNs中的變更信息蠢终,并且一直監(jiān)控edit log的變化晋辆,把變化應用于自己的命名空間。standby可以確保在集群出錯時抱婉,命名空間狀態(tài)已經(jīng)完全同步了档叔。
Hadoop中的NameNode好比是人的心臟,非常重要蒸绩,絕對不可以停止工作衙四。在hadoop1時代,只有一個NameNode患亿。如果該NameNode數(shù)據(jù)丟失或者不能工作传蹈,那么整個集群就不能恢復了。這是hadoop1中的單點問題步藕,也是hadoop1不可靠的表現(xiàn)惦界,如圖1所示。hadoop2就解決了這個問題咙冗。
hadoop2.2.0(HA)中HDFS的高可靠指的是可以同時啟動2個NameNode沾歪。其中一個處于工作狀態(tài),另一個處于隨時待命狀態(tài)雾消。這樣灾搏,當一個NameNode所在的服務器宕機時,可以在數(shù)據(jù)不丟失的情況下立润,手工或者自動切換到另一個NameNode提供服務狂窑。?
這些NameNode之間通過共享數(shù)據(jù),保證數(shù)據(jù)的狀態(tài)一致桑腮。多個NameNode之間共享數(shù)據(jù)泉哈,可以通過Nnetwork File System或者Quorum Journal Node。前者是通過linux共享的文件系統(tǒng)破讨,屬于操作系統(tǒng)的配置旨巷;后者是hadoop自身的東西,屬于軟件的配置添忘。
我們這里講述使用Quorum Journal Node的配置方式,方式是手工切換若锁。
集群啟動時搁骑,可以同時啟動2個NameNode。這些NameNode只有一個是active的,另一個屬于standby狀態(tài)仲器。active狀態(tài)意味著提供服務煤率,standby狀態(tài)意味著處于休眠狀態(tài),只進行數(shù)據(jù)同步乏冀,時刻準備著提供服務蝶糯,如圖2所示。
架構?
在一個典型的HA集群中辆沦,每個NameNode是一臺獨立的服務器昼捍。在任一時刻,只有一個NameNode處于active狀態(tài)肢扯,另一個處于standby狀態(tài)妒茬。其中,active狀態(tài)的NameNode負責所有的客戶端操作蔚晨,standby狀態(tài)的NameNode處于從屬地位乍钻,維護著數(shù)據(jù)狀態(tài),隨時準備切換铭腕。?
兩個NameNode為了數(shù)據(jù)同步银择,會通過一組稱作JournalNodes的獨立進程進行相互通信。當active狀態(tài)的NameNode的命名空間有任何修改時累舷,會告知大部分的JournalNodes進程浩考。standby狀態(tài)的NameNode有能力讀取JNs中的變更信息,并且一直監(jiān)控edit log的變化笋粟,把變化應用于自己的命名空間怀挠。standby可以確保在集群出錯時,命名空間狀態(tài)已經(jīng)完全同步了害捕。
為了確甭塘埽快速切換,standby狀態(tài)的NameNode有必要知道集群中所有數(shù)據(jù)塊的位置尝盼。為了做到這點吞滞,所有的datanodes必須配置兩個NameNode的地址,發(fā)送數(shù)據(jù)塊位置信息和心跳給他們兩個盾沫。
對于HA集群而言裁赠,確保同一時刻只有一個NameNode處于active狀態(tài)是至關重要的。否則赴精,兩個NameNode的數(shù)據(jù)狀態(tài)就會產(chǎn)生分歧佩捞,可能丟失數(shù)據(jù),或者產(chǎn)生錯誤的結果蕾哟。為了保證這點一忱,JNs必須確保同一時刻只有一個NameNode可以向自己寫數(shù)據(jù)莲蜘。?
硬件資源?
為了部署HA集群,應該準備以下事情:
* NameNode服務器:運行NameNode的服務器應該有相同的硬件配置帘营。
* JournalNode服務器:運行的JournalNode進程非常輕量票渠,可以部署在其他的服務器上。注意:必須允許至少3個節(jié)點芬迄。當然可以運行更多问顷,但是必須是奇數(shù)個,如3禀梳、5杜窄、7、9個等等出皇。當運行N個節(jié)點時羞芍,系統(tǒng)可以容忍至少(N-1)/2(N至少為3)個節(jié)點失敗而不影響正常運行。
在HA集群中郊艘,standby狀態(tài)的NameNode可以完成checkpoint操作荷科,因此沒必要配置Secondary NameNode、CheckpointNode纱注、BackupNode畏浆。如果真的配置了,還會報錯狞贱。
注:2.*版本的HA只有兩個NN刻获,3.*以上可以配置多個NN。