大數(shù)據(jù)初步:帶你了解Hadoop-ha

Hadoop 2.0是怎樣產(chǎn)生的慨蓝?早期的hadoop版本,NN(namenode)是HDFS集群的單點故障點雹嗦,每一個集群只有一個NN,如果這個機(jī)器或進(jìn)程不可用啥酱,整個集群就無法使用。為了解決這個問題南誊,出現(xiàn)了一堆針對HDFS HA的解決方案(如:Linux HA, VMware FT, shared NAS+NFS, BookKeeper, QJM/Quorum Journal Manager, BackupNode等); 在HA具體實現(xiàn)方法不同的情況下身诺,HA框架的流程是一致的, 不一致的就是如何存儲和管理日志。在Active NN和Standby NN之間要有個共享的存儲日志的地方抄囚,Active NN把EditLog寫到這個共享的存儲日志的地方霉赡,Standby NN去讀取日志然后執(zhí)行,這樣Active和Standby NN內(nèi)存中的HDFS元數(shù)據(jù)保持著同步幔托。一旦發(fā)生主從切換Standby NN可以盡快接管Active NN的工作.


SPOF方案回顧

1. Secondary NameNode:它不是HA(高可用)穴亏,它只是階段性的合并edits和fsimage,以縮短集群啟動的時間。當(dāng)NN失效的時候嗓化,Secondary NN并無法立刻提供服務(wù)锅劝,Secondary NN甚至無法保證數(shù)據(jù)完整性:如果NN數(shù)據(jù)丟失的話,在上一次合并后的文件系統(tǒng)的改動會丟失

2. Backup NameNode (HADOOP-4539):它在內(nèi)存中復(fù)制了NN的當(dāng)前狀態(tài)蟆湖,算是Warm Standby故爵,可也就僅限于此,并沒有failover(故障切換)等隅津。它同樣是階段性的做checkpoint诬垂,也無法保證數(shù)據(jù)完整性

3. 手動把name.dir指向NFS(Network File System),這是安全的Cold Standby伦仍,可以保證元數(shù)據(jù)不丟失结窘,但集群的恢復(fù)則完全靠手動

4. Facebook AvatarNode:Facebook有強(qiáng)大的運維做后盾,所以Avatarnode只是Hot Standby充蓝,并沒有自動切換隧枫,當(dāng)主NN失效的時候,需要管理員確認(rèn)谓苟,然后手動把對外提供服務(wù)的虛擬IP映射到Standby NN官脓,這樣做的好處是確保不會發(fā)生腦裂的場景。其某些設(shè)計思想和Hadoop 2.0里的HA非常相似涝焙,從時間上來看卑笨,Hadoop 2.0應(yīng)該是借鑒了Facebook的做法

? Facebook AvatarNode 原理示例圖


? PrimaryNN與StandbyNN之間通過NFS來共享FsEdits固该、FsImage文件器腋,這樣主備NN之間就擁有了一致的目錄樹和block信息;而block的位置信息俭尖,可以根據(jù)DN向兩個NN上報的信息過程中構(gòu)建起來隧哮。這樣再輔以虛IP桶良,可以較好達(dá)到主備NN快速熱切的目的。但是顯然沮翔,這里的NFS又引入了新的SPOF(Single Points Of Failure:單點故障)

? 在主備NN共享元數(shù)據(jù)的過程中陨帆,也有方案通過主NN將FsEdits的內(nèi)容通過與備NN建立的網(wǎng)絡(luò)IO流,實時寫入備NN鉴竭,并且保證整個過程的原子性歧譬。這種方案,解決了NFS共享元數(shù)據(jù)引入的SPOF搏存,但是主備NN之間的網(wǎng)絡(luò)連接又會成為新的問題

hadoop2.X ha 原理:


? hadoop2.x之后瑰步,Clouera提出了QJM/Qurom Journal Manager,這是一個基于Paxos算法實現(xiàn)的HDFS HA方案璧眠,它給出了一種較好的解決思路和方案,示意圖如下:


? 基本原理就是用2N+1臺 JN 存儲EditLog缩焦,每次寫數(shù)據(jù)操作有大多數(shù)(>=N+1)返回成功時即認(rèn)為該次寫成功读虏,數(shù)據(jù)不會丟失了。當(dāng)然這個算法所能容忍的是最多有N臺機(jī)器掛掉袁滥,如果多于N臺掛掉盖桥,這個算法就失效了。這個原理是基于Paxos算法

? 在HA架構(gòu)里面SecondaryNameNode這個冷備角色已經(jīng)不存在了题翻,為了保持standby NN時時的與主Active NN的元數(shù)據(jù)保持一致揩徊,他們之間交互通過一系列守護(hù)的輕量級進(jìn)程JournalNode

? 任何修改操作在 Active NN上執(zhí)行時,JN進(jìn)程同時也會記錄修改log到至少半數(shù)以上的JN中嵌赠,這時 Standby NN 監(jiān)測到JN 里面的同步log發(fā)生變化了會讀取 JN 里面的修改log塑荒,然后同步到自己的的目錄鏡像樹里面,如下圖:


? 當(dāng)發(fā)生故障時姜挺,Active的 NN 掛掉后齿税,Standby NN 會在它成為Active NN 前,讀取所有的JN里面的修改日志炊豪,這樣就能高可靠的保證與掛掉的NN的目錄鏡像樹一致凌箕,然后無縫的接替它的職責(zé),維護(hù)來自客戶端請求词渤,從而達(dá)到一個高可用的目的

? QJM方式來實現(xiàn)HA的主要優(yōu)勢:

