這篇文章將為大家詳細(xì)講解有關(guān)hdfs如何保證高可用,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請(qǐng)域名、虛擬主機(jī)、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、富順網(wǎng)站維護(hù)、網(wǎng)站推廣。
從上圖中我們可以看到,啟動(dòng)的時(shí)候,主備選舉是利用 zookeeper 來(lái)實(shí)現(xiàn)的, hdfs namenode節(jié)點(diǎn)上的 ZKFailoverController 進(jìn)程, 主要負(fù)責(zé)控制主備切換,監(jiān)控 namenode進(jìn)程是否還活著, 連接 zookeeper進(jìn)行選舉,并且控制本機(jī)的 namenode 的行為,如果發(fā)現(xiàn)zookeeper的鎖節(jié)點(diǎn)還沒(méi)有被搶占創(chuàng)建,就創(chuàng)建鎖節(jié)點(diǎn),并把本機(jī)的 namenode 變成 active 節(jié)點(diǎn), 如果發(fā)現(xiàn)鎖節(jié)點(diǎn)已經(jīng)創(chuàng)建,就把 本機(jī)的namenode變成standby節(jié)點(diǎn)。
如果 ZKFailoverController 發(fā)現(xiàn)本機(jī)的 namenode 已經(jīng)掛掉了, 就刪除zookeeper上的節(jié)點(diǎn),standby 上的ZKFailoverController感知到刪除事件, 就升級(jí)本機(jī)的namenode成為主節(jié)點(diǎn)。
如果 active節(jié)點(diǎn)超過(guò) Zookeeper Session Timeout 參數(shù)配置的時(shí)間沒(méi)有連接 zookeeper, 同樣被認(rèn)為主節(jié)點(diǎn)已經(jīng)掛了, standby 節(jié)點(diǎn)也會(huì)升級(jí)成為主節(jié)點(diǎn)
與單機(jī)文件系統(tǒng)相似,HDFS對(duì)文件系統(tǒng)的目錄結(jié)構(gòu)也是按照樹(shù)狀結(jié)構(gòu)維護(hù),Namespace保存了目錄樹(shù)及每個(gè)目錄/文件節(jié)點(diǎn)的屬性。除在內(nèi)存常駐外,這部分?jǐn)?shù)據(jù)會(huì)定期flush到持久化設(shè)備上,生成一個(gè)新的FsImage文件,方便NameNode發(fā)生重啟時(shí),從FsImage及時(shí)恢復(fù)整個(gè)Namespace。
上圖我們可以看到基于 journalnode 進(jìn)行共享元數(shù)據(jù), jounalnode中保存著 editlog,也就是對(duì)文件元數(shù)據(jù)的操作日志,比如用戶(hù)(hdfs dfs rm /a.txt)刪除一個(gè)文件, 就產(chǎn)生了一條操作日志,作用到命名空間后,a.txt 這個(gè)文件就被干掉了,這個(gè)日志就類(lèi)似于數(shù)據(jù)庫(kù)中的 redo 日志, standby節(jié)點(diǎn) 周期性的從journalnode中拉取 editlog, 然后從上一次checkpoint的位置開(kāi)始重放,在內(nèi)存中將操作結(jié)果合并到老的fsimage(命名空間), 并更新checkpoint位置。 最后把合并后的fsimage 上傳到 active namenode 保存替換老的fsimage文件,
NameNode 處于 active和standby狀態(tài)時(shí)候,扮演的角色是很不同的,
active 角色, 把用戶(hù)對(duì)命名空間的操作作為 editlog 寫(xiě)入 journalnode 集群
standby 角色,EditLogTailer 線(xiàn)程 從 journalnode 上拉取 editlog日志, StandbyCheckpointer 線(xiàn)程把 editlog合并到 fsimage, 然后把 fsimage 文件上傳到 active namenode 節(jié)點(diǎn)
active 掛的時(shí)候, standby 感知后, 轉(zhuǎn)換為 active 角色, 生成一個(gè)新的 epoch(就是每次主備切換就加一, 表明現(xiàn)在誰(shuí)是老大,在誰(shuí)的任期內(nèi)),因?yàn)?standby 是階段性拉取 editlog的,所以肯定最新的一段editlog還沒(méi)有作用于 fsimage, 需要拉取重放, 因?yàn)閷?xiě) editlog 到 journal的時(shí)候, 只要大多數(shù)(比如總5個(gè)點(diǎn),要成功寫(xiě)入3個(gè)點(diǎn),總共3個(gè)點(diǎn),要成功寫(xiě)入2個(gè)點(diǎn))寫(xiě)入成功就認(rèn)為成功了, 這樣在拉取恢復(fù)的時(shí)候,各個(gè)journalnode 節(jié)點(diǎn)上的數(shù)據(jù)有可能不一致, 這時(shí)候就必須找到大多數(shù)里面 事務(wù)id最大的點(diǎn)作為基準(zhǔn), 這個(gè)事務(wù)id就類(lèi)似于數(shù)據(jù)庫(kù)中的 Log sequence number(簡(jiǎn)稱(chēng)LSN), 簡(jiǎn)單來(lái)講, 就是要把 上一次checkpoint 的(LSN) 到 redo 日志里面最大的 (LSN)這之間的 日志進(jìn)行重放redo,合并到fsimage。
假設(shè)一種情況, 老的active節(jié)點(diǎn),是因?yàn)榫W(wǎng)絡(luò)問(wèn)題,連接不上 zookeeper, 然后被認(rèn)為已經(jīng)死了,其實(shí)是假死,這時(shí)候網(wǎng)絡(luò)恢復(fù)了, 還認(rèn)為自己是 leader, 往 journalnode里面寫(xiě)editlog日志, 發(fā)現(xiàn)現(xiàn)在已經(jīng)是別人的天下了(epoch number已經(jīng)加1了),自己的epoch number已經(jīng)過(guò)時(shí)了,就把自己降級(jí)為 standby,做standby 角色該干的事情。
為什么要在 secondnamnode 上合并, 主要是為了減輕 namenode的壓力, namenode有很多其他的事情要干呢。
hadoop-daemon.sh start journalnode, 啟動(dòng) journalnode 集群,會(huì)根據(jù)你配置文件里面配置的機(jī)器上去啟動(dòng) journalnode 集群
hdfs namenode -format, 格式化 namenode 命名空間
hadoop-daemon.sh start namenode,nn1 上啟動(dòng) namenode
hdfs namenode -bootstrapStandby, nn2 同步nn1的元數(shù)據(jù)信息, 會(huì)把主節(jié)點(diǎn)上的 fsimage editlog目錄拷貝過(guò)來(lái)
hadoop-daemon.sh start namenode, nn2 上啟動(dòng) namenode
啟動(dòng) zk 集群 hdfs zkfc -formatZK 格式化 zkfc zk 中的目錄 hadoop-daemon.sh start zkfc 各個(gè)namenode節(jié)點(diǎn)上啟動(dòng)dfszk failover controller, 先在哪臺(tái)機(jī)器上啟動(dòng),哪臺(tái)就是active namenode
hadoop-daemon.sh start datanode 上傳文件 測(cè)試 讀寫(xiě)文件
測(cè)試 ha 將 active namenode進(jìn)程kill, jps 進(jìn)程號(hào), kill, 將active namenode機(jī)器斷開(kāi)網(wǎng)絡(luò) service network stop
我們對(duì)集群進(jìn)行以上的測(cè)試, 觀(guān)察日志,會(huì)發(fā)現(xiàn)hdfs干的事情基本上就是前面描寫(xiě)的流程。
關(guān)于“hdfs如何保證高可用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
分享名稱(chēng):hdfs如何保證高可用
瀏覽地址:http://jinyejixie.com/article22/pggccc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、網(wǎng)站營(yíng)銷(xiāo)、企業(yè)網(wǎng)站制作、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站策劃、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)