-
分佈式文件系統
鎖定
目錄
- ▪ 非集中式拓撲系統的負載均衡
- 6 有關術語
分佈式文件系統簡介
計算機通過文件系統管理、存儲數據,而信息爆炸時代中人們可以獲取的數據成指數倍的增長,單純通過增加硬盤個數來擴展計算機文件系統的存儲容量的方式,在容量大小、容量增長速度、數據備份、數據安全等方面的表現都差強人意。分佈式文件系統可以有效解決數據的存儲和管理難題:將固定於某個地點的某個文件系統,擴展到任意多個地點/多個文件系統,眾多的節點組成一個文件系統網絡。每個節點可以分佈在不同的地點,通過網絡進行節點間的通信和數據傳輸。人們在使用分佈式文件系統時,無需關心數據是存儲在哪個節點上、或者是從哪個節點從獲取的,只需要像使用本地文件系統一樣管理和存儲文件系統中的數據。分佈式文件系統是建立在客户機/服務器技術基礎之上的,一個或多個文件服務器與客户機文件系統協同操作,這樣客户機就能夠訪問由服務器管理的文件。
[2]
分佈式文件系統的發展大體上經歷子三個階段:第一階段是網絡文件系統,第二階段是共享SAN文件系統,第三階段是面向對象的並行文件系統
[3]
。
分佈式文件系統把大量數據分散到不同的節點上存儲,大大減小了數據丟失的風險。分佈式文件系統具有冗餘性,部分節點的故障並不影響整體的正常運行,而且即使出現故障的計算機存儲的數據已經損壞,也可以由其它節點將損壞的數據恢復出來。因此,安全性是分佈式文件系統最主要的特徵。分佈式文件系統通過網絡將大量零散的計算機連接在一起,形成一個巨大的計算機集羣,使各主機均可以充分發揮其價值。此外,集羣之外的計算機只需要經過簡單的配置就可以加入到分佈式文件系統中,具有極強的可擴展能力。
[3]
分佈式文件系統系統分類
分佈式文件系統網絡文件系統
(NFS) 最早由Sun微系統公司作為TCP/IP網上的文件共享系統開發。Sun公司估計大約有超過310萬個系統在運行NFS,大到大型計算機、小至PC機,其中至少有80%的系統是非Sun平台。
[4]
分佈式文件系統Andrew系統
AFS是一種分佈式的文件系統用來共享與獲得在計算機網絡中存放的文件。AFS使得用户獲得網絡文件就像本地機器般方便。AFS文件系統被稱為“分佈式”是因為文件可以分散地存放在很多不同的機器上,但這些文件對於用户而言是可及的,用户可以通過一定的方式得到這些文件
[5]
。
分佈式文件系統KASS系統
KASS File System(簡稱KFS)是開始軟件自主研發基於JAVA的純分佈式文件系統,功能類似於DFS、GFS、Hadoop,通過HTTP WEB為企業的各種信息系統提供底層文件存儲及訪問服務,搭建企業私有云存儲服務平台
[6]
。
分佈式文件系統DFS系統
如果文件的訪問僅限於一個用户,那麼分佈式文件系統就很容易實現。可惜的是,在許多網絡環境中這種限制是不現實的,必須採取併發控制來實現文件的多用户訪問,表現為如下幾個形式
[7]
:
併發寫操作 這種方法允許多個用户同時讀寫一個文件。但這需要操作系統作大量的監控工作以防止文件重寫,並保證用户能夠看到最新信息。這種方法即使實現得很好,許多環境中的處理要求和網絡通信量也可能使它變得不可接受
[7]
。
分佈式文件系統NFS和AFS的區別
NFS和AFS的區別在於對併發寫操作的處理方法上。當一個客户機向服務器請求一個文件(或數據庫記錄),文件被放在客户工作站的高速緩存中,若另一個用户也請求同一文件,則它也會被放入那個客户工作站的高速緩存中。當兩個客户都對文件進行修改時,從技術上而言就存在着該文件的三個版本(每個客户機一個,再加上服務器上的一個)。有兩種方法可以在這些版本之間保持同步
[8]
:
無狀態系統:在這個系統中,服務器並不保存其客户機正在緩存的文件的信息。因此,客户機必須協同服務器定期檢查是否有其他客户改變了自己正在緩存的文件。這種方法在大的環境中會產生額外的LAN通信開銷,但對小型LAN來説,這是一種令人滿意的方法。NFS就是個無狀態系統
[8]
。
回呼(Callback)系統:在這種方法中,服務器記錄它的那些客户機的所作所為,並保留它們正在緩存的文件信息。服務器在一個客户機改變了一個文件時使用一種叫回叫應答(callbackpromise)的技術通知其它客户機。這種方法減少了大量網絡通信。AFS(及OSFDCE的DFS)就是回叫系統。客户機改變文件時,持有這些文件拷貝的其它客户機就被回叫並通知這些改變
[8]
。
無狀態操作在運行性能上有其長處,但AFS通過保證不會被回叫應答充斥也達到了這一點。方法是在一定時間後取消回叫。客户機檢查回叫應答中的時間期限以保證回叫應答是當前有效的。回叫應答的另一個有趣的特徵是向用户保證了文件的當前有效性。換句話説,若一個被緩存的文件有一個回叫應答,則客户機就認為文件是當前有效的,除非服務器呼叫指出服務器上的該文件已改變了
[8]
。
分佈式文件系統網絡文件系統
網絡文件系統(Network File System,NFS)是個分佈式的客户機/服務器文件系統。NFS的實質在於用户間計算機的共享。用户可以聯結到共享計算機並像訪問本地硬盤一樣訪問共享計算機上的文件。管理員可以建立遠程系統上文件的訪問,以至於用户感覺不到他們是在訪問遠程文件。NFS是個到處可用和廣泛實現的開放式系統。
[4]
分佈式文件系統NFS設計目標
允許用户象訪問本地文件一樣訪問其他系統上的文件。提供對無盤工作站的支持以降低網絡開銷
[4]
。
大型計算機、小型計算機和文件服務器運行NFS時,都為多個用户提供了一個文件存儲區。工作站只需要運行TCP/IP協議來訪問這些系統和位於NFS存儲區內的文件。工作站上的NFS通常由TCP/IP軟件支持。對DOS用户,一個遠程NFS文件存儲區看起來是另一個磁盤驅動器盤符。對Macintosh用户,遠程NFS文件存儲區就是一個圖標
[4]
。
分佈式文件系統NFS部分功能
NFS的一個重要組成是虛擬文件系統(VFS),它是應用程序與低層文件系統間的接口
[4]
。
分佈式文件系統VAFS服務器
AFS是專門為在大型分佈式環境中提供可靠的文件服務而設計的。它通過基於單元的結構生成一種可管理的分佈式環境。一個單元是某個獨立區域中文件服務器和客户機系統的集合,這個獨立區域由特定的機構管理。通常代表一個組織的計算資源。用户可以和同一單元中其他用户方便地共享信息,他們也可以和其他單元內的用户共享信息,這取決於那些單元中的機構所授予的訪問權限
[5]
。
文件服務器進程 這個進程響應客户工作站對文件服務的請求,維護目錄結構,監控文件和目錄狀態信息,檢查用户的訪問。
[5]
卷宗服務器進程 此進程處理與卷宗有關的文件系統操作,如卷宗生成、移動、複製、備份和恢復
[5]
。
卷宗定位服務器進程 該進程提供了對文件卷宗的位置透明性。即使卷宗被移動了,用户也能訪問它而不需要知道卷宗移動了
[5]
。
AFS還配有一套用於差錯處理,系統備份和AFS分佈式文件系統管理的實用工具程序。例如,SCOUT定期探查和收集AFS文件服務器的信息。信息在給定格式的屏幕上提供給管理員。設置多種閾值向管理者報告一些將發生的問題,如磁盤空間將用完等。另一個工具是USS,可創建基於帶有字段常量模板的用户帳户。Ubik提供數據庫複製和同步服務。一個複製的數據庫是一個其信息放於多個位置的系統以便於本地用户更方便地訪問這些數據信息。同步機制保證所有數據庫的信息是一致的
[5]
。
分佈式文件系統分佈式文件系統 KFS
一個 KFS 集羣包括單個元數據服務器節點和多個Chunk 服務器節點,並由多個客户端來訪問。其中元數據服務器主要用於維護元數據並負責控制垃圾回收、負載均衡等系統活動,Chunk 服務器負責保存數據以及接收處理數據I/O 請求。這兩類節點均運行 Linux 操作系統,需要分別安裝、運行 KFS 提供的元數據服務器和 Chunk 服務器軟件。客户端需要安裝專門的 KFS 客户端庫,由應用程序鏈接使用來訪問 KFS 文件系統。KFS 的所有節點都均採用 X86 架構硬件,並通過以太網方式連接在一起,節點之間採用 TCP協議通訊,使得整個系統具有較高的性價比。
[6]
Chunk 服務器
在KFS中,一個文件被分割成多個Chunk,每個Chunk大小固定為 64MB,所以可以通過簡單的模運算計算出某文件偏移量在該文件第幾個Chunk 的多少偏移量上。每個Chunk 由一個全局唯一的 Chunk 號來標識。Chunk 服務器主要的功能就是保存 Chunk,並對外提供創建、刪除、讀寫Chunk 的訪問接口。一個 Chunk 默認被複製成3份,保存在3個不同的 Chunk 服務器中,客户端可以為每個文件指定不同的副本個數。三副本就保證了在兩個 Chunk 服務器故障的情況下,仍能從第三個 Chunk 服務器上的副本讀出數據,提高了系統的可靠性。在 Chunk 數據寫入時,若某個 Chunk 服務器突然故障,會導致的相應副本更新失敗,進而影響 Chunk 各副本數據的一致性。為了解決這個問題,KFS為每個 Chunk 副本分配一個版本號,副本每被更新一次則版本號上升,這樣就可以通過比較版本號來發現過期的副本。Chunk 服務器中,單個 Chunk 由一個文件來表示,這些Chunk 文件被保存在本地的文件系統中,文件系統可以是XFS、Ext3/4 等。每個 Chunk 文件除了保存數據外,其頭部還保存了 16KB 大小的校驗和信息:寫數據時,為每個64K數據塊計算一個32 位校驗和(Adler-32 算法),保存至 Chunk文件頭部;讀數據時,首先驗證讀出數據的校驗和,這就保證了本地磁盤保存數據時可能發生的數據損壞可以被檢查出來。
[6]
Chunk 文件在本地文件系統的文件名命名規則為:文件號.Chunk 號.版本號。Chunk 服務器啓動時通過掃描存放Chunk 文件的目錄,就可獲知自己擁有哪些 Chunk,然後把該信息提交給元數據服務器。元數據服務器在驗證 Chunk信息後,會告知 Chunk 服務器哪些 Chunk 已經過期(版本號過期或屬於已被刪除的文件),Chunk 服務器便可以刪除這些 Chunk。
[6]
(1) 目錄項信息:KFS 採用傳統的目錄結構命名空間,目錄樹中的所有節點(文件和目錄),均由一個全局唯一的文件號來標識,根目錄的文件號固定為 2,目錄項信息指的是目錄樹中各目錄所包含的各目錄項(可以是子目錄或文件)的名稱及文件 ID
[6]
;
客户端
KFS 的客户端庫向應用程序開發者提供了 create、read、write、mkdir、rmdir 等類似 POSIX 語義的編程接口,支持的編程語言有 C++、Python、Java。客户端庫通過與元數據服務器及 Chunk 服務器交互,完成對文件系統中文件的修改、訪問等操作。此外,客户端還支持 FUSE(File system in Userspace),使得傳統文件系統工具(如 ls 命令)也可以訪問 KFS 文件系統,提高了系統的互操作性。
[6]
為了減少與元數據服務器的交互次數,客户端會緩存元數據信息。此外,KFS 的客户端還會對讀取、寫入的數據進行緩存,這就存在緩存一致性的問題,KFS 採用讀寫租約(Lease)解決了這個問題,所有的租約由元數據服務器統一管理,每個租約有 300 秒的時限,過期作廢。讀寫租約的具體方式是:
[6]
(1) 寫租約:當需要向 Chunk 寫入數據時,對應的主Chunk 服務器首先查看是否擁有該 Chunk 的寫租約,如果沒有或已過期則嘗試向元數據服務器獲取或更新寫租約,如果該 Chunk 正在被複制到其他 Chunk 服務器或者已經分配寫租約或讀租約,則返回失敗,否則返回成功並且 Chunk 的版本號增一;
[6]
(2) 讀租約:在客户端需要讀取某個Chunk的數據時,它首先嚐試去獲取這個 Chunk 的讀租約,如果該 Chunk 沒有分配寫租約而且數據已全部寫入磁盤,則返回成功,否則返回失敗。讀寫租約保證了一個 Chunk 同時只能由一個客户端寫入,而且一個或多個客户端在讀取某 Chunk 數據時,該Chunk 數據不會被修改,這樣客户端就能夠把讀取的數據緩存在本地,因為緩存中的數據與 Chunk 服務器上保存的數據一定是一致的。
[6]
分佈式文件系統分佈式系統負載均衡策略
在分佈式系統中通常有數量巨大的服務器節點,由於客户端在訪問服務器節點的時候具有隨機性,這就必然會導致部分主機在某些時刻成為熱點,對整個分佈式系統的性能產生了制約。與此同時,部分服務器節點的負載卻遠遠沒有達到額定值,從而造成資源浪費。顯然,在分佈式文件系統中進行負載均衡控制是十分必要的。在軟件工程中,網站訪問流量的分配、數據庫訪問的重定向等都是負載均衡應用的典型場景。通過負載均衡技術的應用,可以實現分佈式系統中所有節點的負載相對平衡,既保證了系統的性能,又充分利用了資源。負載均衡意味着節點之間需要進行數據遷移,因此負載均衡本身需要有一定的開銷,所以通常要求負載均衡算法具有較高的效率
[3]
。
分佈式文件系統是以數據服務器為核心的存儲系統,根據數據服務器在形式上是否具有中心節點,一般將其分為集中式和非集中式兩大類拓撲結構,其中前者是以某台服務器作為中心節點進行分佈式組網,而後者則不需要中心節點服務器。之所以要這樣區分,是因為中心節點的存在與否,對負載均衡策略的制定有重要影響。
[3]
分佈式文件系統集中式拓撲系統的負載均衡
對於集中式的分佈式文件系統,其中心節點就是對數據分發起到主要控制作用的節點,又稱為主控節點。在現有的分佈式文件存儲系統中,GFS和HDFS就是最典型的有中心節點分佈式文件系統,下面以HDFS為例進行分析。HDFS採用了機架分配機制實現分佈式存儲和負載的平衡,其主要實現思路如下
[3]
:
不難看出,這種負載均衡策略不僅可以保證數據的安全,還保證了數據的可用性,在系統的可靠性和讀寫性能上也有很大的優勢。通過該策略,可以實現各節點的負載動態平衡。但這種策略也並非十全十美,在整個集羣進行大規模橫向擴展時,將對Name Node節點的性能提出巨大的挑戰,因此對於後期需要大規模擴展的系統而言是有一定的侷限性的。
[3]
分佈式文件系統非集中式拓撲系統的負載均衡
與集中式的分佈式文件系統不同,非集中式的分佈式文件系統不存在一個用於分配數據的主控節點,集羣中的每個節點都是相互平行的。P2P網絡就是一種典型的無中心節點分佈式文件系統,因此又被稱為對等網絡。網絡中的任意一個節點都具有同等的作用,可以向其它節點發起連接。其負載均衡策略如下
[3]
:
(2)然而,隨着系 統運行時間的不斷增加,各節點的負載會慢慢失衡,導致負載向某些節點集中,從而出現高負載節點和低負載節點。每個節點都會定時計算自己的負載狀態,如果發現自己是低負載節點,則開始對網絡中的所有節點進行掃描;
[3]
(6)取出負載最低的節點,對其進行數據遷移,完成一輪負載平衡,如此反覆進行,實現集羣的動態負載平衡。Napster是最早的P2P系統之一,但它有一個索引服務器,本質上還不是真正的P2P系統,不適合大型網絡應用。基於Gnutella的網絡拋棄了索引服務器,實現了所有機器的對等關係,但又帶來了較大的帶寬消耗
[3]
。Tapestry,Pastry,Chord和CAN等基於DHT的網絡的出現,系統的可擴展性和精確發現性。為了改善DHT系統在維護機制上的複雜性,當前廣泛採用KaZaa等P2P文件共享系統,軟件,通過超級結點的引入,解決了傳統分佈式網絡的諸多問題
[3]
。
分佈式文件系統有關術語
DFS根(DFS root):在DFS拓撲的最頂層共享,它是組成整個的DFS共享文件的開始點。DFS根能為基於域的操作系統在域一級定義。基於域的DFS可在域中有多個根,但在一個服務器上只能有一個根
[1]
。
根副本(root replica):服務器複製一個DFS根,以提供更好的有效性。保存DFS根的服務器承擔為共享文件夾向客户分發引用的任務。如果服務器不可用,並且創建有根副本,則可以通過根副本所在服務器訪問DFS空間。
[1]
複製策略(replication policy):域DFS的鏈接建立後,就可以為其創建副本。為了使原文件和副本之間保持同步,需要配置複製策略。基於域的DFS根目錄或者子目錄都支持複製。一個獨立的DFS不支持複製
[1]
。
- 參考資料
-
- 1. 王雪濤,劉偉杰.分佈式文件系統[J].科技信息(學術研究),2006(11):406-407. .知網[引用日期2020-05-27]
- 2. 應朝暉,高洪奎,黃若衡.分佈式文件系統[J].計算機工程與科學,1995(03):26-38. .知網[引用日期2020-05-27]
- 3. 肖蓉.分佈式文件系統負載均衡技術探討[J].電子世界,2020(09):51-52. .知網[引用日期2020-05-27]
- 4. 唐一之. 分佈式網絡文件系統(DNFS)研究與實現[D].湖南大學,2002. .知網[引用日期2020-05-27]
- 5. 吳昊. AFS分佈式文件系統中智能監督服務的設計與實現[D].南京理工大學,2007. .知網[引用日期2020-05-27]
- 6. 張軼彬,李小勇.分佈式文件系統KFS的架構與性能分析[J].微型電腦應用,2011,27(12):1-4+69. .知網[引用日期2020-05-27]
- 7. 姜巍巍.淺析分佈式文件系統DFS[J].遼寧廣播電視大學學報,2008,(3):54,56. DOI:10.3969/j.issn.1007-421X.2008.03.028. .萬方[引用日期2020-05-27]
- 8. 姚毓才,張琳娜.淺析分佈式文件系統原理及改進[J].銅陵學院學報,2008,7(06):79-80. .知網[引用日期2020-05-27]