1. 不需要配置額外的高共享存儲牵舱,降低了復(fù)雜度和維護(hù)成本

2. 消除spof

3. 系統(tǒng)魯棒性(Robust:健壯)的程度是可配置(魯棒是Robust的音譯,也就是健壯和強(qiáng)壯的意思。它是在異常和危險情況下系統(tǒng)生存的關(guān)鍵)

4. JN不會因為其中一臺的延遲而影響整體的延遲掖肋,而且也不會因為JN的數(shù)量增多而影響性能(因為NN向JN發(fā)送日志是并行的)

hadoop2.x ha 詳述:

? datanode的fencing: 確保只有一個NN能命令DN仆葡。HDFS-1972中詳細(xì)描述了DN如何實現(xiàn)fencing

1. 每個NN改變狀態(tài)的時候,向DN發(fā)送自己的狀態(tài)和一個序列號

2. DN在運行過程中維護(hù)此序列號志笼,當(dāng)failover(故障切換)時,新的NN在返回DN心跳時會返回自己的active狀態(tài)和一個更大的序列號把篓。DN接收到這個返回則認(rèn)為該NN為新的active

3. 如果這時原來的active NN恢復(fù)纫溃,返回給DN的心跳信息包含active狀態(tài)和原來的序列號,這時DN就會拒絕這個NN的命令

? 客戶端fencing:確保只有一個NN能響應(yīng)客戶端請求韧掩,讓訪問standby nn的客戶端直接失敗紊浩。在RPC層封裝了一層,通過FailoverProxyProvider以重試的方式連接NN疗锐。通過若干次連接一個NN失敗后嘗試連接新的NN坊谁,對客戶端的影響是重試的時候增加一定的延遲』客戶端可以設(shè)置重試此時和時間

? Hadoop提供了ZKFailoverController角色口芍,部署在每個NameNode的節(jié)點上,作為一個deamon(守護(hù))進(jìn)程, 簡稱zkfc雇卷,示例圖如下:

? FailoverController主要包括三個組件:

1. HealthMonitor(健康監(jiān)測器): 監(jiān)控NameNode是否處于unavailable(不可用)或unhealthy(不健康)狀態(tài)鬓椭。當(dāng)前通過RPC調(diào)用NN相應(yīng)的方法完成

2. ActiveStandbyElector: 管理和監(jiān)控自己在ZK中的狀態(tài)

3. ZKFailoverController 它訂閱HealthMonitor 和ActiveStandbyElector 的事件颠猴,并管理NameNode的狀態(tài)

? ZKFailoverController主要職責(zé):

1. 健康監(jiān)測:周期性的向它監(jiān)控的NN發(fā)送健康探測命令,從而來確定某個NameNode是否處于健康狀態(tài)小染,如果機(jī)器宕機(jī)翘瓮,心跳失敗,那么zkfc就會標(biāo)記它處于一個不健康的狀態(tài)

2. 會話管理:如果NN是健康的裤翩,zkfc就會在zookeeper中保持一個打開的會話资盅,如果NameNode同時還是Active狀態(tài)的,那么zkfc還會在Zookeeper中占有一個類型為短暫類型的znode踊赠,當(dāng)這個NN掛掉時呵扛,這個znode將會被刪除,然后備用的NN臼疫,將會得到這把鎖择份,升級為主NN,同時標(biāo)記狀態(tài)為Active

3. 當(dāng)宕機(jī)的NN新啟動時烫堤,它會再次注冊zookeper荣赶,發(fā)現(xiàn)已經(jīng)有znode鎖了,便會自動變?yōu)镾tandby狀態(tài)鸽斟,如此往復(fù)循環(huán)拔创,保證高可靠,需要注意富蓄,目前僅僅支持最多配置2個NN

4. master選舉:如上所述剩燥,通過在zookeeper中維持一個短暫類型的znode,來實現(xiàn)搶占式的鎖機(jī)制立倍,從而判斷那個NameNode為Active狀態(tài)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末灭红,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子口注,更是在濱河造成了極大的恐慌变擒,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寝志,死亡現(xiàn)場離奇詭異娇斑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)材部,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門毫缆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人乐导,你說我怎么就攤上這事苦丁。” “怎么了兽叮?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵芬骄,是天一觀的道長猾愿。 經(jīng)常有香客問我,道長账阻,這世上最難降的妖魔是什么蒂秘? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮淘太,結(jié)果婚禮上姻僧,老公的妹妹穿的比我還像新娘。我一直安慰自己蒲牧,他們只是感情好撇贺,可當(dāng)我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著冰抢,像睡著了一般松嘶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挎扰,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天翠订,我揣著相機(jī)與錄音,去河邊找鬼遵倦。 笑死尽超,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梧躺。 我是一名探鬼主播似谁,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼掠哥!你這毒婦竟也來了巩踏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤续搀,失蹤者是張志新(化名)和其女友劉穎蛀缝,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體目代,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年嗤练,在試婚紗的時候發(fā)現(xiàn)自己被綠了榛了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡煞抬,死狀恐怖霜大,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情革答,我是刑警寧澤战坤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布曙强,位于F島的核電站,受9級特大地震影響途茫,放射性物質(zhì)發(fā)生泄漏碟嘴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一囊卜、第九天 我趴在偏房一處隱蔽的房頂上張望娜扇。 院中可真熱鬧,春花似錦栅组、人聲如沸雀瓢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刃麸。三九已至,卻和暖如春司浪,著一層夾襖步出監(jiān)牢的瞬間泊业,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工断傲, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留脱吱,地道東北人。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓认罩,卻偏偏與公主長得像箱蝠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子垦垂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容