大數(shù)據(jù)學(xué)習(xí)筆記:Hadoop之HDFS(下)

Hadoop中NameNode單點(diǎn)故障解決方案

Hadoop 1.0內(nèi)核主要由兩個(gè)分支組成:MapReduce和HDFS,這兩個(gè)系統(tǒng)的設(shè)計(jì)缺陷是單點(diǎn)故障,即MR的JobTracker和HDFS的NameNode兩個(gè)核心服務(wù)均存在單點(diǎn)問(wèn)題,這里只討論HDFS的NameNode單點(diǎn)故障的解決方案踢匣。

[問(wèn)題]

HDFS仿照google GFS實(shí)現(xiàn)的分布式存儲(chǔ)系統(tǒng)痒蓬,由NameNode和DataNode兩種服務(wù)組成忱详,其中NameNode是存儲(chǔ)了元數(shù)據(jù)信息(fsimage)和操作日志(edits)涩笤,由于它是唯一的贸桶,其可用性直接決定了整個(gè)存儲(chǔ)系統(tǒng)的可用性匣吊。因?yàn)榭蛻舳藢?duì)HDFS的讀儒拂、寫操作之前都要訪問(wèn)name node服務(wù)器寸潦,客戶端只有從name node獲取元數(shù)據(jù)之后才能繼續(xù)進(jìn)行讀、寫社痛。一旦NameNode出現(xiàn)故障见转,將影響整個(gè)存儲(chǔ)系統(tǒng)的使用。

[解決方案]

Hadoop官方提供了一種quorum journal manager來(lái)實(shí)現(xiàn)高可用褥影,在高可用配置下池户,edit log不再存放在名稱節(jié)點(diǎn),而是存放在一個(gè)共享存儲(chǔ)的地方凡怎,這個(gè)共享存儲(chǔ)由若干Journal Node組成校焦,一般是3個(gè)節(jié)點(diǎn)(JN小集群), 每個(gè)JN專門用于存放來(lái)自NN的編輯日志统倒,編輯日志由活躍狀態(tài)的名稱節(jié)點(diǎn)寫入寨典。

要有2個(gè)NN節(jié)點(diǎn),二者之中只能有一個(gè)處于活躍狀態(tài)(active)房匆,另一個(gè)是待命狀態(tài)(standby)耸成,只有active節(jié)點(diǎn)才能對(duì)外提供讀寫HDFS服務(wù),也只有active態(tài)的NN才能向JN寫入編輯日志浴鸿;standby的名稱節(jié)點(diǎn)只負(fù)責(zé)從JN小集群中的JN節(jié)點(diǎn)拷貝數(shù)據(jù)到本地存放井氢。另外,各個(gè)DATA NODE也要同時(shí)向兩個(gè)NameNode節(jié)點(diǎn)報(bào)告狀態(tài)(心跳信息岳链、塊信息)花竞。


一主一從的2個(gè)NameNode節(jié)點(diǎn)同時(shí)和3個(gè)JN構(gòu)成的組保持通信,活躍的NameNode節(jié)點(diǎn)負(fù)責(zé)往JN集群寫入編輯日志掸哑,待命的NN節(jié)點(diǎn)負(fù)責(zé)觀察JN組中的編輯日志,并且把日志拉取到待命節(jié)點(diǎn)(接管Secondary NameNode的工作)约急。再加上兩節(jié)點(diǎn)各自的fsimage鏡像文件,這樣一來(lái)就能確保兩個(gè)NN的元數(shù)據(jù)保持同步苗分。一旦active不可用厌蔽,standby繼續(xù)對(duì)外提供服。架構(gòu)分為手動(dòng)模式和自動(dòng)模式摔癣,其中手動(dòng)模式是指由管理員通過(guò)命令進(jìn)行主備切換奴饮,這通常在服務(wù)升級(jí)時(shí)有用,自動(dòng)模式可降低運(yùn)維成本择浊,但存在潛在危險(xiǎn)拐云。這兩種模式下的架構(gòu)如下。

