HDFS高可靠性分布式儲存系統解決方案

2021-07-04 07:22:52 字數 3127 閱讀 5540

1. hdfs 簡介

hdfs,為hadoop這個分布式計算框架提供高效能、高可靠、高可擴充套件的儲存服務。hdfs的系統架構是典型的主/從?架構,早期的架構包括乙個主節點namenode和多個從節點datanode。namenode是整個檔案系統的管理節點,也是hdfs中最複雜的乙個實體,它維護著hdfs檔案系統中最重要的兩個關係:

(1).hdfs檔案系統中的檔案目錄樹,以及檔案的資料塊索引,即每個檔案對應的資料塊列表。

(2).資料塊和資料節點的對應關係,即某一塊資料塊儲存在哪些資料節點的資訊。

其中,第乙個關係即目錄樹、元資料和資料塊的索引資訊會持久化到物理儲存中,實現是儲存在命名空間的映象fsimage和編輯日誌edits中。而第二個關係是在namenode啟動後,有datanode主動上報它所儲存的資料塊,動態建立對應關係。

在上述關係的基礎上,namenode管理著datanode,通過接收datanode的註冊、心跳、資料塊提交等資訊的上報,並且在心跳中傳送資料塊複製、刪除、恢復等指令;同時,namenode還為客戶端對檔案系統目錄樹的操作和對檔案資料讀寫、對hdfs系統進行管理提供支援。

datanode提供真實檔案資料的儲存服務。它以資料塊的方式在本地的linux檔案系統上儲存了hdfs檔案的內容,並且對外提供檔案資料的訪問功能。客戶端在讀寫檔案時,必須通過namenode提供的資訊,進一步和datanode進行互動;同時,datanode還必須接namenode的管理,執行namenode的指令,並且上報namenode感興趣的事件,以保證檔案系統穩定,可靠,高效的執行。架構圖如下:

圖1 hdfs體系結構

在hdfs集群中namenode存在單點故障(spof)。對於只有乙個namenode的集群,如果namenode機器出現故障,那麼整個集群將無法使用,直到namenode重新啟動。

namenode主要在以下兩個方面影響hdfs集群:

(1).namenode機器發生意外,比如宕機,集群將無法使用,直到管理員重啟namenode

(2).namenode機器需要公升級,包括軟體、硬體公升級,此時集群也將無法使用

hdfs的ha功能通過配置active/standby兩個namenodes實現在集群中對namenode的熱備來解決上述問題。如果出現故障,如機器崩潰或機器需要公升級維護,這時可通過此種方式將namenode很快的切換到另外一台機器。

2.hdfs可靠性

為了保障hdfs的高可靠性。hdfs有如下5個特性。

(1)冷備機制

hdfs中secondary namenode對namenode中元資料提供了冷備方案 secondary namenode將na—menode的fsimage與edit log從namenode複製到臨時目錄,將fsitnage同edit log合併,並產生新的fsimage並把產生的新的isirnage上傳給namenode ,最後清除namenode中的edit log

(2)租約機制

namenode在開啟或建立乙個檔案,準備追加寫之前,會與此客戶端簽訂乙份租約。客戶端會定時輪詢續簽租約。namenode始終在輪詢檢查所有租約,檢視是否有到期未續的租約。如果一切正常,該客戶端完成寫操作,會關閉檔案,停止租約,一旦有所意外,比如檔案被刪除了,客戶端宕機了,當超過租約期限時,namenode就會剝奪此租約,將這個檔案的享用權,分配給他人。如此,來避免由於客戶端停機帶來的資源被長期霸佔的問題。

(3)資料的正確性與一致性

在hdfs中,為了保證資料的正確性和同乙份資料的一致性,做了大量的工作。首先,每乙個資料塊,都有乙個版本標識,一旦資料塊上的資料有所變化,此版本號將向前增加。在namenode上,儲存有此時每個資料塊的版本,一旦出現資料伺服器上相關資料塊版本與其不一致,將會觸發相關的恢復流程。這樣的機制保證了各個資料伺服器器上的資料塊,在基本大方向上都是一致的。但是,由於網路的複雜性,簡單的版本資訊無法保證具體內容的一致性。因此,為了保證資料內容上的一致,必須要依照內容,給出簽名。

當客戶端向資料伺服器追加寫人資料報時,每乙個資料報的資料,都會切分成512位元組大小的段,作為簽名驗證的基本單位,在hdfs中,把這個資料段稱為chunk,即傳輸塊。在每乙個資料報中,都包含若干個傳輸塊以及每乙個傳輸塊的簽名,一旦發現當前的傳輸塊簽名與在客戶端中的簽名不一致,整個資料報的寫人被視為無效。

(4)系統公升級回滾

當公升級某個集群的hadoop的時候,正如任何軟體的公升級一樣,可能會引人新的bug或者不相容的修改導致現有的應用出現過去沒有發現的問題。在所有重要的hdfs安裝應用中,是不允許出現因丟失任何資料需要從零開始重啟hdfs的情況。hdfs允許管理員恢復到hadoop的早期版本,並且將集群的狀態回滾到公升級前。

圖2 系統公升級回滾

如圖2所示,公升級時,namenode會將新的版本號,通過datanode的登入應答返回。datanode收到以後,會將當前的資料塊檔案目錄改名,從curren,改名為previous.tmp ,建立乙個snapshot,然後重建current目錄。重建包括重建version檔案,重建對應的子目錄,然後建立資料塊檔案和資料塊元資料檔案到previous.tmp的硬連線。建立硬連線意味著在系統中只保留乙份資料塊檔案和資料塊元資料檔案,current和previous.tmp中的相應檔案,在儲存中,只保留乙份。當所有的這些工作完成以後,會在current裡寫人新的ver-sion檔案,並將previous.tmp目錄改名為previous,完成公升級。

回滾相對簡單,因為所有的舊版本資訊都儲存在previou、目錄裡。回滾首先將current目錄改名為re-moved.tmp,然後將previous目錄改名為current,最後刪除removed.tmp目錄。

提交的過程,就是將上面的previous目錄改名為finalized.tmp,然後啟動乙個執行緒,將該目錄刪除。

(5)安全模式

在啟動的時候,名字節點進入乙個特殊的狀態叫做安全模式。安全模式是不發生檔案塊的複製的。nn接受來自dn的心跳和塊報告。乙個塊報告包括的是dn向nn報告資料塊的列表。

HDFS高可靠性分布式儲存系統解決方案

1.hdfs 簡介 hdfs,為hadoop這個分布式計算框架提供高效能 高可靠 高可擴充套件的儲存服務。hdfs的系統架構是典型的主 從?架構,早期的架構包括乙個主節點namenode和多個從節點datanode。namenode是整個檔案系統的管理節點,也是hdfs中最複雜的乙個實體,它維護著h...

分布式儲存系統可靠性如何估算?

本文由網易雲 發布常規情況下,我們一般使用多副本技術來提高儲存系統的可靠性,無論是結構化資料庫儲存 如典型的 mysql 文件型 nosql 資料庫儲存 mongodb 或者是常規的 blob 儲存系統 gfs hadoop 等,無不如此。因為資料幾乎可以稱得上是企業生命力的核心,保障資料儲存系統的...

分布式儲存系統可靠性如何估算?

本文由 網易雲 發布。常規情況下,我們一般使用多副本技術來提高儲存系統的可靠性,無論是結構化資料庫儲存 如典型的 mysql 文件型 nosql 資料庫儲存 mongodb 或者是常規的 blob 儲存系統 gfs hadoop 等,無不如此。因為資料幾乎可以稱得上是企業生命力的核心,保障資料儲存系...