1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        大數(shù)據(jù) | HDFS 如何實(shí)現(xiàn)故障自動(dòng)轉(zhuǎn)移

        共 3080字,需瀏覽 7分鐘

         ·

        2021-12-27 09:37


        早期文章


        為什么需要自動(dòng)故障轉(zhuǎn)移

        ? ? ? ? 在 HDFS 2.x 集群的 HA 模式下通常會(huì)有兩個(gè) NameNode 用來進(jìn)行記錄元數(shù)據(jù),其中一個(gè)是主節(jié)點(diǎn)(Active),另外一個(gè)是備節(jié)點(diǎn)(Standby)。主備之間的數(shù)據(jù)同步通過 JournalNode 節(jié)點(diǎn)來充當(dāng)中介,從而完成了主備節(jié)點(diǎn)之間數(shù)據(jù)的最終一致性。


        ?? ? ? ?當(dāng) NameNode 的主節(jié)點(diǎn)宕機(jī)后,通過命令可以切換到它的備節(jié)點(diǎn)成為主節(jié)點(diǎn),使用命令進(jìn)行切換需要人工的參與,雖然這樣可以解決?HDFS?高可用的問題,但是這樣的切換還是比較繁瑣的。因此需要在 Active 節(jié)點(diǎn)發(fā)生故障的時(shí)候進(jìn)行自動(dòng)地切換到 Standby 節(jié)點(diǎn),從而完成故障自動(dòng)轉(zhuǎn)移。


        ? ? ? ? 為了實(shí)現(xiàn)故障的自動(dòng)轉(zhuǎn)移,HDFS 引入了 ZooKeeper 和 ZKFC。


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

        ? ? ? ??HDFS 為了實(shí)現(xiàn)故障自動(dòng)轉(zhuǎn)移功能添加了兩個(gè)組件,分別是 ZooKeeper 集群

        ?和 ZKFailoverController 進(jìn)程。其中,ZKFailoverController 簡(jiǎn)稱為 ZKFC。


        ? ? ? ? ZooKeeper 在故障自動(dòng)轉(zhuǎn)移中的作用大體有兩個(gè),第一個(gè)是 NameNode 的選“主”,第二個(gè)是監(jiān)聽故障的發(fā)生。


        ? ? ? ? ZKFC 在故障自動(dòng)轉(zhuǎn)移中的作用大體也是兩個(gè),第一個(gè)是在 ZooKeeper 中用于爭(zhēng)搶鎖完成選“主”,第二個(gè)是當(dāng) Active 節(jié)點(diǎn)發(fā)生故障時(shí),用于完成故障的自動(dòng)切換。


        HDFS HA 故障自動(dòng)轉(zhuǎn)移架構(gòu)圖

        ? ? ? ??來看一下 HDFS HA 故障自動(dòng)轉(zhuǎn)移架構(gòu)。在圖中,非藍(lán)色部分是 HDFS 的 HA 模式,藍(lán)色部分則完成了故障自動(dòng)轉(zhuǎn)移的功能,即當(dāng) Active 節(jié)點(diǎn)發(fā)生故障時(shí),會(huì)自動(dòng)切換 Standby 節(jié)點(diǎn)為 Active 節(jié)點(diǎn)。

        ? ? ? ? 本圖和上篇文章 《HDFS 在 HA 模式集群下 JournalNode 節(jié)點(diǎn)的作用》?的圖稍微有所差別。首先,ZooKeeper 集群的節(jié)點(diǎn)是單數(shù)節(jié)點(diǎn),上篇文章的圖中 ZooKeeper 畫了四臺(tái);第二,ZKFC 和 NameNode 在同一臺(tái)主機(jī)中,因此把它們框在了一起。


        NameNode 如何選主

        ? ? ? ??在了解 ZKFC 如何完成自動(dòng)切換前,需要了解 NameNode 如何進(jìn)行選主。NameNode 節(jié)點(diǎn)的選主是一件比較容易的事情,ZKFC 會(huì)在 ZooKeeper 下創(chuàng)建一個(gè)”臨時(shí)節(jié)點(diǎn)“,哪個(gè) ZKFC 先創(chuàng)建了該節(jié)點(diǎn),那么創(chuàng)建了該節(jié)點(diǎn)的 ZKFC 對(duì)應(yīng)的 NameNode 就是主節(jié)點(diǎn)(Active)。沒有創(chuàng)建成功的 ZKFC 對(duì)應(yīng)的 NameNode 即為節(jié)點(diǎn)(Standby)。NameNode 選主是爭(zhēng)搶制,無需選舉,誰搶上就是誰的。


        ZKFC 完成故障自動(dòng)轉(zhuǎn)移

        ? ? ? ??兩個(gè) ZKFC 通過爭(zhēng)搶在 ZooKeeper 中創(chuàng)建鎖,創(chuàng)建成功的即為”主“,那么沒有創(chuàng)建的成功的 ZKFC 會(huì)創(chuàng)建一個(gè)監(jiān)聽事件。當(dāng)”主“發(fā)生宕機(jī)或斷網(wǎng)后,鎖會(huì)被自動(dòng)刪除,此時(shí) ZooKeeper 會(huì)通知備節(jié)點(diǎn)的 ZKFC。當(dāng)備節(jié)點(diǎn)的 ZKFC 接收該通知時(shí),就會(huì)開始做故障自動(dòng)轉(zhuǎn)移的工作。


        ? ? ? ? 一般主發(fā)生故障會(huì)有幾種情況。首先,主 NameNode 服務(wù)掛了,這時(shí)它對(duì)應(yīng)的 ZKFC 會(huì)主動(dòng)刪除 ZooKeeper 中的鎖;第二種情況是,主 NameNode 對(duì)應(yīng)的 ZKFC 掛了(但是 NameNode 健在),那么它在 ZooKeeper 中創(chuàng)建的臨時(shí)節(jié)點(diǎn)也會(huì)被刪除;還有第三種情況是,主 NameNode 所在的主機(jī)斷網(wǎng)了。


        ? ? ? ? 上面說了產(chǎn)生故障的可能性,那么來說下一故障轉(zhuǎn)移的大體流程。首先來說,主 NameNode 服務(wù)掛掉后的故障轉(zhuǎn)移,大致流程如下:

        ? ? ? ? 首先,主節(jié)點(diǎn)對(duì)應(yīng)的 ZKFC 發(fā)現(xiàn)主 NameNode 服務(wù)掛掉了,那么它會(huì)主動(dòng)去 ZooKeeper 中刪除鎖。然后,節(jié)點(diǎn)對(duì)應(yīng)的 ZKFC 收到通知后會(huì)去創(chuàng)建鎖;接著,備節(jié)點(diǎn)的 ZKFC 會(huì)去看一下主節(jié)點(diǎn)的 NameNode,此時(shí)發(fā)現(xiàn)主節(jié)點(diǎn)的 NameNode 已經(jīng)不活著了;最后,備節(jié)點(diǎn)的 ZKFC 會(huì)把備節(jié)點(diǎn)的 NameNode 提升為主節(jié)點(diǎn)。


        ? ? ? ??第二種情況是,主節(jié)點(diǎn)的 NameNode 服務(wù)還存在,但是它對(duì)應(yīng)的 ZFKC 進(jìn)程掛掉了。當(dāng) ZKFC 進(jìn)程掛掉后,它在 ZooKeeper 中創(chuàng)建的臨時(shí)節(jié)點(diǎn)會(huì)自動(dòng)刪除。然后,備節(jié)點(diǎn)對(duì)應(yīng)的 ZKFC 收到通知還是去會(huì)爭(zhēng)搶鎖;接著,它會(huì)去看看主節(jié)點(diǎn)的 NameNode,發(fā)現(xiàn)主節(jié)點(diǎn)的 NameNode 還在,此時(shí)它會(huì)讓主節(jié)點(diǎn)的 NameNode 降級(jí)成為從節(jié)點(diǎn);最后,會(huì)把原來的備節(jié)點(diǎn)的 NameNode 提升為主節(jié)點(diǎn)。


        總結(jié)

        ? ? ? ? 通過三篇文章,整列了關(guān)于 HDFS 的幾個(gè)技術(shù)點(diǎn),分別是 HDFS 元數(shù)據(jù)的持久化,HDFS 主備節(jié)點(diǎn)之間如何完成數(shù)據(jù)一致性,還有本篇文章整理的 ZKFC 完成故障自動(dòng)轉(zhuǎn)移。三篇文章均沒有涉及任何配置、命令和原理。只是講其中的思想、流程等進(jìn)行了介紹。

        ? ? ? ? 通過幾篇文章,聯(lián)系自己已有的一些技術(shù)知識(shí)會(huì)發(fā)現(xiàn),很多技術(shù)都是相通的。比如 HDFS 元數(shù)據(jù)的持久化是通過 FsImage 和 EditsLog 來完成的,而 FsImage 和 EditsLog 的原理和 Redis 的 RDB 和 AOF 又非常相似。而 JournalNode 完成數(shù)據(jù)的最終一致性,其實(shí)對(duì)于其他技術(shù)中主備完成數(shù)據(jù)一致性來說也是相似的。

        ? ? ? ? 很多 API 的使用,基本可能是學(xué)一個(gè)會(huì)一個(gè),而原理則可能是一通百通。把知識(shí)的相關(guān)性不斷的聯(lián)系起來,可能解決問題,學(xué)習(xí)新知識(shí)就會(huì)越來越快了。

        公眾號(hào)內(nèi)回復(fù)?【mongo】 下載 SpringBoot 整合操作 MongoDB 的文檔。


        ? ? ? ? 之前整理的關(guān)于 Redis 的文章:

        Redis | Redis 的安裝

        Redis | Redis 的幫助命令

        Redis | Redis 命令分類

        Redis | Redis 通用命令

        Redis | Redis 字符串相關(guān)命令

        Redis | Redis 列表相關(guān)命令

        Redis | Redis 集合相關(guān)命令

        Redis | Redis 有序集合相關(guān)命令

        Redis | Redis 哈希相關(guān)命令

        Redis | 源碼閱讀 —— 字符串

        Redis | 源碼閱讀 —— 鏈表

        Redis | Redis Pub/Sub相關(guān)命令

        Redis | 管道 —— PipeLine

        Redis | SpringBoot整合Redis

        Redis | Redis 的事務(wù)一

        Redis | Redis 的事務(wù)二

        Redis | 基礎(chǔ)數(shù)據(jù)類型應(yīng)用場(chǎng)景

        Redis | 事務(wù)源碼閱讀

        Redis | 事物源碼閱讀 —— watch

        Redis | 慢查詢

        Redis | 給接口添加緩存

        Redis | Redis 也會(huì)算距離



        瀏覽 53
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            学生妹一级毛片 | 大吊日逼 | 巨乳巨乳の少妇あジed2k | 农村妇女亂伦91熟妇 | 做爱网络视频在线看网站免费 | 一级a性色生活久久无 | 把她操舒服了 | 操逼啊啊啊 | 久久偷看各类wc女厕嘘嘘偷窃 | 阿娇囗交13分钟全套高清视频 |