[手動(dòng)模式]


模擬流程:

1. 準(zhǔn)備3臺(tái)服務(wù)器分別用于運(yùn)行JournalNode進(jìn)程(也可以運(yùn)行在date node服務(wù)器上)近她,準(zhǔn)備2臺(tái)namenode服務(wù)器用于運(yùn)行NameNode進(jìn)程(兩臺(tái)配置 要一樣)叉瘩,DataNode節(jié)點(diǎn)數(shù)量不限。

2. 分別啟動(dòng)3臺(tái)JN服務(wù)器上的JournalNode進(jìn)程粘捎,分別在date node服務(wù)器啟動(dòng)DataNode進(jìn)程薇缅。

3. 需要同步2臺(tái)name node之間的元數(shù)據(jù)危彩。具體做法:從第一臺(tái)NN拷貝元數(shù)據(jù)到放到另一臺(tái)NN,然后啟動(dòng)第一臺(tái)的NameNode進(jìn)程,再到另一臺(tái)名稱節(jié)點(diǎn)上做standby引導(dǎo)泳桦。

4. 把第一臺(tái)名節(jié)點(diǎn)的edit日志初始化到JN節(jié)點(diǎn)汤徽,以供standby節(jié)點(diǎn)到JN節(jié)點(diǎn)拉取數(shù)據(jù)。

5. 啟動(dòng)standby狀態(tài)的NameNode節(jié)點(diǎn)灸撰,這樣就能同步fsimage文件谒府。

6. 模擬故障,手動(dòng)把a(bǔ)ctive狀態(tài)的NN故障浮毯,轉(zhuǎn)移到另一臺(tái)NameNode完疫。

[自動(dòng)模式]


模擬流程:

在手動(dòng)模式下引入了ZKFC(DFSZKFailoverController)和zookeeper集群

ZKFC主要負(fù)責(zé): 健康監(jiān)控、session管理债蓝、leader選舉

zookeeper集群主要負(fù)責(zé):服務(wù)同步

1-6步同手動(dòng)模式

7. 準(zhǔn)備3臺(tái)主機(jī)安裝zookeeper壳鹤,3臺(tái)主機(jī)形成一個(gè)小的zookeeper集群.

8. 啟動(dòng)ZK集群每個(gè)節(jié)點(diǎn)上的QuorumPeerMain進(jìn)程

9. 登錄其中一臺(tái)NN, 在ZK中初始化HA狀態(tài)

10. 模擬故障:停掉活躍的NameNode進(jìn)程,提前配置的zookeeper會(huì)把standby節(jié)點(diǎn)自動(dòng)變?yōu)閍ctive,繼續(xù)提供服務(wù)饰迹。

腦裂

腦裂是指在主備切換時(shí)芳誓,由于切換不徹底或其他原因,導(dǎo)致客戶端和Slave誤以為出現(xiàn)兩個(gè)active master啊鸭,最終使得整個(gè)集群處于混亂狀態(tài)锹淌。解決腦裂問(wèn)題,通常采用隔離(Fencing)機(jī)制赠制。

共享存儲(chǔ)fencing:確保只有一個(gè)Master往共享存儲(chǔ)中寫數(shù)據(jù)葛圃,使用QJM實(shí)現(xiàn)fencing。

Qurom Journal Manager憎妙,基于Paxos(基于消息傳遞的一致性算法),Paxos算法是解決分布式環(huán)境中如何就某個(gè)值達(dá)成一致曲楚。

[原理]

a. 初始化后厘唾,Active把editlog日志寫到JN上,每個(gè)editlog有一個(gè)編號(hào)龙誊,每次寫editlog只要其中大多數(shù)JN返回成功(過(guò)半)即認(rèn)定寫成功抚垃。

