hadoop的高可用(HA)機(jī)制

一、HA簡(jiǎn)介

HA(High Available)即高可用丧肴,HA的目的是為了消除單點(diǎn)故障(SPOF), 對(duì)hadoop而言蘸劈,HA包含了Hdfs的HA和Yarn的HA。配置HA后弦叶,集群中Hdfs的NameNode或Yarn的ResourceManager在宕或升級(jí)維護(hù)等場(chǎng)景下可快速進(jìn)行機(jī)器切換俊犯,保證集群可用。

二伤哺、 Hdfs的HA機(jī)制

1.1 Hdfs HA方案

為了解決Hdfs的SPOF問(wèn)題燕侠,Hadoop提供Hdfs的HA方案是:提供兩個(gè)NameNode,一個(gè)處于active狀態(tài)立莉,對(duì)位提供服務(wù)處理客戶端的讀寫(xiě)請(qǐng)求绢彤;另一個(gè)處于standby狀態(tài),不對(duì)外提供服務(wù)蜓耻,僅僅同步active的NameNode的狀態(tài)茫舶,以在其故障時(shí)快速進(jìn)行快速轉(zhuǎn)移。

基于QJM(Quorum Journal Node)的Hdfs HA方案:


image.png
  • 集群?jiǎn)?dòng)后刹淌,standby NameNode和active NameNode同時(shí)與JournalNodes(JNS)進(jìn)程保持通信饶氏。其中,active NameNode提供服務(wù)有勾,處理客戶端和DateNode的請(qǐng)求疹启。active節(jié)點(diǎn)在namespace更新時(shí)將editlog寫(xiě)到本地和JNS(作為shared editlog)。而standby NameNode周期性的從JNS中獲取editlog并應(yīng)用到本地namespace蔼卡,在failover發(fā)生時(shí)喊崖,standby節(jié)點(diǎn)會(huì)在轉(zhuǎn)變?yōu)閍ctive之前從JNS中讀取并處理所有editlog,以此保持與active NameNode的狀態(tài)完全同步雇逞。

  • 另一方面贷祈,為了failover后standy節(jié)點(diǎn)快速提供服務(wù),所有的DateNode節(jié)點(diǎn)同時(shí)向主備兩個(gè)NameNode報(bào)告block信息喝峦。

  • 在任意時(shí)刻势誊,為了防止“split-brain”(腦裂),集群中保持只有一個(gè)active NameNode谣蠢,否則集群中兩個(gè)NameNode會(huì)產(chǎn)生不同的狀態(tài)數(shù)據(jù)導(dǎo)致數(shù)據(jù)丟失或異常粟耻。這里通過(guò)fencing實(shí)現(xiàn),具體表現(xiàn)為:1)每個(gè)時(shí)刻只能有一個(gè)NameNode能夠?qū)慗NS; 2)每個(gè)時(shí)刻只有一個(gè)NameNode能夠向DateNode發(fā)送更新命令眉踱。3)每個(gè)時(shí)刻只有一個(gè)NameNode響應(yīng)客戶端請(qǐng)求

  • 為了實(shí)現(xiàn)HA的自動(dòng)failover挤忙,每個(gè)NameNode節(jié)點(diǎn)都開(kāi)啟一個(gè)FailoverController進(jìn)程,F(xiàn)ailoverController與zookeeper集群通信谈喳。FailoverController與zookeeper集群通信通過(guò)zookeeper選舉機(jī)制選出active節(jié)點(diǎn)册烈,并通過(guò)RPC發(fā)動(dòng)命令讓本機(jī)的NameNode轉(zhuǎn)換為active或standby狀態(tài)。

1.2 Hdfs HA的自動(dòng)故障轉(zhuǎn)移

上一節(jié)HA方案中的FailoverController(ZKFC)和zookeeper是為了實(shí)現(xiàn)HA的自動(dòng)failover(如果沒(méi)有需要手動(dòng)failover)婿禽∩蜕看下ZKFC的架構(gòu)設(shè)計(jì):

image.png

ZKFC和NameNode部署在同一臺(tái)宿主機(jī)器上(兩者在不同的jvm進(jìn)程)大猛,HealthMonitor、ActiveStandbyElector與ZKFailoverController處于同一個(gè)jvm進(jìn)程(zkfc)

ZKFC主要的三個(gè)組件:

  1. HealthMonitor
    定期檢查本地NameNode的狀態(tài)淀零,狀態(tài)變化時(shí)回調(diào)ZKFailoverController作相應(yīng)處理挽绩。

  2. ActiveStandbyElector
    管理NameNode在zookeeper上的狀態(tài),zookeeper上對(duì)應(yīng)znode節(jié)點(diǎn)變化時(shí)回調(diào)ZKFailoverController作相應(yīng)處理驾中。

  3. ZKFailoverController
    向HealthMonitor和ActiveStandbyElector注冊(cè)回調(diào)方法唉堪,接收并處理兩者的事件。

