hadoop(二):hdfs HA原理及配置

来源:http://www.cnblogs.com/tgzhu/archive/2016/08/21/5790565.html
-Advertisement-
Play Games

早期的hadoop版本,NN是HDFS集群的單點故障點,每一個集群只有一個NN,如果這個機器或進程不可用,整個集群就無法使用。為瞭解決這個問題,出現了一堆針對HDFS HA的解決方案(如:Linux HA, VMware FT, shared NAS+NFS, BookKeeper, QJM/Quo ...


     早期的hadoop版本,NN是HDFS集群的單點故障點,每一個集群只有一個NN,如果這個機器或進程不可用,整個集群就無法使用。為瞭解決這個問題,出現了一堆針對HDFS HA的解決方案(如:Linux HA, VMware FT, shared NAS+NFS, BookKeeper, QJM/Quorum Journal Manager, BackupNode等); 在HA具體實現方法不同的情況下,HA框架的流程是一致的, 不一致的就是如何存儲和管理日誌。在Active NN和Standby NN之間要有個共用的存儲日誌的地方,Active NN把EditLog寫到這個共用的存儲日誌的地方,Standby NN去讀取日誌然後執行,這樣Active和Standby NN記憶體中的HDFS元數據保持著同步。一旦發生主從切換Standby NN可以儘快接管Active NN的工作; 在 HDP2.4安裝(五):集群及組件安裝 章節使用ambari創建cluster時,預設並未啟用 hdfs ha, 可以通過 ambari 管理界面進行安裝

目錄:

  • SPOF(single point of failure)方案回顧
  • hadoop2.x ha 原理
  • hadoop2.x ha 詳述
  • hadoop2.x Federation
  • ha 安裝配置

SPOF方案回顧:


  1. Secondary NameNode:它不是HA,它只是階段性的合併edits和fsimage,以縮短集群啟動的時間。當NN失效的時候,Secondary NN並無法立刻提供服務,Secondary NN甚至無法保證數據完整性:如果NN數據丟失的話,在上一次合併後的文件系統的改動會丟失
  2. Backup NameNode (HADOOP-4539):它在記憶體中複製了NN的當前狀態,算是Warm Standby,可也就僅限於此,並沒有failover等。它同樣是階段性的做checkpoint,也無法保證數據完整性
  3. 手動把name.dir指向NFS(Network File System),這是安全的Cold Standby,可以保證元數據不丟失,但集群的恢復則完全靠手動
  4. Facebook AvatarNode:Facebook有強大的運維做後盾,所以Avatarnode只是Hot Standby,並沒有自動切換,當主NN失效的時候,需要管理員確認,然後手動把對外提供服務的虛擬IP映射到Standby NN,這樣做的好處是確保不會發生腦裂的場景。其某些設計思想和Hadoop 2.0里的HA非常相似,從時間上來看,Hadoop 2.0應該是借鑒了Facebook的做法
    • Facebook AvatarNode 原理示例圖
    • PrimaryNN與StandbyNN之間通過NFS來共用FsEdits、FsImage文件,這樣主備NN之間就擁有了一致的目錄樹和block信息;而block的位置信息,可以根據DN向兩個NN上報的信息過程中構建起來。這樣再輔以虛IP,可以較好達到主備NN快速熱切的目的。但是顯然,這裡的NFS又引入了新的SPOF
    • 在主備NN共用元數據的過程中,也有方案通過主NN將FsEdits的內容通過與備NN建立的網路IO流,實時寫入備NN,並且保證整個過程的原子性。這種方案,解決了NFS共用元數據引入的SPOF,但是主備NN之間的網路連接又會成為新的問題

hadoop2.X ha 原理:


  • hadoop2.x之後,Clouera提出了QJM/Qurom Journal Manager,這是一個基於Paxos演算法實現的HDFS HA方案,它給出了一種較好的解決思路和方案,示意圖如下:
  • 基本原理就是用2N+1台 JN 存儲EditLog,每次寫數據操作有大多數(>=N+1)返回成功時即認為該次寫成功,數據不會丟失了。當然這個演算法所能容忍的是最多有N台機器掛掉,如果多於N台掛掉,這個演算法就失效了。這個原理是基於Paxos演算法
  • 在HA架構裡面SecondaryNameNode這個冷備角色已經不存在了,為了保持standby NN時時的與主Active NN的元數據保持一致,他們之間交互通過一系列守護的輕量級進程JournalNode
  • 任何修改操作在 Active NN上執行時,JN進程同時也會記錄修改log到至少半數以上的JN中,這時 Standby NN 監測到JN 裡面的同步log發生變化了會讀取 JN 裡面的修改log,然後同步到自己的的目錄鏡像樹裡面,如下圖:
  • 當發生故障時,Active的 NN 掛掉後,Standby NN 會在它成為Active NN 前,讀取所有的JN裡面的修改日誌,這樣就能高可靠的保證與掛掉的NN的目錄鏡像樹一致,然後無縫的接替它的職責,維護來自客戶端請求,從而達到一個高可用的目的
  • QJM方式來實現HA的主要優勢:
    1. 不需要配置額外的高共用存儲,降低了複雜度和維護成本
    2. 消除spof
    3. 系統魯棒性(Robust:健壯)的程度是可配置
    4. JN不會因為其中一臺的延遲而影響整體的延遲,而且也不會因為JN的數量增多而影響性能(因為NN向JN發送日誌是並行的)

hadoop2.x ha 詳述


  • datanode的fencing: 確保只有一個NN能命令DN。HDFS-1972中詳細描述了DN如何實現fencing
    1. 每個NN改變狀態的時候,向DN發送自己的狀態和一個序列號
    2. DN在運行過程中維護此序列號,當failover時,新的NN在返回DN心跳時會返回自己的active狀態和一個更大的序列號。DN接收到這個返回則認為該NN為新的active
    3. 如果這時原來的active NN恢復,返回給DN的心跳信息包含active狀態和原來的序列號,這時DN就會拒絕這個NN的命令
  • 客戶端fencing:確保只有一個NN能響應客戶端請求,讓訪問standby nn的客戶端直接失敗。在RPC層封裝了一層,通過FailoverProxyProvider以重試的方式連接NN。通過若幹次連接一個NN失敗後嘗試連接新的NN,對客戶端的影響是重試的時候增加一定的延遲。客戶端可以設置重試此時和時間
  • Hadoop提供了ZKFailoverController角色,部署在每個NameNode的節點上,作為一個deamon進程, 簡稱zkfc,示例圖如下:
  • FailoverController主要包括三個組件:
    1. HealthMonitor: 監控NameNode是否處於unavailable或unhealthy狀態。當前通過RPC調用NN相應的方法完成
    2. ActiveStandbyElector: 管理和監控自己在ZK中的狀態
    3. ZKFailoverController 它訂閱HealthMonitor 和ActiveStandbyElector 的事件,並管理NameNode的狀態
  • ZKFailoverController主要職責:
    1. 健康監測:周期性的向它監控的NN發送健康探測命令,從而來確定某個NameNode是否處於健康狀態,如果機器宕機,心跳失敗,那麼zkfc就會標記它處於一個不健康的狀態
    2. 會話管理:如果NN是健康的,zkfc就會在zookeeper中保持一個打開的會話,如果NameNode同時還是Active狀態的,那麼zkfc還會在Zookeeper中占有一個類型為短暫類型的znode,當這個NN掛掉時,這個znode將會被刪除,然後備用的NN,將會得到這把鎖,升級為主NN,同時標記狀態為Active
    3. 當宕機的NN新啟動時,它會再次註冊zookeper,發現已經有znode鎖了,便會自動變為Standby狀態,如此往複迴圈,保證高可靠,需要註意,目前僅僅支持最多配置2個NN
    4. master選舉:如上所述,通過在zookeeper中維持一個短暫類型的znode,來實現搶占式的鎖機制,從而判斷那個NameNode為Active狀態

 

hadoop2.x Federation


  • 單Active NN的架構使得HDFS在集群擴展性和性能上都有潛在的問題,當集群大到一定程度後,NN進程使用的記憶體可能會達到上百G,NN成為了性能的瓶頸
  • 常用的估算公式為1G對應1百萬個塊,按預設塊大小計算的話,大概是64T (這個估算比例是有比較大的富裕的,其實,即使是每個文件只有一個塊,所有元數據信息也不會有1KB/block)
  • 為瞭解決這個問題,Hadoop 2.x提供了HDFS Federation, 示意圖如下:
  • 多個NN共用一個集群里的存儲資源,每個NN都可以單獨對外提供服務
  • 每個NN都會定義一個存儲池,有單獨的id,每個DN都為所有存儲池提供存儲
  • DN會按照存儲池id向其對應的NN彙報塊信息,同時,DN會向所有NN彙報本地存儲可用資源情況
  • 如果需要在客戶端方便的訪問若幹個NN上的資源,可以使用客戶端掛載表,把不同的目錄映射到不同的NN,但NN上必須存在相應的目錄
  • 設計優勢:
    1. 改動最小,向前相容;現有的NN無需任何配置改動;如果現有的客戶端只連某台NN的話,代碼和配置也無需改動
    2. 分離命名空間管理和塊存儲管理
    3. 客戶端掛載表:通過路徑自動對應NN、使Federation的配置改動對應用透明
  • 思考:與上面ha方案中介紹的最多2個NN衝突?

ha 安裝配置


  • 關於NameNode高可靠需要配置的文件有core-site.xmlhdfs-site.xml
  • 關於ResourceManager高可靠需要配置的文件有yarn-site.xml    (參數配置及說明見第四章)
  • 操作的過程可通過 ambarir 的管理界面提供的 "enable NameNode HA" 完成,如下圖:
  • 系統要求:至少3台以上zookeeper伺服器,在原來基礎上,將 hdp2\hdp3\R作為zookeeper
  • 停止HBase所有服務,設置JN安裝在host,及standby NN 節點主機,如下圖:
  • 按預設配置安裝的 secondary NN將去被刪除,同時安裝 standby NN, 在 R、hdp1、hdp2上配置 JN服務,如下:
  • 登陸至 active NN (hdp4), 執行下麵的命令
  • 命令: sudo su hdfs -l -c 'hdfs dfsadmin -safemode enter'    (進入安全模式)
  • 命令: sudo su hdfs -l -c 'hdfs dfsadmin -saveNamespace'    (create checkpoint)
  • ambari 檢測到 NN進入安全模式並且checkpoint 後進入組件配置,如圖:
  • 初始化JN節點,進入 hdp4,執行命令:sudo su hdfs -l -c 'hdfs namenode -initializeSharedEdits'
  • ambari檢測到初始化成功後,進入下一步,如圖 start component
  • 手工初始化 NN HA Metadata, 登陸hdp4主機,命令如下:
  • 命令: sudo su hdfs -l -c 'hdfs zkfc -formatZK'
  • 登陸到standy NN (R), 執行命令:
  • 命令: sudo su hdfs -l -c 'hdfs namenode -bootstrapStandby'
  • 成功執行上面命令後,點擊“下一步”,開始HA安裝,成功後如圖:
  • 回到 ambari 面板
  •  

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、前言 從20世紀90年代數字化醫院概念提出到至今的20多年時間,數字化醫院(Digital Hospital)在國內各大醫院飛速的普及推廣發展,並取得驕人成績。不但有數字化醫院管理信息系統(HIS)、影像存檔和通信系統(PACS)、電子病歷系統(EMR)和區域醫療衛生服務(GMIS)等成功實施與 ...
  • 昨天一個pgp加密盤壞了,東西全丟了。。。,我的筆記啊!我咋怎麼2呢。。 備份個腳本吧,方便以後手機查看,話說我都快忘記帳號密碼了 備註:腳步恢復時只能恢復到備份前的狀態,如果需要恢復到當前狀態,還需配合binlog,睡覺就這樣 ...
  • 非同步主從複製 主從部署步驟: 備份還原 使用mysqldump或者xtrabackup 把主庫現有基礎數據還原到從庫 授權 grant replication slave on *.* 給從庫一個複製binlog的賬號 配置複製,並啟動 從庫上配置複製信息,並指向master 查看主從複製信息 sh ...
  • 基於Centos7安裝過程中常用工具及操作技術總結回顧。 操作技巧: tab鍵,命令自動補全 xshell 預設: Ctrl + Insert (複製) Shift + Insert (粘貼) systemctl 服務操作命令: systemctl start postfix.service 動一個 ...
  • 聲明:此文是我學習MongoDB一周以來的經驗總結。一來給自己做一個備份,二來給和我一樣剛接觸MongoDB的小白分享一下,有什麼問題,給位請多擔待。 1、MongoDB安裝及配置 (1)下載: mongodb官網 https://www.mongodb.com/download-center 進入 ...
  • RAID技術 Redundant Array of Independent Disks由獨立的磁碟組成的具有冗餘特性的陣列。有兩個特性:陣列:需要很多磁碟來組成冗餘:允許某塊磁碟損壞之後,數據仍然可用目前,單塊磁碟容量只有幾T,對於現代應用程式來說遠遠不夠。為了提供容量更大的磁碟,發明瞭RAID技術... ...
  • client 向 Active NN 發送寫請求時,NN為這些數據分配DN地址,HDFS文件塊副本的放置對於系統整體的可靠性和性能有關鍵性影響。一個簡單但非優化的副本放置策略是,把副本分別放在不同機架,甚至不同IDC,這樣可以防止整個機架、甚至整個IDC崩潰帶來的錯誤,但是這樣文件寫必須在多個機架之 ...
  • 主從形式 mysql主從複製 靈活 一主一從 主主複製 一主多從 擴展系統讀取的性能,因為讀是在從庫讀取的; 多主一從 5.7開始支持 聯級複製 用途及條件 mysql主從複製用途 實時災備,用於故障切換 讀寫分離,提供查詢服務 備份,避免影響業務 主從部署必要條件: 主庫開啟binlog日誌(設置 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...