b.? Standby定期從JN讀取一批editlog,并應(yīng)用到內(nèi)存中的FsImage中趟大。

c. NameNode每次寫Editlog都需要傳遞一個(gè)編號(hào)Epoch給JN鹤树,JN會(huì)對(duì)比Epoch,如果比自己保存的Epoch大或相同逊朽,則可以寫罕伯,JN更新自己的Epoch到最新,否則拒絕操作叽讳。在切換時(shí)追他,Standby轉(zhuǎn)換為Active時(shí)坟募,會(huì)把Epoch+1,這樣就防止即使之前的NameNode向JN寫日志邑狸,也會(huì)失敗懈糯。

客戶端fencing:確保只有一個(gè)Master可以響應(yīng)客戶端的請(qǐng)求。

[原理]

在RPC層封裝了一層单雾,通過(guò)FailoverProxyProvider以重試的方式連接NN赚哗。通過(guò)若干次連接一個(gè)NN失敗后嘗試連接新的NN,對(duì)客戶端的影響是重試的時(shí)候增加一定的延遲硅堆∮齑ⅲ客戶端可以設(shè)置重試此時(shí)和時(shí)間

Slave fencing:確保只有一個(gè)Master可以向Slave下發(fā)命令。

[原理]

a. 每個(gè)NN改變狀態(tài)的時(shí)候硬萍,向DN發(fā)送自己的狀態(tài)和一個(gè)序列號(hào)扩所。

b. DN在運(yùn)行過(guò)程中維護(hù)此序列號(hào),當(dāng)failover時(shí)朴乖,新的NN在返回DN心跳時(shí)會(huì)返回自己的active狀態(tài)和一個(gè)更大的序列號(hào)祖屏。DN接收到這個(gè)返回是認(rèn)為該NN為新的active。

b. 如果這時(shí)原來(lái)的active(比如GC)恢復(fù)买羞,返回給DN的心跳信息包含active狀態(tài)和原來(lái)的序列號(hào)袁勺,這時(shí)DN就會(huì)拒絕這個(gè)NN的命令。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末畜普,一起剝皮案震驚了整個(gè)濱河市期丰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吃挑,老刑警劉巖钝荡,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異舶衬,居然都是意外死亡埠通,警方通過(guò)查閱死者的電腦和手機(jī)末患,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門跛锌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人脯颜,你說(shuō)我怎么就攤上這事虽画∥璞危” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵码撰,是天一觀的道長(zhǎng)渗柿。 經(jīng)常有香客問(wèn)我,道長(zhǎng)脖岛,這世上最難降的妖魔是什么做祝? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任砾省,我火速辦了婚禮,結(jié)果婚禮上混槐,老公的妹妹穿的比我還像新娘编兄。我一直安慰自己,他們只是感情好声登,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布狠鸳。 她就那樣靜靜地躺著,像睡著了一般悯嗓。 火紅的嫁衣襯著肌膚如雪件舵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天脯厨,我揣著相機(jī)與錄音铅祸,去河邊找鬼。 笑死合武,一個(gè)胖子當(dāng)著我的面吹牛临梗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播稼跳,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼盟庞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了汤善?” 一聲冷哼從身側(cè)響起什猖,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎红淡,沒想到半個(gè)月后不狮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡在旱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年摇零,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颈渊。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖终佛,靈堂內(nèi)的尸體忽然破棺而出俊嗽,到底是詐尸還是另有隱情,我是刑警寧澤铃彰,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布绍豁,位于F島的核電站,受9級(jí)特大地震影響牙捉,放射性物質(zhì)發(fā)生泄漏竹揍。R本人自食惡果不足惜敬飒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芬位。 院中可真熱鬧无拗,春花似錦、人聲如沸昧碉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)被饿。三九已至四康,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狭握,已是汗流浹背闪金。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留论颅,地道東北人哎垦。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嗅辣,于是被迫代替她去往敵國(guó)和親撼泛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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