ZKFC實(shí)現(xiàn)的功能:

  1. 健康監(jiān)控(Health monitoring)

    通過(guò)HealthMonitor定期監(jiān)控本地NameNode是否存活和健康肩民。

  2. zk session管理(ZooKeeper Session Management)

    當(dāng)本地NameNode是健康的時(shí)候唠亚,zkfc在zookeeper中持有一個(gè)session。如果本地NameNode正好是active節(jié)點(diǎn)持痰,zkfc還會(huì)在zookeeper中持有“ephemeral”的znode作為鎖灶搜,如果本地NameNode失效,ephemeral的znode會(huì)自動(dòng)刪除共啃。

  3. 基于zk選主(ZooKeeper-based election )

    • 對(duì)active節(jié)點(diǎn),如果HealthMonitor健康到本地NameNode處于非健康狀態(tài)暂题,則先通過(guò)fence功能關(guān)閉它(關(guān)閉或不能提供服務(wù))移剪,再?gòu)膠ookeeper中刪除對(duì)應(yīng)的znode節(jié)點(diǎn);

    • 對(duì)standby節(jié)點(diǎn)薪者,如果本地NameNode是健康的纵苛,zkfc發(fā)現(xiàn)沒(méi)有其它節(jié)點(diǎn)持有ephemeral獨(dú)占鎖(ActiveStandbyElector會(huì)監(jiān)控到該事件), 則嘗試去獲取獨(dú)占鎖,如果獲得該鎖則進(jìn)行failover:

      1)如果需要言津,則先對(duì)之前active的NameNode進(jìn)行fence(可通過(guò)遠(yuǎn)程ssh強(qiáng)制殺死進(jìn)程)攻人;

      2)將本地NameNode轉(zhuǎn)換為active狀態(tài)。

二悬槽、 Yarn的HA機(jī)制

2.1 Yarn HA方案

ResourceManager(RM)負(fù)責(zé)Yarn集群資源的跟蹤及應(yīng)用調(diào)度怀吻。Yarn的HA方案:通過(guò)active/standby架構(gòu),提供多個(gè)ResourceManager初婆,同一時(shí)刻只有一個(gè)RM處于active狀態(tài)蓬坡,其它一個(gè)或多個(gè)RM處于standby狀態(tài),以此在RM故障時(shí)快速轉(zhuǎn)移(支持手動(dòng)或自動(dòng)的方式)磅叛。

image.png
  • ResourceManager(RM)
    啟動(dòng)后嘗試向zookeeper的/hadoop-ha節(jié)點(diǎn)寫(xiě)一個(gè)lock文件屑咳,獲取lock成功則成為active節(jié)點(diǎn),否則為standby節(jié)點(diǎn)弊琴。standby節(jié)點(diǎn)循環(huán)監(jiān)控lock是否存在兆龙,如果不存在嘗試獲取,爭(zhēng)取成為active節(jié)點(diǎn)敲董。RM負(fù)責(zé):接收client端任務(wù)請(qǐng)求紫皇,接收NodeManager節(jié)點(diǎn)的資源匯報(bào)慰安,分配和調(diào)度NM的資源,啟動(dòng)和監(jiān)控ApplicationMaster(AM)

  • NodeManager(NM)
    NM負(fù)責(zé)節(jié)點(diǎn)資源管理坝橡,啟動(dòng)container容器并運(yùn)行task泻帮,上報(bào)資源和container運(yùn)行狀態(tài)給RM,task處理狀態(tài)上報(bào)給ApplicationMaster(AM)

  • RMstatestore
    RM提供了多種RMstatestore的實(shí)現(xiàn)(可通過(guò)yarn.resourcemanager.store.class配置)计寇,如:MemoryRMStateStore锣杂、FileSystemRMStateStore、ZKRMStateStore番宁,后兩種實(shí)現(xiàn)是持久化的實(shí)現(xiàn)元莫,其中,ZKRMStateStore在任意時(shí)間只允許單個(gè)RM的寫(xiě)入請(qǐng)求蝶押,防止腦裂踱蠢,因此建議在HA方案中使用RMstatestore。

2.2 Yarn HA自動(dòng)故障轉(zhuǎn)移

ResourceManager中基于zookeeper的ActiveStandbyElector來(lái)選舉哪個(gè)RM作為active RM棋电。active RM關(guān)閉或故障時(shí)自動(dòng)選舉standby狀態(tài)的RM作為新的active RM接管active RM的工作茎截。

與HDFS的HA不同的是,YARN的HA方案不需要單獨(dú)的ZKFC deamon程序赶盔, 基于zk的ActiveStandbyElector作為RM內(nèi)部組件進(jìn)行故障檢測(cè)和active選舉, zkfc僅僅作為RM的一個(gè)線程存在企锌。

三、HA集群搭建

HA集群搭建于未,可參考另一篇博客:http://www.reibang.com/p/e3b0afee4390

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末撕攒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子烘浦,更是在濱河造成了極大的恐慌抖坪,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闷叉,死亡現(xiàn)場(chǎng)離奇詭異擦俐,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)握侧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)捌肴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人藕咏,你說(shuō)我怎么就攤上這事状知。” “怎么了孽查?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵饥悴,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)西设,這世上最難降的妖魔是什么瓣铣? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮贷揽,結(jié)果婚禮上棠笑,老公的妹妹穿的比我還像新娘。我一直安慰自己禽绪,他們只是感情好蓖救,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著印屁,像睡著了一般循捺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上雄人,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天从橘,我揣著相機(jī)與錄音,去河邊找鬼础钠。 笑死恰力,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的旗吁。 我是一名探鬼主播踩萎,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼阵漏!你這毒婦竟也來(lái)了驻民?” 一聲冷哼從身側(cè)響起翻具,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤履怯,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后裆泳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體叹洲,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年工禾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了运提。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闻葵,死狀恐怖民泵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情槽畔,我是刑警寧澤栈妆,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響鳞尔,放射性物質(zhì)發(fā)生泄漏嬉橙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一寥假、第九天 我趴在偏房一處隱蔽的房頂上張望市框。 院中可真熱鬧,春花似錦糕韧、人聲如沸枫振。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蒋得。三九已至,卻和暖如春乒疏,著一層夾襖步出監(jiān)牢的瞬間额衙,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工怕吴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窍侧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓转绷,卻偏偏與公主長(zhǎng)得像伟件,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子议经,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354