hdfs namenode HA高可用方案
1、hadoop-ha 集群運(yùn)作機(jī)制介紹
所謂HA,即高可用(7*24 小時(shí)不中斷服務(wù)) //hadoop 2.x 內(nèi)置了 HA 方案
實(shí)現(xiàn)高可用最關(guān)鍵的是消除單點(diǎn)故障
hadoop-ha 嚴(yán)格來(lái)說(shuō)應(yīng)該分成各個(gè)組件的HA 機(jī)制
創(chuàng)新互聯(lián)專注于麻陽(yáng)網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供麻陽(yáng)營(yíng)銷型網(wǎng)站建設(shè),麻陽(yáng)網(wǎng)站制作、麻陽(yáng)網(wǎng)頁(yè)設(shè)計(jì)、麻陽(yáng)網(wǎng)站官網(wǎng)定制、小程序開(kāi)發(fā)服務(wù),打造麻陽(yáng)網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供麻陽(yáng)網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
提示:
在之前沒(méi)有HA機(jī)制的時(shí)候,secondary namenode 和standay namenode 有很大的區(qū)別
secondary namenode 不可以替代namenode;而standay namenode 可以完全的替代namenode
HA技術(shù)要點(diǎn) :元數(shù)據(jù)管理 2個(gè)namenode的狀態(tài)管理 如何防止腦裂
HDFS 的HA 機(jī)制
通過(guò)雙namenode 消除單點(diǎn)故障
雙namenode 協(xié)調(diào)工作的要點(diǎn):
A、元數(shù)據(jù)管理方式需要改變:
內(nèi)存中各自保存一份元數(shù)據(jù)
Edits 日志只能有一份,只有Active 狀態(tài)的namenode 節(jié)點(diǎn)可以做寫操作
兩個(gè)namenode 都可以讀取edits
共享的edits 放在一個(gè)共享存儲(chǔ)中管理(qjournal 和NFS 兩個(gè)主流實(shí)現(xiàn))
1、客戶端訪問(wèn)active namenode //雙namenode中的fsimages一開(kāi)始初始化的時(shí)候,都是完全一樣,都是空的
2、寫數(shù)據(jù)的時(shí)候,寫入數(shù)據(jù)寫到active namenode中內(nèi)存元數(shù)據(jù)的時(shí)候,也會(huì)實(shí)時(shí)的更新到qjonal集群edits日志文件系統(tǒng)中
3、standay 會(huì)沒(méi)隔一段時(shí)間去讀取edits文件,并更新到自己的元數(shù)據(jù)內(nèi)存中,保持和active最小差異
4、每隔一段時(shí)間,standay中的fsimage會(huì)和edits更新一次,保持在本地
備注:edits既不屬于active也不屬于standay 依靠第三方qjonal集群 完全獨(dú)立
假設(shè) active namenode 宕機(jī)了,此時(shí) standay 和active有點(diǎn)差異,但是差異很小,standay迅速?gòu)膃dits日志系統(tǒng)中更新最新一次老的active的操作,完全和老active一樣的元數(shù)據(jù),那么就要可以迅速的對(duì)外來(lái)提供服務(wù)。
B、需要一個(gè)狀態(tài)管理功能模塊
實(shí)現(xiàn)了一個(gè)zkfailover,常駐在每一個(gè)namenode 所在的節(jié)點(diǎn)
每一個(gè)zkfailover 負(fù)責(zé)監(jiān)控自己所在的namenode 節(jié)點(diǎn),利用zk 進(jìn)行狀態(tài)標(biāo)識(shí)
當(dāng)需要進(jìn)行狀態(tài)切換時(shí),由zkfailover 來(lái)負(fù)責(zé)切換
切換時(shí)需要防止brain split 現(xiàn)象的發(fā)生
1、active上的zkfc實(shí)時(shí)監(jiān)控自己namenode的狀態(tài)健康信息
2、如果發(fā)生了異常之后會(huì)控制standay的zkfc
3、standay的zkfc收到異常之后會(huì)去kill -9 active namenode
4、如果standay的zkfc沒(méi)有成功得到kill -9 之后的返回值的話,那么就啟動(dòng)腳本去殺死active namenode 腳本位置為/bin/true
5、殺死active namenode之后,就成功得到訪問(wèn)值
6、standay的zkfc通知standay namenode稱為active 對(duì)外服務(wù)。
什么是zkfc:就是基于zookeeper實(shí)現(xiàn)的失敗切換控制器
如何在狀態(tài)切換時(shí)避免brain split(腦裂)?
腦裂:active namenode工作不正常后,zkfc在zookeeper中寫入一些數(shù)據(jù),表明異常,這時(shí)standby namenode中的zkfc讀到異常信息,并將standby節(jié)點(diǎn)置為active。但是,如果之前的active namenode并沒(méi)有真的死掉,出現(xiàn)了假死(死了一會(huì)兒后又正常了),這樣,就有兩臺(tái)namenode同時(shí)工作了。這種現(xiàn)象稱為腦裂。
解決方案:standby namenode感知到主用節(jié)點(diǎn)出現(xiàn)異常后并不會(huì)立即切換狀態(tài),zkfc會(huì)首先通過(guò)ssh遠(yuǎn)程殺死active節(jié)點(diǎn)的 namenode進(jìn)程(kill -9 進(jìn)程號(hào))。如果在一段時(shí)間內(nèi)standby的namenode節(jié)點(diǎn)沒(méi)有收到kill執(zhí)行成功的回執(zhí),standby節(jié)點(diǎn)會(huì)執(zhí)行一個(gè)自定義腳本,盡量保證不會(huì)出現(xiàn)腦裂問(wèn)題!這個(gè)機(jī)制在hadoop中稱為fencing(包括ssh發(fā)送kill指令,執(zhí)行自定義腳本兩道保障)。
從解決方案中可知;當(dāng)發(fā)生active節(jié)點(diǎn)崩壞時(shí);hadoop會(huì)進(jìn)行以下兩個(gè)操作:
1)通過(guò)ssh kill掉active節(jié)點(diǎn)的namenode進(jìn)程
2)執(zhí)行自定義腳本
原文:https://blog.csdn.net/qq_22310551/article/details/85700978
如何沒(méi)有及時(shí)得到kill的成功返回信息,在調(diào)用一個(gè)用戶指定的shell腳本程序。
[root@hadoop-node01 bin]# ls -l /bin/true //腳本位置在bin下面
-rwxr-xr-x. 1 root root 21112 10月 15 2014 /bin/true
在cdh中這個(gè)程序在
HDFS High Availability 防御方法
dfs.ha.fencing.methods
用于服務(wù)防御的防御方法列表。shell(./cloudera_manager_agent_fencer.py) 是一種設(shè)計(jì)為使用 Cloudera Manager Agent 的防御機(jī)制。sshfence 方法使用 SSH。如果使用自定義防御程序(可能與共享存儲(chǔ)、電源裝置或網(wǎng)絡(luò)交換機(jī)通信),則使用 shell 調(diào)用它們。
Cloudera Manager 防御策略的超時(shí)時(shí)限
dfs.ha.fencing.cloudera_manager.timeout_millis 10000
基于 Cloudera Manager 代理的防御程序使用的超時(shí)時(shí)限(毫秒)
zookeeper在HA機(jī)制中的作用
1、QJN集群需要zk實(shí)現(xiàn)協(xié)調(diào)服務(wù)
2、namenode中誰(shuí)是active誰(shuí)是standay記錄在zk中
3、zkfc基于zookeeper實(shí)現(xiàn)失敗切換控制器