小議分布式文件系統(tǒng)設計與實現(xiàn)

時間:2022-11-26 04:51:00

導語:小議分布式文件系統(tǒng)設計與實現(xiàn)一文來源于網友上傳,不代表本站觀點,若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。

小議分布式文件系統(tǒng)設計與實現(xiàn)

1、為了滿足文件存儲的新的要求(大容量、高可靠性、高可用性、高性能、動態(tài)可擴展性、易維護性),設計一種好的分布式文件系統(tǒng)越來越成為需要。分布式文件系統(tǒng)使得分布在多個節(jié)點上的文件如同位于網絡上的一個位置便于動態(tài)擴展和維護。

由于分布式文件系統(tǒng)中的數據可能來自很多不同的節(jié)點,它所管理的數據也可能存儲在不同的節(jié)點上,這使得分布式文件系統(tǒng)中有很多設計和實現(xiàn)與本地文件系統(tǒng)存在巨大的差別。下面主要講述分布式文件系統(tǒng)設計實現(xiàn)中所要面對和解決的主要問題[2]。

2軟件總體結構

設計一個好的分布式文件系統(tǒng)是集群存儲的關鍵。我們設計的分布式文件系統(tǒng)通過統(tǒng)一名字空間管理使得分布在多個服務器上的文件如同位于網絡上的一個位置便于動態(tài)擴展和維護。

我們把整個系統(tǒng)主要劃分客戶端與服務器端兩部分??蛻舳税∕VFS文件系統(tǒng),CC模塊(ClientCache),CNS模塊(ClientNameSpace),CN模塊(ClientNetwork)。服務器端包括SC模塊(ServerCache),SNS模塊(ServerNameSpace),SN模塊(ServerNetwork)。應用程序的I/O請求首先送給MVFS文件系統(tǒng),MVFS文件系統(tǒng)根據文件句柄獲得本文件系統(tǒng)的全局文件名并把對文件的訪問轉換為對CC的訪問。CC收到請求之后,如果在Cache中沒有發(fā)現(xiàn)對應的數據,則將請求發(fā)給CNS層,CNS層根據全局文件名獲得該文件所在的服務器。最終通過CN層將命令發(fā)給服務器。服務器端SN層通過網絡接待命令后,將命令傳遞給SNS層負責將全局文件名轉化成本地的文件名,然后到SC層去查找,如果在Cache中找不到,最終會通過本地的文件系統(tǒng)完成對應的I/O請求。整個系統(tǒng)的總體結構如圖1所示。

在服務器端還有一個全局管理程序(心跳協(xié)議程序)。通過該心跳協(xié)議程序,所有的存儲節(jié)點的所共享出來的文件構成了整個文件系統(tǒng)的單一的全局邏輯樹,從而可以讓客戶端見到唯一確定的全局邏輯樹。

圖1總體結構圖

3關鍵技術

3.1統(tǒng)一名字空間的設計與實現(xiàn)

統(tǒng)一名字空間是指服務器上的每一個目錄和文件在我們的文件系統(tǒng)中都有一個統(tǒng)一的,唯一的名字。要實現(xiàn)統(tǒng)一名字空間就必須將服務器上的本地局部路徑與文件系統(tǒng)中的全局路徑一一對應,所以我們在每一個服務器上都存放了一個本地配置文件來記錄這個映射關系,每個服務器應該根據所有服務器的本地配置文件而形成一個全局配置文件。本地配置文件的第一行主要記錄其版本號。后面的每一行是一條記錄,主要包括共享的全局路徑(客戶端看到的文件或目錄名)及物理路徑(服務器上存放的文件或目錄名)。

而全局配置文件的第一行主要記錄其版本號,服務器個數及每個服務器的IP,后面的每一行是一條記錄,與本地配置文件的記錄相識,只是多了一個服務器IP的信息

當服務器啟動后,首先根據自己的本地配置文件生成一個全局配置文件,然后廣播自己的本地配置文件。當服務器接收到其他服務器的本地配置文件后,會根據這個本地配置文件修改全局配置文件。當全局配置文件中不包括該服務器的信息即第一行沒有該服務器的IP,我們將全局配置文件的版本號改為兩個配置文件中版本號的稍大者,并修改服務器個數,添加服務器的IP及對應的記錄。如果全局配置文件中已包括該服務器的信息且全局配置文件的版本號大則不用修改,否則將全局配置文件的版本號修改成接收文件的版本號,并修改服務器個數,添加服務器的IP及對應的記錄。

