2021年大数据Hadoop(十四):HDFS的高可用机制
全網(wǎng)最詳細(xì)的Hadoop文章系列,強(qiáng)烈建議收藏加關(guān)注!
后面更新文章都會(huì)列出歷史文章目錄,幫助大家回顧知識(shí)重點(diǎn)。
目錄
本系列歷史文章
前言
HDFS的高可用機(jī)制
HDFS高可用介紹
組件介紹
NameNode 的主備切換實(shí)現(xiàn)
高可用集群環(huán)境搭建
本系列歷史文章
2021年大數(shù)據(jù)Hadoop(三十):Hadoop3.x的介紹
2021年大數(shù)據(jù)Hadoop(二十九):關(guān)于YARN常用參數(shù)設(shè)置
2021年大數(shù)據(jù)Hadoop(二十八):YARN的調(diào)度器Scheduler
2021年大數(shù)據(jù)Hadoop(二十七):YARN運(yùn)行流程
2021年大數(shù)據(jù)Hadoop(二十六):YARN三大組件介紹
2021年大數(shù)據(jù)Hadoop(二十五):YARN通俗介紹和基本架構(gòu)
2021年大數(shù)據(jù)Hadoop(二十四):MapReduce高階訓(xùn)練
2021年大數(shù)據(jù)Hadoop(二十三):MapReduce的運(yùn)行機(jī)制詳解
2021年大數(shù)據(jù)Hadoop(二十二):MapReduce的自定義分組
2021年大數(shù)據(jù)Hadoop(二十一):MapReuce的Combineer
2021年大數(shù)據(jù)Hadoop(二十):MapReduce的排序和序列化
2021年大數(shù)據(jù)Hadoop(十九):MapReduce分區(qū)
2021年大數(shù)據(jù)Hadoop(十八):MapReduce程序運(yùn)行模式和深入解析
2021年大數(shù)據(jù)Hadoop(十七):MapReduce編程規(guī)范及示例編寫
2021年大數(shù)據(jù)Hadoop(十六):MapReduce計(jì)算模型介紹
2021年大數(shù)據(jù)Hadoop(十五):Hadoop的聯(lián)邦機(jī)制 Federation
2021年大數(shù)據(jù)Hadoop(十四):HDFS的高可用機(jī)制
2021年大數(shù)據(jù)Hadoop(十三):HDFS意想不到的其他功能
2021年大數(shù)據(jù)Hadoop(十二):HDFS的API操作
2021年大數(shù)據(jù)Hadoop(十一):HDFS的元數(shù)據(jù)輔助管理
2021年大數(shù)據(jù)Hadoop(十):HDFS的數(shù)據(jù)讀寫流程
2021年大數(shù)據(jù)Hadoop(九):HDFS的高級(jí)使用命令
2021年大數(shù)據(jù)Hadoop(八):HDFS的Shell命令行使用
2021年大數(shù)據(jù)Hadoop(七):HDFS分布式文件系統(tǒng)簡(jiǎn)介
2021年大數(shù)據(jù)Hadoop(六):全網(wǎng)最詳細(xì)的Hadoop集群搭建
2021年大數(shù)據(jù)Hadoop(五):Hadoop架構(gòu)
2021年大數(shù)據(jù)Hadoop(四):Hadoop發(fā)行版公司
2021年大數(shù)據(jù)Hadoop(三):Hadoop國(guó)內(nèi)外應(yīng)用
2021年大數(shù)據(jù)Hadoop(二):Hadoop發(fā)展簡(jiǎn)史和特性優(yōu)點(diǎn)
2021年大數(shù)據(jù)Hadoop(一):Hadoop介紹
前言
2021大數(shù)據(jù)領(lǐng)域優(yōu)質(zhì)創(chuàng)作博客,帶你從入門到精通,該博客每天更新,逐漸完善大數(shù)據(jù)各個(gè)知識(shí)體系的文章,幫助大家更高效學(xué)習(xí)。
有對(duì)大數(shù)據(jù)感興趣的可以關(guān)注微信公眾號(hào):三幫大數(shù)據(jù)
HDFS的高可用機(jī)制
HDFS高可用介紹
在Hadoop 中,NameNode 所處的位置是非常重要的,整個(gè)HDFS文件系統(tǒng)的元數(shù)據(jù)信息都由NameNode 來(lái)管理,NameNode的可用性直接決定了Hadoop 的可用性,一旦NameNode進(jìn)程不能工作了,就會(huì)影響整個(gè)集群的正常使用。
在典型的HA集群中,兩臺(tái)獨(dú)立的機(jī)器被配置為NameNode。在工作集群中,NameNode機(jī)器中的一個(gè)處于Active狀態(tài),另一個(gè)處于Standby狀態(tài)。Active NameNode負(fù)責(zé)群集中的所有客戶端操作,而Standby充當(dāng)從服務(wù)器。Standby機(jī)器保持足夠的狀態(tài)以提供快速故障切換(如果需要)。
組件介紹
Active NameNode 和 Standby NameNode:兩臺(tái) NameNode 形成互備,一臺(tái)處于 Active 狀態(tài),為主 NameNode,另外一臺(tái)處于 Standby 狀態(tài),為備 NameNode,只有主 NameNode 才能對(duì)外提供讀寫服務(wù)。
主備切換控制器ZKFC( ZKFailoverController):ZKFailoverController 作為獨(dú)立的進(jìn)程運(yùn)行,對(duì) NameNode 的主備切換進(jìn)行總體控制。ZKFailoverController 能及時(shí)檢測(cè)到 NameNode 的健康狀況,在主 NameNode 故障時(shí)借助 Zookeeper 實(shí)現(xiàn)自動(dòng)的主備選舉和切換。
Zookeeper 集群:為主備切換控制器提供主備選舉支持。
元數(shù)據(jù)信息共享存儲(chǔ)系統(tǒng):共享存儲(chǔ)系統(tǒng)是實(shí)現(xiàn) NameNode 的高可用最為關(guān)鍵的部分,共享存儲(chǔ)系統(tǒng)保存了 NameNode 在運(yùn)行過(guò)程中所產(chǎn)生的 HDFS 的元數(shù)據(jù)。主 NameNode 和備用NameNode 通過(guò)共享存儲(chǔ)系統(tǒng)實(shí)現(xiàn)元數(shù)據(jù)同步。在進(jìn)行主備切換的時(shí)候,新的主 NameNode 在確認(rèn)元數(shù)據(jù)完全同步之后才能繼續(xù)對(duì)外提供服務(wù)。
原信息共享存儲(chǔ)系統(tǒng)主要用于保存 EditLog,并不保存 FSImage 文件。FSImage 文件還是在 NameNode 的本地磁盤上。共享存儲(chǔ)采用多個(gè)稱為 JournalNode 的節(jié)點(diǎn)組成的 JournalNode 集群來(lái)存儲(chǔ) EditLog。每個(gè) JournalNode 保存同樣的 EditLog 副本。每次 NameNode 寫 EditLog 的時(shí)候,除了向本地磁盤寫入 EditLog 之外,也會(huì)并行地向 JournalNode 集群之中的每一個(gè) JournalNode 發(fā)送寫請(qǐng)求,只要大多數(shù) 的 JournalNode 節(jié)點(diǎn)返回成功就認(rèn)為向 JournalNode 集群寫入 EditLog 成功。如果有 2N+1 臺(tái) JournalNode,那么根據(jù)大多數(shù)的原則,最多可以容忍有 N 臺(tái) JournalNode 節(jié)點(diǎn)掛掉。
DataNode 節(jié)點(diǎn):除了通過(guò)共享存儲(chǔ)系統(tǒng)共享 HDFS 的元數(shù)據(jù)信息之外,主 NameNode 和備 NameNode 還需要共享 HDFS 的數(shù)據(jù)塊和 DataNode 之間的映射關(guān)系。DataNode 會(huì)同時(shí)向主 NameNode 和備 NameNode 上報(bào)數(shù)據(jù)塊的位置信息。
NameNode 的主備切換實(shí)現(xiàn)
NameNode 主備切換主要由 ZKFailoverController、HealthMonitor 和 ActiveStandbyElector 這 3 個(gè)組件來(lái)協(xié)同實(shí)現(xiàn):
ZKFailoverController 作為 NameNode 機(jī)器上一個(gè)獨(dú)立的進(jìn)程啟動(dòng) (在 hdfs 啟動(dòng)腳本之中的進(jìn)程名為 zkfc),啟動(dòng)的時(shí)候會(huì)創(chuàng)建 HealthMonitor 和 ActiveStandbyElector 這兩個(gè)主要的內(nèi)部組件,ZKFailoverController 在創(chuàng)建 HealthMonitor 和 ActiveStandbyElector 的同時(shí),也會(huì)向 HealthMonitor 和 ActiveStandbyElector 注冊(cè)相應(yīng)的回調(diào)方法。
HealthMonitor 主要負(fù)責(zé)檢測(cè) NameNode 的健康狀態(tài),如果檢測(cè)到 NameNode 的狀態(tài)發(fā)生變化,會(huì)回調(diào) ZKFailoverController 的相應(yīng)方法進(jìn)行自動(dòng)的主備選舉。
ActiveStandbyElector 主要負(fù)責(zé)完成自動(dòng)的主備選舉,內(nèi)部封裝了 Zookeeper 的處理邏輯,一旦 Zookeeper 主備選舉完成,會(huì)回調(diào) ZKFailoverController 的相應(yīng)方法來(lái)進(jìn)行 NameNode 的主備狀態(tài)切換。
NameNode 實(shí)現(xiàn)主備切換的流程如圖 2 所示,有以下幾步:
- HealthMonitor 初始化完成之后會(huì)啟動(dòng)內(nèi)部的線程來(lái)定時(shí)調(diào)用對(duì)應(yīng) NameNode 的 HAServiceProtocol RPC 接口的方法,對(duì) NameNode 的健康狀態(tài)進(jìn)行檢測(cè)。
- HealthMonitor 如果檢測(cè)到 NameNode 的健康狀態(tài)發(fā)生變化,會(huì)回調(diào) ZKFailoverController 注冊(cè)的相應(yīng)方法進(jìn)行處理。
- 如果 ZKFailoverController 判斷需要進(jìn)行主備切換,會(huì)首先使用 ActiveStandbyElector 來(lái)進(jìn)行自動(dòng)的主備選舉。
- ActiveStandbyElector 與 Zookeeper 進(jìn)行交互完成自動(dòng)的主備選舉。
- ActiveStandbyElector 在主備選舉完成后,會(huì)回調(diào) ZKFailoverController 的相應(yīng)方法來(lái)通知當(dāng)前的 NameNode 成為主 NameNode 或備 NameNode。
- ZKFailoverController 調(diào)用對(duì)應(yīng) NameNode 的 HAServiceProtocol RPC 接口的方法將 NameNode 轉(zhuǎn)換為 Active 狀態(tài)或 Standby 狀態(tài)。
高可用集群環(huán)境搭建
??關(guān)于集群搭建步驟,可以參考《2021年大數(shù)據(jù)Hadoop(六):全網(wǎng)最詳細(xì)的Hadoop集群搭建》
- 📢博客主頁(yè):https://lansonli.blog.csdn.net
- 📢歡迎點(diǎn)贊 👍 收藏 ?留言 📝 如有錯(cuò)誤敬請(qǐng)指正!
- 📢本文由 Lansonli 原創(chuàng),首發(fā)于 CSDN博客🙉
- 📢大數(shù)據(jù)系列文章會(huì)每天更新,停下休息的時(shí)候不要忘了別人還在奔跑,希望大家抓緊時(shí)間學(xué)習(xí),全力奔赴更美好的生活?
總結(jié)
以上是生活随笔為你收集整理的2021年大数据Hadoop(十四):HDFS的高可用机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2021年大数据Hadoop(十二):H
- 下一篇: 2021年大数据Hadoop(十五):H