當修改了某個服務器的信息后,我們應該將本地配置文件的版本號修改為全局配置文件的版本號加一,然后廣播自己的本地配置文件。

當獲得一個全局配置文件后我們還應將其轉化為一棵目錄文件樹使得在客戶端對一個文件或目錄的操作能夠轉換成對服務器上得操作。

為了方便查找,我們將全局配置文件轉化為一棵二叉樹,以全局配置文件中記錄的全局路徑來建樹。其中樹的根節(jié)點代表者全局路徑的根目錄。樹中節(jié)點的左兒子為其子目錄,右兒子與其在同一級目錄上。

3.2客戶端文件系統(tǒng)的設計與實現(xiàn)

文件系統(tǒng)應該提供一組服務,使用戶能夠處理數據,以執(zhí)行所需要的操作,包括創(chuàng)建文件、刪除文件、組織文件、讀/寫文件、控制文件的訪問權限等。

Linux通過VFS(虛擬文件系統(tǒng))為各種文件系統(tǒng)提供統(tǒng)一的接口。VFS是內核中的一個軟件層次,負責處理所有與文件系統(tǒng)有關的系統(tǒng)調用。我們通過像VFS注冊了一種文件系統(tǒng)MVFS,使得用戶的請求可以由我們提供的函數來處理[3]。

MVFS文件系統(tǒng)中主要包括超級塊,目錄項和索引節(jié)點。MVFS文件系統(tǒng)的總體結構如圖所示。

圖2MVFS文件系統(tǒng)的總體結構

文件系統(tǒng)的超級塊主要記錄文件系統(tǒng)的數據塊大小,存放文件系統(tǒng)設備的設備號以及該文件系統(tǒng)根目錄的目錄項的指針,在MVFS文件系統(tǒng)中,我們在超級塊中還存放了要連接的服務器的IP和使用的用戶名和密碼。MVFS文件系統(tǒng)的目錄項描述文件系統(tǒng)中與某個文件索引節(jié)點相鏈接的一個目錄項(可以是文件,也可以是目錄),同時通過鏈表記錄了父目錄與它下面的子目錄和文件的關系。而索引節(jié)點記錄了關于這個目錄或文件的一些系統(tǒng)信息,比如文件的所有者,文件相關的一些權限記錄,關于文件的若干個時間戳。

要想訪問服務器上的目錄和文件,必須先掛載MVFS文件系統(tǒng)。當掛載MVFS文件系統(tǒng)時,我們的處理流程如圖3所示。

圖3MVFS掛載流程

在初始化超級塊,索引節(jié)點時,需要將它們的成員函數賦值。MVFS文件系統(tǒng)主要通過將一些函數如對目錄的讀取以及對文件的創(chuàng)建和讀寫與它的索引節(jié)點關聯(lián),使得以后對該目錄或文件的操作都由這些函數來實現(xiàn)。

其中對目錄的讀取方法如圖所示:

圖3目錄的讀取流程

首先根據文件句柄獲得對應的目錄項結構,而目錄項結構存放了對應的全局目錄名,因此可以得到對應的全局目錄名。當我們獲得了該目錄下的目錄名或文件名后,可以調用VFS提供的回調函數filldir。VFS會為這些目錄和文件分配目錄項結構,并將它們鏈接起來[4]。

對于文件的讀寫,首先根據文件句柄獲得對應的目錄項結構,從目錄項結構可以得到對應的全局文件名。然后以全局文件名,緩沖區(qū),要讀的大小,文件偏移為參數向CC層發(fā)出讀或寫文件命令。當CC層的函數返回時,要讀或寫的數據已在緩沖區(qū)里。

4性能測試

我們在相同環(huán)境下,客戶端和服務器均為P4PC平臺,配置512MB的DDRRAM,通過千兆網連接,分布采用我們的分布式文件系統(tǒng)和網上鄰居,使用IOMETER對不同負載的讀請求進行測試,具體的測試結果如圖4所示。從圖中可知,我們的分布式文件系統(tǒng)的讀性能要比網上鄰居好的多。

圖4網上鄰居和分布式文件系統(tǒng)的讀性能比較

5結束語

本文詳細介紹了分布式文件系統(tǒng)的設計和實現(xiàn),著重論述了實現(xiàn)過程中采用的關鍵技術。隨著對分布式文件系統(tǒng)的進一步開發(fā),將會對系統(tǒng)的性能、擴展性、可用性等方面進行完善。