專利名稱:面向高性能計算的分布式文件系統元數據管理方法
技術領域:
本發明涉及分布式文件系統體系結構領域,具體涉及一種面向高性能計算的分布式文件系統元數據管理方法。
背景技術:
隨著各種I/O密集型應用的需求和高速網絡的發展,當今高性能計算機集群計算節點的規模已達上萬個,性能亦已達PFlops。底層存儲系統的規模不斷增大,PB級甚至更大規模的系統不斷出現。分布式文件系統中文件的數目可以達到上億個,快速高效的處理成千上萬個客戶端對文件元數據的并發訪問是一個亟需解決的問題。元數據服務器(Metadata Server, MDS)用來管理文件系統的元數據,在存儲系統規模非常大時,一臺MDS會成為整個系統的性能瓶頸,于是人們就把多臺MDS連接在一起,構成元數據服務集群來提升文件系統的元數據處理能力。在文件系統中,文件的元數據用以記錄文件數據對象的存儲位置和訪問控制信息,目錄是包含文件列表信息的文件,用以實現文件系統的目錄層次和權限管理。目前MDS集群中的元數據分布方法,主要可以分為目錄子樹分割方法和散列方法兩大類。目錄子樹分割(SubtreePartitioning)方法是將文件系統的全局目錄層次結構按照目錄子樹劃分,每個MDS負責管理一個或多個目錄子樹,所有的MDS共同維護一個完整的文件系統目錄層次結構。該方法設計簡單,實現難度較小。其主要缺點是負載均衡能力較差。在大量客戶端同時訪問某個目錄下的不同文件這種情況時,容易出現該目錄子樹成為“熱點”的問題,從而導致負責該子樹的MDS成為整個系統的瓶頸。散列方法是將文件的某個特定標識(如文件名,文件路徑名等)進行哈希計算,每個MDS負責一段哈希值范圍內的文件元數據。該方法的優點是能夠較好的將同一目錄下不同文件的元數據均勻的映射到各個MDS上,具有良好的負載均衡性。其缺點是每個MDS需要保存大量的前綴目錄元數據信息,減少了每個MDS用來保存文件元數據的可用內存容量,同時這些目錄元數據信息的一致性維護需要一定的代價。同時,對一個目錄的重命名操作和增減MDS將導致原先文件與MDS之間映射關系被破壞,可能需要遷移重命名目錄下的各個文件和子目錄的元數據。綜上所述,上述現有技術都存在或不能良好處理熱點目錄的訪問問題,或不能有效解決目錄的重命名問題和重迭保存前綴目錄元數據信息帶來的內存利用率和一致性維護問題,嚴重制約了分布式文件系統在高性能計算領域的應用。
發明內容
本發明要解決的技術問題是提供一種存儲性能高、維護開銷小、高負載無瓶頸、擴展性好、負載均衡、能夠有效解決目錄重命名帶來的元數據遷移問題的面向高性能計算的分布式文件系統元數據管理方法。為了解決上述技術問題,本發明采用的技術方案為: 一種面向高性能計算的分布式文件系統元數據管理方法,其實施步驟如下:
I)建立用于管理目錄元數據的目錄元數據服務器集群、用于管理文件元數據的文件元數據服務器集群,建立用于為目錄元數據服務器集群和文件元數據服務器集群提供對象接口數據存儲服務的對象存儲服務器集群;
2 )在所有目錄元數據服務器集群中建立布隆過濾器,所述目錄元數據服務器集群中的目錄元數據服務器之間共享布隆過濾器;
3)在客戶端的操作請求到來時,若操作請求為目錄操作請求時跳轉執行步驟4);若操作請求為文件操作請求時跳轉執行步驟5);
4)所述目錄元數據服務器集群響應客戶端的目錄操作請求對目錄元數據進行管理,為每個目錄分配一個全局唯一標識符,根據布隆過濾器數組記錄來判斷負責目錄請求的目錄元數據服務器,并根據目錄的完整路徑名哈希訪問對象存儲服務器中存儲的目錄元數據;
5)所述文件元數據服務器集群響應客戶端的文件操作請求對文件元數據進行管理,根據請求文件的文件名哈希來判斷負責文件元數據的文件元數據服務器,并根據請求文件的父目錄全局唯一標識符和文件名的哈希訪問對象存儲服務器中存儲的文件元數據。作為本發明上述技術方案的進一步改進:
所述步驟I)建立的對象存儲服務器集群中存儲的目錄元數據結構為:DirId、DirName、ACLf > ACLp> AtFMDS和InodePointer, DirId代表目錄在被創建時生成的全局唯一標識符,DirId的生存周期和目錄本身一樣;DirName代表目錄的完整路徑名;ACLf代表在創建目錄時給目錄賦予的文件權限;ACLp代表目錄的路徑權限,ACLp由目錄自身的文件權限ACLf與父目錄的路徑權限ACLp相與操作得到;AtFMDS代表目錄下文件存放的型別標識,用于判斷目錄下所有文件的文件元數據在文件元數據服務器集群中的分布類型;InodePointer代表目錄層次結構指針,用于指向目錄包含的文件和子目錄構成的樹形結構,所述目錄包含的文件和子目錄構成的B樹通過目錄的全局唯一標識符進行索引;所述步驟I)建立的對象存儲服務器集群中存儲的文件元數據結構包括Dirid、FileName和FileMeta,其中DirId代表文件所在目錄的全局唯一標識符,FileName代表文件的文件名,FileMeta代表包括文件長度、讀寫權限、修改時間和文件數據的布局信息在內的文件具體元數據信息。所述步驟2)建立的布隆過濾器為基于計數的布隆過濾器,所述基于計數的布隆過濾器使用一個m比特的整數數組來保存信息,使用k個獨立的哈希函數將集合中的每一個目錄元素映射到{1,...,ηι}的范圍中,初始化時{1,...,ηι}中的每一位整數都設置為O,每個哈希函數對應一個大小為m/k位的位數組,所述k個位數組構成基于計數的布隆過濾器的布隆過濾器位數組;當目錄元數據服務器添加一個目錄時,所述目錄元數據服務器通過多個哈希函數對添加目錄的完整路徑進行哈希運算得到k個哈希值,將所述k個哈希值在整數數組中對應k個整數位置的整數值分別加I ;當目錄元數據服務器刪除一個目錄時,所述目錄元數據服務器通過多個哈希函數對刪除目錄進行哈希運算得到k個哈希值,將所述k個哈希值在整數數組中對應k個整數位置的整數值分別減I ;當判定目錄元數據服務器是否為負責指定目錄的節點時,通過多個哈希函數對指定目錄進行哈希運算得到的k個哈希值,判斷所述目錄元數據服務器的整數數組中對應k個整數位置的整數值是否都大于0,如果都大于O則判定該目錄元數據服務器為負責指定目錄的節點。
所述步驟4)的詳細步驟如下:
4.1)客戶端判斷目錄操作請求類型,當目錄操作請求為創建目錄時跳轉執行步驟
4.2),當目錄操作請求為查詢目錄元數據時跳轉執行步驟4.3),當目錄操作請求為更新目錄權限時跳轉執行步驟4.4),當目錄操作請求為重命名目錄時跳轉執行步驟4.5),當目錄操作請求為刪除目錄時跳轉執行步驟4.6);
4.2)執行創建目錄:
4.2.1)客戶端從緩存中查找當前目錄的父目錄元數據,如果找到則查詢客戶端是否具有在父目錄下創建目錄的權限,如果沒有權限則返回用戶沒有權限在父目錄下創建目錄的錯誤提示并返回執行步驟3);如果有權限創建或者在緩存中沒有找到父目錄元數據信息,從目錄元數據服務器集群中隨機選擇一個指定節點發送創建目錄請求;
4.2.2)所述指定節點接收到創建目錄請求,首先通過本節點以及其它節點共享的布隆過濾器查找負責當前目錄的父目錄的目標節點,如果本節點不是目標節點,則向目標節點請求父目錄路徑權限,目標節點查詢父目錄路徑權限并返回給所述指定節點;否則本節點直接查詢獲取父目錄路徑權限;
4.2.3)所述指定節點將父目錄路徑權限緩存,判斷所述父目錄路徑權限是否允許客戶端創建目錄,如果不允許則返回出錯信息給客戶端并跳轉執行步驟3);如果允許則指定節點創建目錄,為新建目錄生成一個全局唯一標識符,將目錄操作請求中的指定的文件權限和父目錄路徑權限進行相與操作得到新建目錄的路徑權限,根據全局唯一標識符、目錄操作請求中的攜帶的完整路徑和文件權限、新建目錄的路徑權限生成目錄元數據,并將目錄元數據根據當前目錄的完整路徑哈希將當前目錄的目錄元數據提交到對象存儲服務器進行存儲;
4.2.4)所述指定節點將當前目錄的目錄元數據存入緩存中,并向負責父目錄的目標節點發送更新目錄元數據請求,所述目標節點接收請求并更新父目錄元數據信息;同時,所述指定節點將新創建目錄存入本地的布隆過濾器,并將布隆過濾器的更新項發送給目錄元數據服務器集群中的其它節點進行同步;所述指定節點向客戶端回復目錄創建消息,所述消息包含當前目錄的全局唯一標識符、文件權限、路徑權限和所在的目錄元數據服務器編號;
4.2.5)客戶端將接收到的目錄創建消息加入本地緩存中并向用戶顯示操作結果,跳轉執行步驟3);
4.3)執行查詢目錄元數據:
4.3.1)客戶端首先在本地緩存中查找是否有待當前目錄的目錄元數據信息,如果有則直接返回結果給客戶端,跳轉執行步驟3);否則跳轉執行步驟4.3.2);
4.3.2)客戶端隨機向目錄元數據服務器集群中隨機選擇一個指定節點發送目錄元數據查詢請求;
4.3.3)所述指定節點通過本節點以及其它節點共享的布隆過濾器查找負責當前目錄的目標節點,如果指定節點并非目標節點,則所述指定節點將目錄元數據查詢請求轉發給目標節點,否則所述指定節點即為目標節點;
4.3.4)所述目標節點首先在內存中查找待查詢目錄的目錄元數據信息,如果在內存中查找失敗,則根據當前目錄的完整路徑名哈希獲取對象存儲服務器中存儲的目錄元數據信息,如果查詢目錄元數據請求為目錄列表請求命令,則還通過目錄層次結構指針獲取當前目錄所包含的子目錄和文件信息數據,最終將獲得的操作結果發送給客戶端;
4.3.5)客戶端接收所述目標節點發送的操作結果,將目錄元數據信息加入到緩存中,將目錄操作請求的操作結果返回給用戶端,跳轉執行步驟3);
4.4)執行更新目錄權限:
4.4.1)客戶端首先在本地緩存中查找目錄元數據服務器集群中負責當前目錄的目標節點,如果查找成功,則向目標節點發送更新目錄權限請求,跳轉執行步驟4.4.3),否則向目錄元數據服務器集群中隨機選擇一個指定節點發送更新目錄權限請求,跳轉執行步驟
4.4.2);
4.4.2)所述指定節點通過本節點以及其它節點共享的布隆過濾器查找負責當前目錄的目標節點,如果所述指定節點并非目標節點,則所述指定節點將更新目錄權限請求轉發給目標節點,否則所述指定節點即為目標節點;
4.4.3)所述目標節點修改當前目錄的文件權限和路徑權限,找出當前目錄所包含的子目錄,通過本節點以及其它節點共享的布隆過濾器查找負責待更新目錄下各個子目錄的關聯節點,并向所述關聯節點分別發送更新目錄路徑權限請求;
4.4.4)所述關聯節點通過本節點以及其它節點共享的布隆過濾器查找負責待更新目錄下各個子目錄的下一級關聯節點,并向所述下一級關聯節點分別發送更新目錄路徑權限請求,接收到更新目錄請求的關聯節點分別執行更新目錄的路徑權限,將操作結果返回給所述目標節點;重復執行上述遞歸過程,直到待更新目錄下所有子目錄的路徑權限都更新成功;
4.4.5)所述目標節點接收到各級關聯節點發送來的子目錄的路徑權限更新結果,并將操作結果返回給用戶端;
4.4.6)客戶端接收到所述目標節點發送的操作結果并返回給用戶,跳轉執行步驟3);
4.5)執行重命名目錄:
4.5.1)客戶端首先在本地緩存中查找目錄元數據服務器集群中負責當前目錄的目標節點,如果查找成功,則向目標節點發送重命名目錄請求,進入步驟4.5.3),否則隨機向目錄元數據服務器集群中隨機選擇一個指定節點發送重命名目錄請求,跳轉執行步驟
4.5.2);
4.5.2)所述指定節點通過本節點以及其它節點共享的布隆過濾器查找負責當前目錄的目標節點,如果所述指定節點并非目標節點,則所述指定節點將重命名目錄請求轉發給目標節點,否則所述指定節點即為目標節點;
4.5.3)所述目標節點執行重命名目錄,通過本節點以及其它節點共享的布隆過濾器查找負責當前下各個子目錄的關聯節點,并向所述關聯節點分別發送重命名目錄請求;
4.5.4)所述關聯節點通過本節點以及其它節點共享的布隆過濾器遞歸查找負責當前目錄下各個子目錄的下一級關聯節點,并向所述下一級關聯節點分別發送重命名目錄請求,接收到重命名目錄請求的關聯節點分別執行重命名目錄;重復執行上述遞歸過程,直到待重命名目錄下所有子目錄都重命名成功后,將操作結果返回給所述目標節點;
4.5.5)所述目標節點接收到各級關聯節點發送來的子目錄的重命名目錄結果,并將操作結果返回給用戶端; 4.5.6)客戶端接收到所述目標節點發送的操作結果并將操作結果返回給用戶,跳轉執行步驟3);
4.6)執行刪除目錄:
4.6.1)客戶端首先在本地緩存中查找目錄元數據服務器集群中負責待刪除目錄的目標節點,如果查找成功,則向目標節點發送刪除目錄請求,進入步驟4.6.3),否則隨機向目錄元數據服務器集群中隨機選擇一個指定節點發送刪除目錄請求,跳轉執行步驟4.6.2);
4.6.2)所述指定節點通過本節點以及其它節點共享的布隆過濾器查找負責待刪除目錄的目標節點,如果所述指定節點并非目標節點,則所述指定節點將刪除目錄請求轉發給目標節點,否則所述指定節點即為目標節點;
4.6.3)所述目標節點執行刪除目錄,通過本節點以及其它節點共享的布隆過濾器查找負責當前目錄下各個子目錄的關聯節點,并向所述關聯節點分別發送刪除目錄請求;
4.6.4)所述關聯節點通過本節點以及其它節點共享的布隆過濾器遞歸查找負責待刪除目錄下各個子目錄的下一級關聯節點,并向所述下一級關聯節點分別發送刪除目錄請求,接收到刪除目錄請求的關聯節點執行刪除目錄,將操作結果返回給所述目標節點;重復執行上述遞歸過程,直到當前目錄下所有子目錄都刪除成功;最后,所述目標節點將執行結果返回給用戶端;
4.6.5)客戶端接收到所述目標節點發送的操作結果并返回給用戶,跳轉執行步驟3)。所述步驟5)的詳細步驟如下:
5.1)客戶端判斷文件操作請求類型,當文件操作請求為創建文件時跳轉執行步驟5.2),當文件操作請求為查詢文件元數據時跳轉執行步驟5.3),當文件操作請求為更新文件元數據時跳轉執行步驟5.4),當文件操作請求為重命名文件時跳轉執行步驟5.5),當文件操作請求為刪除文件時跳轉執行步驟5.6);
5.2)執行創建文件:
5.2.1)客戶端首先在本地緩存中查找當前文件父目錄的目錄元數據信息,若找到父目錄的目錄元數據信息,則查詢父目錄權限信息判斷客戶端是否具有創建文件權限,如果客戶端沒有創建文件權限,則返回消息給用戶并跳轉執行步驟3);如果客戶端有創建文件權限則跳轉執行步驟5.2.3);若客戶端沒有找到父目錄的目錄元數據信息,則跳轉執行
4.3)查詢當前文件父目錄的目錄元數據,收到父目錄的目錄元數據信息后返回執行步驟
5.2.2);
5.2.2)客戶端客戶緩存的目錄創建消息中的路徑權限信息判斷當前文件父目錄是否允許客戶端創建文件,如果不允許客戶端創建文件,則返回消息給用戶并跳轉執行步驟3);否則跳轉步驟5.2.3);
5.2.3)根據當前文件的文件名進行哈希,根據哈希值找到在文件元數據服務器集群中所映射的指定節點,發送文件創建請求到所述指定節點,發送的信息包含當前文件完整路徑名、父目錄全局唯一標識符和父目錄所在的目錄元數據服務器編號;
5.2.4)所述指定節點根據文件創建請求生成當前文件的元數據,根據父目錄全局唯一標識符和文件名將當前文件的元數據提交到對象存儲服務器進行存儲;
5.2.5)所述指定節點將當前文件的元數據存入緩存中,然后將文件創建成功消息發送到負責當前文件父目錄的目錄元數據服務器,所述目錄元數據服務器將當前文件父目錄的目錄元數據信息更新至指定的對象存儲服務器;
5.2.6)所述指定節點將創建新文件成功的消息發給客戶端;
5.2.7)客戶端接收到文件創建成功消息,向用戶提示文件創建成功,跳轉執行步驟3);
5.3)執行查詢文件元數據:
5.3.1)客戶端跳轉執行步驟4.3)獲取當前文件父目錄的元數據信息,收到待查詢文件父目錄的元數據信息后返回執行步驟5.3.2);
5.3.2)客戶端將當前文件的文件名進行哈希,在文件元數據服務器集群中根據待查詢文件的哈希值找到負責當前文件的目標節點;
5.3.3)客戶端向所述目標節點發送查詢文件元數據請求,所述查詢文件元數據請求信息包括父目錄全局唯一標識符、待查詢文件的文件名和文件完整路徑;
5.3.4)所述目標節點收到客戶端的查詢文件元數據請求,首先在內存中查找當前文件的文件元數據,如果查找成功則直接跳轉執行步驟5.3.5);如果查找失敗則使用父目錄全局唯一標識符和待查詢文件的文件名,在對象存儲服務器集群中定位存儲所述文件元數據的對象存儲服務器,然后從所述對象存儲服務器中讀取當前文件的文件元數據;
5.3.5)所述目標節點向客戶端發送待查詢文件的文件元數據;
5.3.6)客戶端收到目標節點發送的文件元數據,返回給用戶并跳轉執行步驟3);
5.4)執行更新文件元數據:
5.4.1)客戶端跳轉執行步驟4.3)獲取當前文件父目錄的元數據信息,收到當前文件父目錄的元數據信息后返回執行步驟5.4.2);
5.4.2)客戶端將當前文件的文件名進行哈希,在文件元數據服務器集群中根據待更新文件的哈希值找到負責待更新文件的目標節點;
5.4.3)客戶端向所述目標節點發送更新文件元數據請求,所述查詢文件元數據請求信息包括父目錄全局唯一標識符和新的文件元數據;
5.4.4)所述目標節點收到客戶端的更新文件元數據請求,首先在內存中查找當前文件的文件元數據,如果查找失敗則使用父目錄全局唯一標識符和待更新文件的文件名,在對象存儲服務器集群中定位存儲所述文件元數據的對象存儲服務器,然后從所述對象存儲服務器中讀取文件元數據;獲取更新文件元數據以后,檢查客戶端是否修改權限,如果沒有修改權限則向客戶端返回沒有權限的更新失敗消息,跳轉執行步驟3);如果有修改權限則更新文件元數據并向客戶端發送更新成功消息;
5.4.5)客戶端收到目標節點的發送的消息后返回給用戶,跳轉執行步驟3);
5.5)執行重命名文件:
5.5.1)客戶端跳轉執行步驟4.3)獲取當前文件父目錄的元數據信息,收到待重命名文件父目錄的元數據信息后返回執行步驟5.5.2);
5.5.2)根據當前文件父目錄的元數據信息判斷父目錄下是否有待重命名文件新名稱相同的文件,如果在父目錄下找到相同文件名的文件,則返回存在相同文件名消息給客戶端,跳轉執行步驟3);否則,將待重命名文件的新文件名進行哈希,在文件元數據服務器集群中根據當前文件的哈希值找到負責當前文件的目標節點;
5.5.3)客戶端向所述目標節點發送重命名文件請求,所述查詢文件元數據請求信息包括父目錄全局唯一標識符、舊文件名、新文件名和父目錄所在目錄元數據服務器編號; 5.5.4)所述目標節點接收客戶端發送的重命名文件請求,首先在內存中查找當前文件的文件元數據,如果查找失敗則使用父目錄全局唯一標識符和當前文件的文件名,在對象存儲服務器集群中定位存儲所述文件元數據的對象存儲服務器,然后從所述對象存儲服務器中讀取文件元數據;獲取當前文件的元數據以后,檢查客戶端是否有修改權限,如果沒有修改權限則向客戶端返回沒有權限的重命名失敗消息,跳轉執行步驟3);如果有修改權限,則更新文件元數據,通過新文件名哈希在文件元數據服務器集群中找到負責新文件名的新目標節點,將文件重命名信息和新文件元數據發送給所述新目標節點,所述新目標節點接收并緩存文件重命名信息和新文件元數據,然后將文件重命名信息和新文件元數據提交到存儲到指定的對象存儲服務器;同時所述目標節點向負責父目錄的目錄元數據服務器發送文件重命名請求,負責父目錄的目錄元數據服務器收到文件重命名請求,根據文件重命名請求更新父目錄元數據中對應當前文件的文件名;最后向客戶端發送重命名文件成功消息;
5.5.5)客戶端收到目標節點發送的消息并返回給用戶,跳轉執行步驟3);
5.6)執行刪除文件:
5.6.1)客戶端跳轉執行步驟4.3)獲取當前文件父目錄的元數據信息,收到當前文件父目錄的元數據信息后返回執行步驟5.6.2);
5.6.2)將當前文件的文件名進行哈希,在文件元數據服務器集群中根據當前文件的哈希值找到負責待刪除文件的目標節點;
5.6.3)客戶端向所述目標節點發送刪除文件請求,所述刪除文件請求包含父目錄全局唯一標識符、待刪除文件名和負責父目錄的目錄元數據服務器編號;
5.6.4)所述目標節點接收刪除文件請求,首先在內存中查找當前文件的文件元數據,如果查找失敗則使用父目錄全局唯一標識符和當前文件的文件名,在對象存儲服務器集群中定位存儲所述文件元數據的對象存儲服務器,然后從所述對象存儲服務器中讀取當前文件的文件元數據;最后獲取當前文件的文件元數據以后,檢查客戶端是否刪除權限,如果沒有刪除權限,則向客戶端返回沒有權限的刪除失敗消息,跳轉執行步驟3);如果有刪除權限,則刪除當前文件的元數據,并向父目錄所在的目錄元數據服務器發送刪除文件請求,父目錄所在的目錄元數據服務器收到刪除文件請求,刪除父目錄元數據信息中的該文件的信息;最后向客戶端發送刪除文件成功消息;
5.6.5)客戶端收到目標節點發送的消息并返回給用戶,跳轉執行步驟3)。所述目錄元數據服務器對目錄元數據的修改均通過更新日志定時進行,其詳細步驟如下:首先目錄元數據服務器在需要修改目錄元數據時將對目錄元數據的修改生成更新日志并緩存,然后目錄元數據服務器定時檢查本地緩存的更新日志,然后根據更新日志哈希目標目錄的完整路徑,根據哈希值與對象存儲服務器的映射關系表定位負責目標目錄的對象存儲服務器,并將對目錄元數據的修改提交給負責目標目錄的對象存儲服務器執行對目錄元數據的修改;
所述文件元數據服務器對文件元數據的修改均通過更新日志進行,其詳細步驟如下:首先文件元數據服務器在需要修改文件元數據時將對文件元數據的修改生成更新日志并緩存,然后文件元數據服務器定時檢查本地緩存的更新日志,然后根據更新日志哈希目標文件父目錄的全局唯一標識符和目標文件的文件名,根據哈希值與對象存儲服務器的映射關系表定位負責當前文件的對象存儲服務器,并將對文件元數據的修改提交給負責目標文件的對象存儲服務器執行對文件元數據的修改。本發明具有下述優點:
1、本發明在創建目錄時通過為每個目錄分配一個全局唯一標識符,通過根據請求文件的父目錄全局唯一標識符和文件名的哈希映射對象存儲服務器,使得每臺文件元數據服務器的負載都較為均衡,有效避免了在重命名目錄時文件元數據的遷移,能夠提高文件系統的存儲性能。2、本發明根據請求文件的父目錄全局唯一標識符和文件名的哈希訪問對象存儲服務器中存儲的文件元數據,因此能夠減少各個文件元數據服務器上前綴目錄的重迭緩存,提高了文件元數據服務器的內存利用率和Cache命中率,消除了在各個文件元數據服務器上維護目錄一致性帶來的開銷。3、本發明建立用于管理目錄元數據的目錄元數據服務器集群、用于管理文件元數據的文件元數據服務器集群,建立用于提供基于對象接口的數據存儲服務的對象存儲服務器集群,因此能夠克服目錄元數據服務器、文件元數據服務器、對象存儲服務器三者中任何一種面臨較大負載時發生的性能瓶頸問題,具有擴展性好的優點。4、本發明在所有目錄元數據服務器集群中建立基于計數的布隆過濾器,目錄元數據服務器集群中的目錄元數據服務器之間共享基于計數的布隆過濾器,通過使用布隆過濾器來反映哪些目錄的元數據存儲在當前目錄元數據服務器中,有效提高了訪問目錄元數據的性能。5、本發明在創建目錄時隨機選擇目錄元數據服務器,通過隨機分布目錄元數據在各個目錄元數據服務器上,使得各個目錄的元數據較為均勻的分布在各目錄元數據服務器上,使得每臺目錄元數據服務器的負載都較為均衡,能夠避免目錄元數據服務器成為系統瓶頸。6、本發明根據目錄的完整路徑名哈希映射對象存儲服務器中存儲的目錄元數據,根據請求文件的文件名哈希來映射文件元數據服務器,根據請求文件的父目錄全局唯一標識符和文件名的哈希映射對象存儲服務器,通過上述哈希映射方式來確定該文件所在文件元數據服務器的方式,使得每臺文件元數據服務器的負載都較為均衡。
圖1為本發明實施例的方法流程示意圖。圖2為應用本發明實施例的分布式文件系統的網絡拓撲結構示意圖。圖3為本發明實施例目錄元數據的數據結構示意圖。圖4為本發明基于計數的布隆過濾器數組映射原理對比示意圖,其中(a)為傳統布隆過濾器數組映射原理示意圖,(b)為基于計數的布隆過濾器數組映射原理示意圖。圖5為本發明實施例中FMDS和OST的映射關系說明示意圖。圖6為本發明實施例中創建目錄的流程示意圖。圖7為本發明實施例中創建文件的流程示意圖。
具體實施方式
如圖1所示,本實施例面向高性能計算的分布式文件系統元數據管理方法的實施步驟如下:
1)建立用于管理目錄元數據的目錄元數據服務器集群、用于管理文件元數據的文件元數據服務器集群,建立用于為目錄元數據服務器集群和文件元數據服務器集群提供對象接口數據存儲服務的對象存儲服務器集群;
2)在所有目錄元數據服務器集群中建立布隆過濾器,目錄元數據服務器集群中的目錄元數據服務器之間共享布隆過濾器;
3)在客戶端的操作請求到來時,若操作請求為目錄操作請求時跳轉執行步驟4);若操作請求為文件操作請求時跳轉執行步驟5);
4)目錄元數據服務器集群響應客戶端的目錄操作請求對目錄元數據進行管理,為每個目錄分配一個全局唯一標識符,根據布隆過濾器數組記錄來判斷負責目錄請求的目錄元數據服務器,并根據目錄的完整路徑名哈希訪問對象存儲服務器中存儲的目錄元數據;
5)文件元數據服務器集群響應客戶端的文件操作請求對文件元數據進行管理,根據請求文件的文件名哈希來判斷負責文件元數據的文件元數據服務器,并根據請求文件的父目錄全局唯一標識符和文件名的哈希訪問對象存儲服務器中存儲的文件元數據。如圖2所示,應用于本實施例的分布式文件系統由多個客戶端(Client)、多個目錄元數據服務器(DMDS)組成的目錄元數據服務器集群、多個文件元數據服務器(FMDS)組成的文件元數據服務器集群、多個對象存儲服務器(多個0ST)組成的對象存儲服務器集群組成;DMDS和FMDS分別將相應的元數據持久化存儲到對應的OST上。本實施例通過目錄元數據服務器和文件元數據服務器的分工協作為整個存儲系統提供統一且一致的名字空間,管理客戶端的文件目錄訪問權限,來達到管理文件系統元數據的目的;客戶端則通過高速網絡向目錄元數據服務器集群執行目錄元數據訪問、向文件元數據服務器集群執行文件元數據訪問,對象存儲服務器位于目錄元數據服務器集群和文件元數據服務器集群的極端,對于客戶端而言是透明的。對象存儲服務器(Object Storage Target,簡稱0ST)負責底層數據塊分配、布局,驗證、響應相應的數據請求,提供一個基于對象接口的數據存儲服務。目錄元數據服務器集群包含多個通過網絡相連的目錄元數據服務器,目錄元數據服務器(Directory Metadata Server,簡稱DMDS)負責管理目錄元數據,包括查詢、創建、更新、刪除和存儲元數據到OST上等功能。文件元數據服務器集群包含多個通過網絡相連的文件元數據服務器,文件元數據服務器(File Metadata Server,簡稱FMDS)負責管理文件元數據,包括查詢、創建、更新、刪除和存儲元數據到OST上等功能。目錄元數據服務器和文件元數據服務器均通過網絡與對象存儲服務器相連。在面向高性能計算的PB級(以及更高級的)文件系統中,目錄對象的數量較文件對象的數量小,但只采用一臺DMDS來提供目錄元數據服務會讓該臺DMDS成為整個分布式文件系統的性能瓶頸,而本實施例由多臺DMDS組成的目錄元數據服務器集群來提供目錄元數據服務,由多臺FMDS組成的文件元數據服務器集群來提供文件元數據服務,目錄元數據服務器集群、文件元數據服務器集群、對象存儲服務器集群中的節點數量可以根據需要進行定制,從而能夠解決現有技術的目錄元數據服務成為整個分布式文件系統瓶頸的問題,而且具有擴展性好的優點。如圖3所示,本實施例步驟I)建立的對象存儲服務器集群中存儲的目錄元數據結構為:DirId、DirName、ACLf、ACLp> AtFMDS 和 InodePointer, DirId 代表目錄在被創建時生成的全局唯一標識符,DirId的生存周期和目錄本身一樣;DirName代表目錄的完整路徑名;ACLf代表在創建目錄時給目錄賦予的文件權限;ACLp代表目錄的路徑權限,ACLp由目錄自身的文件權限ACLf與父目錄的路徑權限ACLp相與操作得到;AtFMDS代表目錄下文件存放的型別標識,用于判斷目錄下所有文件的文件元數據在文件元數據服務器集群中的分布類型;InodePointer代表目錄層次結構指針,用于指向目錄包含的文件和子目錄構成的樹形結構,目錄包含的文件和子目錄構成的B樹通過目錄的全局唯一標識符進行索引。本實施例中目錄元數據結構信息的具體含義如下:(I) Dirld,目錄的全局唯一標識符,在創建目錄時生成。DirId的生存周期和目錄本身一樣,除非目錄被刪除,而修改目錄名等操作DirID都不會發生變化;(2) DirName,目錄的完整路徑名,如/usr/wl/dl等;(3)ACLf,目錄的文件權限。在創建目錄時給目錄賦予的權限(將目錄當做一個文件看待);(4)ACLp,目錄的路徑權限。目錄的路徑權限ACLp由目錄自身的文件權限ACLf與父目錄的路徑權限ACLp相與操作得到;(5) AtFMDS,目錄下文件存放的型別標識。當AtFMDS為一個非零值的時候(如某個FMDS的編號),它表示該目錄下所有的文件的元數據都將被存在一個文件元數據服務器FMDS上。在目錄規模較小且不會發生大量客戶端并發訪問的情況下,將一個目錄下所有文件的元數據存在一個FMDS上,這有利于實現對一個目錄下文件元數據的預取;當AtFMDS為零時,表示該目錄下的文件元數據將采用哈希方法分布在FMDS上。這適用于一個規模較大且會出現大量并發訪問目錄下文件元數據的情形。AtFMDS的值由客戶端在創建目錄時決定,即客戶端可以決定將該目錄下所有文件都分布在一個FMDS上還是哈希分布在所有的FMDS上,這樣的設計方法使得客戶可以根據應用的文件I/O特點來決定文件元數據的存放方式。由于第一種情形與第二種情形只是存在文件元數據分布方式的不同,在下面描述創建文件等流程時,只考慮第二種情形;(6) InodePointer,目錄層次結構指針,用以表示該目錄包含哪些文件和子目錄。目錄下的每個文件構成一個結點(以文件名標識),每個子目錄構成一個結點(以目錄名標識),所有的文件結點和子目錄結點構成一棵B樹。目錄所指向的B樹由目錄的全局唯一標識DirId進行索引。 本實施例中,目錄的路徑權限ACLp由文件權限ACLf與父目錄的路徑權限ACLp相與操作得到。以在目錄/home/bgp下新建目錄dl為例,生成/home/bgp/dl路徑權限的過程如下:
(1)查詢/home/bgp的路徑權限,假設為rwxr-xr-x,則表明客戶端具有在/home/bgp目錄下創建新目錄的權限;
(2)客戶端設定的新建目錄dl的訪問權限屬性為rwxr—r—;即表明目錄dl的文件權限 ACLf 為 rwxr—r—;
(3)根據父目錄/home/bgp的路徑權限和dl的文件權限構造目錄/home/bgp/dl的路徑權限為rwxr—r—。本實施例通過上述權限處理操作,生成目錄的路徑權限ACLp只能在父目錄的路徑權限ACLp內進行繼承,并且在繼承時通過目錄新建請求中指定的文件權限ACLf進行有限選擇,使得目錄安全管理的可靠性更好。本實施例步驟I)建立的對象存儲服務器集群中存儲的文件元數據結構包括DirIcUFileName和FileMeta,其中DirId代表文件所在目錄的全局唯一標識,FileName代表文件的文件名(不包含路徑項),FileMeta代表包括文件長度、讀寫權限、修改時間和文件數據的布局信息在內的文件具體元數據信息。如圖4 (a)所示,布隆過濾器(BF)的基本思想是源于通過引入多個哈希函數來解決單個哈希函數時的沖突問題,當每個哈希函數都告訴我們該元素在集合中時,才能確定該元素存在于集合之中。BF使用一個m比特的數組來保存信息,使用k個獨立的哈希函數將集合中的每一個元素映射到U,...,!!!}的范圍中。初始時,位數組的每一位都設置為O。添加一個元素X時,使用k個哈希函數得到k個哈希值,然后將數組中對應的比特位設置為I,即第i個哈希函數將Hashi (x)位置設置為I ;在判斷一個元素y是否屬于集合時,對y使用k個哈希函數得到k個哈希值,如果所有Hashi (y)對應的位置都是I (I彡i彡k),可以認為I是集合中的元素,否則I就不是集合中的元素,顯然判斷某個元素一定在集合中存在一定的錯判概率。本實施例采用布隆過濾器(Bloom Filter,簡稱BF)來反映當前有哪些目錄的元數據存儲在該DMDS的內存中,而且DMDS之間通過布隆過濾器共享實現全局信息的快速查詢。BF是一種空間效率很高的隨機數據結構,是一個判斷元素是否存在于集合之中的快速概率算法。它利用位數組簡潔的表示一個集合,并判斷一個元素是否屬于這個集合。如果判斷元素不在集合中,那么可以肯定不在。如果判斷一個元素存在于集合之中,會有一定的概率判斷錯誤。由于客戶端對于目錄元數據的訪問強度沒有文件元數據高,通過在判斷錯誤的情況下進行相應的錯誤處理,亦能夠保證正確處理請求。但BF帶來的性能效益會遠遠高出其判斷錯誤時的性能損失。但是,這種傳統的BF還存在一個問題即不能從集合中刪除元素,因為該元素對應的位會牽動到其它的元素,在DMDS中直接使用傳統的BF是不合適的,因為客戶端會有刪除某個目錄的 需求,一般在刪除目錄時需要借助包括標記在內的其它手段才能實現目錄元數據信息的偽刪除,導致存儲資源的利用率較低。本實施例中,步驟2)建立的布隆過濾器為基于計數的布隆過濾器,基于計數的布隆過濾器使用一個m比特的整數數組來保存信息,使用k個獨立的哈希函數將集合中的每一個目錄元素映射到{1,...,ηι}的范圍中,初始化時{1,...,ηι}中的每一位整數都設置為O,每個哈希函數對應一個大小為m/k位的位數組,k個位數組構成基于計數的布隆過濾器的布隆過濾器位數組;當目錄元數據服務器添加一個目錄時,目錄元數據服務器通過多個哈希函數對添加目錄的完整路徑進行哈希運算得到k個哈希值,將k個哈希值在整數數組中對應k個整數位置的整數值分別加I ;當目錄元數據服務器刪除一個目錄時,目錄元數據服務器通過多個哈希函數對刪除目錄進行哈希運算得到k個哈希值,將k個哈希值在整數數組中對應k個整數位置的整數值分別減I ;當判定目錄元數據服務器是否為負責指定目錄的節點時,通過多個哈希函數對指定目錄進行哈希運算得到的k個哈希值,判斷目錄元數據服務器的整數數組中對應k個整數位置的整數值是否都大于0,如果都大于O則判定該目錄元數據服務器為負責指定目錄的節點。如圖4 (b)所示,每個哈希函數Hashi對應一個大小為m/k的位數組BFi (BF1,BF2,BF3),k個BFi構成一個BF位數組(即BF Array,簡稱BFA)。添加一個元素xl時,使用k個哈希函數得到k個哈希值,然后將對應的位數組BFi的對應位置(BF1的第3個,BF2的第4個,BF3的第2個)設置為I。如果添加下一個元素x2,發生與xl沖突的情況時,則將沖突位置(BF2的第4個)的值加I。這樣設計的好處是可以刪除一個元素,同時不會發生在某一位置不同哈希函數發生沖突的情況(即HashiUkHash^y)的情形),代價是比原先的m比特空間有所增大,每一個位不能只使用一個比特來表示了,而需要幾個比特來記錄發生沖突的次數。參見圖4中下半部分,第2個BFA中從上往下第4個整數數值為2,兩個目錄在該整數位置發生沖突,當其中一個目錄被刪除時,該整數位置減I后,該整數位置變成1,仍然能夠保留另一個目錄的位置信息。但是,這樣的代價是比原先的m比特空間有所增大,每一個位不能只使用一個比特來表示了,而需要幾個比特來記錄發生沖突的次數。但是,通過基于計數的BF,能夠方便實現對目錄元數據的刪除,目錄刪除后OST的存儲空間能夠得到回收,存儲資源的利用率較高。本實施例中,采用下述三種哈希策略:
(O使用文件名哈希來確定該文件的元數據由哪臺FMDS負責。(2)使用文件父目錄DirId和文件名哈希來確定文件的元數據最終保存在哪個OST 上。(3)使用目錄完整路徑名哈希來確定目錄的元數據最終保存在哪個OST上。例如:客戶端想要訪問文件”/a/b/filec”,則使用filec的哈希結果來確定文件元數據位于哪一臺FMDS上,FMDS使用/a/b的目錄DirId和filec來確定該文件的元數據存放在哪個OST上。對于目錄元數據,如目錄b,則使用/a/b的哈希結果來確定該目錄的元數據位于哪一個OST上。本實施例通過使用上述哈希策略,在重命名目錄時,只需要在OST之間遷移對應的目錄(以及子目錄)元數據,而無需遷移目錄下(以及子目錄下)文件的元數據。與使用文件路徑名進行文件元數據和OST之間的映射這種方式相比,大大減低了遷移的數據量。如圖5所示,本實施例在使用文件名哈希來確定FMDS時,第0-1000個哈希值對應編號為#1的FMDS,第1001-2000個哈希值對應編號為#2的FMDS,第2001-3000個哈希值對應編號為#3的FMDS,第3001-4000個哈希值對應編號為#4的FMDS,本實施例僅以4個FMDS進行舉例說明,更多的FMDS映射依次類推,在此不再贅述。本實施例在使用文件父目錄DirId和文件名哈希來確定OST時,第0-100個哈希值對應編號為#1的0ST,第101-200個哈希值對應編號為#2的0ST,第201-300個哈希值對應編號為#3的0ST,第301-400個哈希值對應編號為#4的0ST,本實施例僅以4個OST進行舉例說明,更多的OST映射依次類推,在此不再贅述。本實施例中,步驟4)的詳細步驟如下:
4.1)客戶端判斷目錄操作請求類型,當目錄操作請求為創建目錄時跳轉執行步驟
4.2),當目錄操作請求為查詢目錄元數據時跳轉執行步驟4.3),當目錄操作請求為更新目錄權限時跳轉執行步驟4.4),當目錄操作請求為重命名目錄時跳轉執行步驟4.5),當目錄操作請求為刪除目錄時跳轉執行步驟4.6)。4.2)執行創建目錄:
4.2.1)客戶端從緩存中查找當前目錄的父目錄元數據,如果找到則查詢客戶端是否具有在父目錄下創建目錄的權限,如果沒有權限則返回用戶沒有權限在父目錄下創建目錄的錯誤提示并返回執行步驟3);如果有權限創建或者在緩存中沒有找到父目錄元數據信息,從目錄元數據服務器集群中隨機選擇一個指定節點發送創建目錄請求;
4.2.2)指定節點接收到創建目錄請求,首先通過本節點以及其它節點共享的布隆過濾器查找負責當前目錄的父目錄的目標節點,如果本節點不是目標節點,則向目標節點請求父目錄路徑權限,目標節點查詢父目錄路徑權限并返回給指定節點;否則本節點直接查詢獲取父目錄路徑權限;如圖6所示,本實施例中目錄元數據服務器I (DMDSl)并非負責父目錄元數據信息的節點,父目錄元數據信息由目錄元數據服務器2 (DMDS2)負責,因此向目標節點DMDS2請求父目錄路徑權限并跳轉執行步驟4.2.3);
4.2.3)指定節點將父目錄路徑權限緩存,判斷父目錄路徑權限是否允許客戶端創建目錄,如果不允許則返回出錯信息給客戶端并跳轉執行步驟3);如果允許則指定節點創建目錄,為新建目錄生成一個全局唯一標識符,將目錄操作請求中的指定的文件權限和父目錄路徑權限進行相與操作得到新建目錄的路徑權限,根據全局唯一標識符、目錄操作請求中的攜帶的完整路徑和文件權限、新建目錄的路徑權限生成目錄元數據,并將目錄元數據根據當前目錄的完整路徑哈希將當前目錄的目錄元數據提交到對象存儲服務器進行存儲;
4.2.4)指定節點將當前目錄的目錄元數據存入緩存中,并向負責父目錄的目標節點發送更新目錄元數據請求,目標節點接收請求并更新父目錄元數據信息;同時,指定節點將新創建目錄存入本地的布隆過濾器,并將布隆過濾器的更新項發送給目錄元數據服務器集群中的其它節點進行同步;指定節點向客戶端回復目錄創建消息,消息包含當前目錄的全局唯一標識符、文件權限、路徑權限和所在的目錄元數據服務器編號;
4.2.5)客戶端將接收到的目錄創建消息加入本地緩存中并向用戶顯示操作結果,跳轉執行步驟3)。4.3 )執行查詢目錄元數據:
4.3.1)客戶端首先在本地緩存中查找是否有待當前目錄的目錄元數據信息,如果有則直接返回結果給客戶端,跳轉執行步驟3);否則跳轉執行步驟4.3.2);
4.3.2)客戶端隨機向目錄元數據服務器集群中隨機選擇一個指定節點發送目錄元數據查詢請求;
4.3.3)指定節點通過本節點以及其它節點共享的布隆過濾器查找負責當前目錄的目標節點,如果指定節點并非目標節點,則指定節點將目錄元數據查詢請求轉發給目標節點,否則指定節點即為目標節點;
4.3.4)目標節點首先在內存中查找待查詢目錄的目錄元數據信息,如果在內存中查找失敗,則根據當前目錄的完整路徑名哈希獲取對象存儲服務器中存儲的目錄元數據信息,如果查詢目錄元數據請求為目錄列表請求命令,則還通過目錄層次結構指針獲取當前目錄所包含的子目錄和文件信息數據,最終將獲得的操作結果發送給客戶端;
4.3.5)客戶端接收目標節點發送的操作結果,將目錄元數據信息加入到緩存中,將目錄操作請求的操作結果返回給用戶端,跳轉執行步驟3)。4.4)執行更新目錄權限:
4.4.1)客戶端首先在本地緩存中查找目錄元數據服務器集群中負責當前目錄的目標節點,如果查找成功,則向目標節點發送更新目錄權限請求,跳轉執行步驟4.4.3),否則向目錄元數據服務器集群中隨機選擇一個指定節點發送更新目錄權限請求,跳轉執行步驟4.4.2);
4.4.2)指定節點通過本節點以及其它節點共享的布隆過濾器查找負責當前目錄的目標節點,如果指定節點并非目標節點,則指定節點將更新目錄權限請求轉發給目標節點,否則指定節點即為目標節點; 4.4.3)目標節點修改當前目錄的文件權限和路徑權限,找出當前目錄所包含的子目錄,通過本節點以及其它節點共享的布隆過濾器查找負責待更新目錄下各個子目錄的關聯節點,并向關聯節點分別發送更新目錄路徑權限請求;
4.4.4)關聯節點通過本節點以及其它節點共享的布隆過濾器查找負責待更新目錄下各個子目錄的下一級關聯節點,并向下一級關聯節點分別發送更新目錄路徑權限請求,接收到更新目錄請求的關聯節點分別執行更新目錄的路徑權限,將操作結果返回給所述目標節點;重復執行上述遞歸過程,直到待更新目錄下所有子目錄的路徑權限都更新成功;可見,更新目錄權限信息是一個遞歸的過程,更改一個父目錄的權限信息,其所有子目錄都要修改相應的路徑權限,父目錄在名字空間中的層次越高,整個操作的代價將越大,所以應盡可能的減少更改高層目錄的權限信息;
4.4.5)目標節點接收到各級關聯節點發送來的子目錄的路徑權限更新結果,并將操作結果返回給用戶端;
4.4.6)客戶端接收到目標節點發送的操作結果并返回給用戶,跳轉執行步驟3)。4.5)執行重命名目錄:
4.5.1)客戶端首先在本地緩存中查找目錄元數據服務器集群中負責當前目錄的目標節點,如果查找成功,則向目標節點發送重命名目錄請求,進入步驟4.5.3),否則隨機向目錄元數據服務器集群中隨機選擇一個指定節點發送重命名目錄請求,跳轉執行步驟4.5.2);
4.5.2)指定節點通過本節點以及其它節點共享的布隆過濾器查找負責當前目錄的目標節點,如果指定節點并非目標節點,則指定節點將重命名目錄請求轉發給目標節點,否則指定節點即為目標節點;
4.5.3)目標節點執行重命名目錄,通過本節點以及其它節點共享的布隆過濾器查找負責當前下各個子目錄的關聯節點,并向關聯節點分別發送重命名目錄請求;
4.5.4)關聯節點通過本節點以及其它節點共享的布隆過濾器遞歸查找負責當前目錄下各個子目錄的下一級關聯節點,并向下一級關聯節點分別發送重命名目錄請求,接收到重命名目錄請求的關聯節點分別執行重命名目錄;重復執行上述遞歸過程,直到待重命名目錄下所有子目錄都重命名成功后,將操作結果返回給目標節點;
4.5.5)目標節點接收到各級關聯節點發送來的子目錄的重命名目錄結果,并將操作結果返回給用戶端;
4.5.6)客戶端接收到目標節點發送的操作結果并將操作結果返回給用戶,跳轉執行步驟3)。參見前述步驟4.5.1) 4.5.6),在進行目錄重命名時,本實施例只需要對所有目錄路徑名包含該目錄的目錄進行重命名操作,而無需移動相關的目錄元數據和文件元數據,最大程度的降低了重命名目錄的開銷。4.6)執行刪除目錄:
4.6.1)客戶端首先在本地緩存中查找目錄元數據服務器集群中負責待刪除目錄的目標節點,如果查找成功,則向目標節點發送刪除目錄請求,進入步驟4.6.3),否則隨機向目錄元數據服務器集群中隨機選擇一個指定節點DMDSl發送刪除目錄請求,跳轉執行步驟4.6.2); 4.6.2)指定節點DMDSl通過本節點以及其它節點共享的基于計數的布隆過濾器查找負責待刪除目錄的目標節點(目標節點對應目錄的BFA的k個位置的整數都大于O,則目錄由目標節點負責),如果指定節點DMDSl并非目標節點,則指定節點DMDSl將刪除目錄請求轉發給目標節點,否則指定節點即為目標節點;本實施例中,目標節點為DMDS2,指定節點DMDSl將刪除目錄請求轉發給目標節點DMDS2 ;
4.6.3)目標節點DMDS2執行刪除目錄,通過本節點以及其它節點共享的基于計數的布隆過濾器查找負責待刪除目錄下各個子目錄的關聯節點,并向關聯節點分別發送刪除目錄請求;
4.6.4)關聯節點通過本節點以及其它節點共享的基于計數的布隆過濾器遞歸查找負責待刪除目錄下各個子目錄的下一級關聯節點,并向下一級關聯節點分別發送刪除目錄請求,接收到刪除目錄請求的關聯節點執行刪除目錄;重復執行上述遞歸過程,直到待刪除目錄下所有子目錄都刪除成功后,將操作結果返回給目標節點DMDS2 ;最后目標節點DMDS2將執行結果返回給用戶端;
4.6.5)客戶端接收到目標節點DMDS2發送的操作結果并返回給用戶,跳轉執行步驟3)。本實施例在上述執行重命名目錄時,所有對于元數據的修改都將被提交到更新日志,由更新日志定期將元數據持久化存儲到底層OST上。在進行目錄重命名時,本發明只需要對所有目錄路徑名包含該目錄的目錄進行重命名操作,而無需移動相關的目錄元數據和文件元數據,最大程度的降低了重命名目錄的開銷。本實施例中,目錄元數據服務器對目錄元數據的修改均通過更新日志定時進行,其詳細步驟如下:首先目錄元數據服務器在需要修改目錄元數據時將對目錄元數據的修改生成更新日志并緩存,然后目錄元數據服務器定時檢查本地緩存的更新日志,然后根據更新日志哈希目標目錄的完整路徑,根據哈希值與對象存儲服務器的映射關系表定位負責目標目錄的對象存儲服務器,并將對目錄元數據的修改提交給負責目標目錄的對象存儲服務器執行對目錄元數據的修改;通過上述步驟,使得DMDS所有對于目錄元數據的修改(包括創建、更新、重命名、刪除)都將被提交到更新日志,由更新日志定期將元數據持久化存儲到底層OST上。本實施例中,客戶端收到目錄元數據信息后會立即緩存目錄的元數據信息,以便在下次訪問相同目錄的時候先從緩存中查找目錄元數據信息,若命中,則不需要再次訪問DMDS0根據局部性原理,用戶接著訪問同一目錄下文件的概率很高,所以訪問DMDS的開銷被平攤,極大的提高了元數據的訪問效率。當客戶端檢查到Cache中緩存項超過了有效期,將主動把相關的目錄元數據信息從緩存中移除。本實施例中,步驟5)的詳細步驟如下:
5.1)客戶端判斷文件操作請求類型,當文件操作請求為創建文件時跳轉執行步驟5.2),當文件操作請求為查詢文件元數據時跳轉執行步驟5.3),當文件操作請求為更新文件元數據時跳轉執行步驟5.4),當文件操作請求為重命名文件時跳轉執行步驟5.5),當文件操作請求為刪除文件時跳轉執行步驟5.6)。5.2)執行創建文件:
5.2.1)客戶端首先在本地緩存中查找當前文件父目錄的目錄元數據信息,若找到父目錄的目錄元數據信息,則查詢父目錄權限信息判斷客戶端是否具有創建文件權限,如果客戶端沒有創建文件權限,則返回消息給用戶并跳轉執行步驟3);如果客戶端有創建文件權限則跳轉執行步驟5.2.3);若客戶端沒有找到父目錄的目錄元數據信息,則跳轉執行
4.3)查詢當前文件父目錄的目錄元數據,收到父目錄的目錄元數據信息后返回執行步驟
5.2.2);參見圖7所示,本實施例中客戶端沒有找到父目錄的目錄元數據信息,首先請求目錄元數據服務器I (DMDSl)父目錄的目錄元數據信息,DMDSl仍未查找到并轉發查找請求給負責父目錄的目錄元數據服務器2 (DMDS2);
5.2.2)客戶端客戶緩存的目錄創建消息中的路徑權限信息判斷當前文件父目錄是否允許客戶端創建文件,如果不允許客戶端創建文件,則返回消息給用戶并跳轉執行步驟3);否則跳轉步驟5.2.3);
5.2.3)根據當前文件的文件名進行哈希,根據哈希值找到在文件元數據服務器集群中所映射的指定節點,發送文件創建請求到所述指定節點,發送的信息包含當前文件完整路徑名、父目錄全局唯一標識符和父目錄所在的目錄元數據服務器編號;
5.2.4)指定節點根據文件創建請求生成當前文件的元數據,根據父目錄全局唯一標識符和文件名將當前文件的元數據提交到對象存儲服務器進行存儲;
5.2.5)指定節點將當前文件的元數據存入緩存中,然后將文件創建成功消息發送到負責當前文件父目錄的目錄元數據服務器,目錄元數據服務器將當前文件父目錄的目錄元數據信息更新至指定的對象存儲服務器;
5.2.6)指定節點將創建新文件成功的消息發給客戶端;
5.2.7)客戶端接收到文件創建成功消息,向用戶提示文件創建成功,跳轉執行步驟3)。5.3 )執行查詢文件元數據:
5.3.1)客戶端跳轉執行步驟4.3)獲取當前文件父目錄的元數據信息,收到待查詢文件父目錄的元數據信息后返回執行步驟5.3.2);
5.3.2)客戶端將當前文件的文件名進行哈希,在文件元數據服務器集群中根據待查詢文件的哈希值找到負責當前文件的目標節點;
5.3.3)客戶端向目標節點發送查詢文件元數據請求,查詢文件元數據請求信息包括父目錄全局唯一標識符、待查詢文件的文件名和文件完整路徑;
5.3.4)目標節點收到客戶端的查詢文件元數據請求,首先在內存中查找當前文件的文件元數據,如果查找成功則直接跳轉執行步驟5.3.5);如果查找失敗則使用父目錄全局唯一標識符和待查詢文件的文件名,在對象存儲服務器集群中定位存儲文件元數據的對象存儲服務器,然后從對象存儲服務器中讀取當前文件的文件元數據;
5.3.5)目標節點向客戶端發送待查詢文件的文件元數據;
5.3.6)客戶端收到目標節點發送的文件元數據,返回給用戶并跳轉執行步驟3)。5.4)執行更新文件元數據:
5.4.1)客戶端跳轉執行步驟4.3)獲取當前文件父目錄的元數據信息,收到當前文件父目錄的元數據信息后返回執行步驟5.4.2);
5.4.2)客戶端將當前文件的文件名進行哈希,在文件元數據服務器集群中根據待更新文件的哈希值找到負責待更新文件的目標節點;
5.4.3)客戶端向目標節點發送更新文件元數據請求,查詢文件元數據請求信息包括父目錄全局唯一標識符和新的文件元數據;
5.4.4)目標節點收到客戶端的更新文件元數據請求,首先在內存中查找當前文件的文件元數據,如果查找失敗則使用父目錄全局唯一標識符和待更新文件的文件名,在對象存儲服務器集群中定位存儲文件元數據的對象存儲服務器,然后從對象存儲服務器中讀取文件元數據;獲取更新文件元數據以后,檢查客戶端是否修改權限,如果沒有修改權限則向客戶端返回沒有權限的更新失敗消息,跳轉執行步驟3);如果有修改權限則更新文件元數據并向客戶端發送更新成功消息;
5.4.5)客戶端收到目標節點的發送的消息后返回給用戶,跳轉執行步驟3)。5.5 )執行重命名文件:
5.5.1)客戶端跳轉執行步驟4.3)獲取當前文件父目錄的元數據信息,收到待重命名文件父目錄的元數據信息后返回執行步驟5.5.2);
5.5.2)根據當前文件父目錄的元數據信息判斷父目錄下是否有待重命名文件新名稱相同的文件,如果在父目錄下找到相同文件名的文件,則返回存在相同文件名消息給客戶端,跳轉執行步驟3);否則,將待重命名文件的新文件名進行哈希,在文件元數據服務器集群中根據當前文件的哈希值找到負責當前文件的目標節點;
5.5.3)客戶端向所述目標節點發送重命名文件請求,所述查詢文件元數據請求信息包括父目錄全局唯一標識符、舊文件名、新文件名和父目錄所在目錄元數據服務器編號;
5.5.4)目標節點接收客戶端發送的重命名文件請求,首先在內存中查找當前文件的文件元數據,如果查找失敗則使用父目錄全局唯一標識符和當前文件的文件名,在對象存儲服務器集群中定位存儲文件元數據的對象存儲服務器,然后從對象存儲服務器中讀取文件元數據;獲取當前文件的元數據以后,檢查客戶端是否有修改權限,如果沒有修改權限則向客戶端返回沒有權限的重命名失敗消息,跳轉執行步驟3);如果有修改權限,則更新文件元數據,通過新文件名哈希在文件元數據服務器集群中找到負責新文件名的新目標節點,將文件重命名信息和新文件元數據發送給新目標節點,新目標節點接收并緩存文件重命名信息和新文件元數據,然后將文件重命名信息和新文件元數據提交到存儲到指定的對象存儲服務器;同時目標節點向負責父目錄的目錄元數據服務器發送文件重命名請求,負責父目錄的目錄元數據服務器收到文件重命名請求,根據文件重命名請求更新父目錄元數據中對應當前文件的文件名;最后向客戶端發送重命名文件成功消息;
5.5.5)客戶端收到目標節點發送的消息并返回給用戶,跳轉執行步驟3)。5.6)執行刪除文件:
5.6.1)客戶端跳轉執行步驟4.3)獲取當前文件父目錄的元數據信息,收到當前文件父目錄的元數據信息后返回執行步驟5.6.2);
5.6.2)將當前文件的文件名進行哈希,在文件元數據服務器集群中根據當前文件的哈希值找到負責待刪除文件的目標節點;
5.6.3)客戶端向目標節點發送刪除文件請求,刪除文件請求包含父目錄全局唯一標識符、待刪除文件名和負責父目錄的目錄元數據服務器編號;
5.6.4)目標節點接收刪除文件請求,首先在內存中查找當前文件的文件元數據,如果查找失敗則使用父目錄全局唯一標識符和當前文件的文件名,在對象存儲服務器集群中定位存儲文件元數據的對象存儲服務器,然后從對象存儲服務器中讀取當前文件的文件元數據;最后獲取當前文件的文件元數據以后,檢查客戶端是否刪除權限,如果沒有刪除權限,則向客戶端返回沒有權限的刪除失敗消息,跳轉執行步驟3);如果有刪除權限,則刪除當前文件的元數據,并向父目錄所在的目錄元數據服務器發送刪除文件請求,父目錄所在的目錄元數據服務器收到刪除文件請求,刪除父目錄元數據信息中的該文件的信息;最后向客戶端發送刪除文件成功消息;
5.6.5)客戶端收到目標節點發送的消息并返回給用戶,跳轉執行步驟3)。本實施例中,文件元數據服務器對文件元數據的修改均通過更新日志進行,其詳細步驟如下:首先文件元數據服務器在需要修改文件元數據時將對文件元數據的修改生成更新日志并緩存,然后文件元數據服務器定時檢查本地緩存的更新日志,然后根據更新日志哈希目標文件父目錄的全局唯一標識符和目標文件的文件名,根據哈希值與對象存儲服務器的映射關系表定位負責當前文件的對象存儲服務器,并將對文件元數據的修改提交給負責目標文件的對象存儲服務器執行對文件元數據的修改。通過上述步驟,使得FMDS所有對于文件元數據的修改(包括創建、更新、重命名、刪除)都將被提交到更新日志,由更新日志定期將元數據持久化存儲到底層OST上。以上所述僅是本發明的優選實施方式,本發明的保護范圍并不僅局限于上述實施例,凡屬于本發明思路下的技術方案均屬于本發明的保護范圍。應當指出,對于本技術領域的普通技術人員來說,在不脫離本發明原理前提下的若干改進和潤飾,這些改進和潤飾也應視為本發明的保護范圍。
權利要求
1.一種面向高性能計算的分布式文件系統元數據管理方法,其特征在于實施步驟如下: I)建立用于管理目錄元數據的目錄元數據服務器集群、用于管理文件元數據的文件元數據服務器集群,建立用于為目錄元數據服務器集群和文件元數據服務器集群提供對象接口數據存儲服務的對象存儲服務器集群; 2 )在所有目錄元數據服務器集群中建立布隆過濾器,所述目錄元數據服務器集群中的目錄元數據服務器之間共享布隆過濾器; 3)在客戶端的操作請求到來時,若操作請求為目錄操作請求時跳轉執行步驟4);若操作請求為文件操作請求時跳轉執行步驟5); 4)所述目錄元數據服務器集群響應客戶端的目錄操作請求對目錄元數據進行管理,為每個目錄分配一個全局唯一標識符,根據布隆過濾器數組記錄來判斷負責目錄請求的目錄元數據服務器,并根據目錄的完整路徑名哈希訪問對象存儲服務器中存儲的目錄元數據; 5)所述文件元數據服務器集群響應客戶端的文件操作請求對文件元數據進行管理,根據請求文件的文件名哈希來判斷負責文件元數據的文件元數據服務器,并根據請求文件的父目錄全局唯一標識符和文件名的哈希訪問對象存儲服務器中存儲的文件元數據。
2.根據權利要求1所述的面向高性能計算的分布式文件系統元數據管理方法,其特征在于,所述步驟I)建立的對象存儲服務器集群中存儲的目錄元數據結構為:DirId、DirName、ACLf、ACLp> AtFMDS和InodePointer, DirId代表目錄在被創建時生成的全局唯一標識符,DirId的生存周期和目錄本身一樣;DirName代表目錄的完整路徑名;ACLf代表在創建目錄時給目錄賦予的文件權限;ACLp代表目錄的路徑權限,ACLp由目錄自身的文件權限ACLf與父目錄的路徑權限ACLp相與操作得到;AtFMDS代表目錄下文件存放的型別標識,用于判斷目錄下所有 文件的文件元數據在文件元數據服務器集群中的分布類型;InodePointer代表目錄層次結構指針,用于指向目錄包含的文件和子目錄構成的樹形結構,所述目錄包含的文件和子目錄構成的B樹通過目錄的全局唯一標識符進行索引;所述步驟I)建立的對象存儲服務器集群中存儲的文件元數據結構包括Dirid、FileName和FileMeta,其中DirId代表文件所在目錄的全局唯一標識符,FileName代表文件的文件名,FileMeta代表包括文件長度、讀寫權限、修改時間和文件數據的布局信息在內的文件具體元數據信息。
3.根據權利要求1或2所述的面向高性能計算的分布式文件系統元數據管理方法,其特征在于,所述步驟2)建立的布隆過濾器為基于計數的布隆過濾器,所述基于計數的布隆過濾器使用一個m比特的整數數組來保存信息,使用k個獨立的哈希函數將集合中的每一個目錄元素映射到{1,...,ηι}的范圍中,初始化時{1,...,ηι}中的每一位整數都設置為O,每個哈希函數對應一個大小為m/k位的位數組,所述k個位數組構成基于計數的布隆過濾器的布隆過濾器位數組;當目錄元數據服務器添加一個目錄時,所述目錄元數據服務器通過多個哈希函數對添加目錄的完整路徑進行哈希運算得到k個哈希值,將所述k個哈希值在整數數組中對應k個整數位置的整數值分別加I ;當目錄元數據服務器刪除一個目錄時,所述目錄元數據服務器通過多個哈希函數對刪除目錄進行哈希運算得到k個哈希值,將所述k個哈希值在整數數組中對應k個整數位置的整數值分別減I ;當判定目錄元數據服務器是否為負責指定目錄的節點時,通過多個哈希函數對指定目錄進行哈希運算得到的k個哈希值,判斷所述目錄元數據服務器的整數數組中對應k個整數位置的整數值是否都大于O,如果都大于O則判定該目錄元數據服務器為負責指定目錄的節點。
4.根據權利要求3所述的面向高性能計算的分布式文件系統元數據管理方法,其特征在于,所述步驟4)的詳細步驟如下: 4.1)客戶端判斷目錄操作請求類型,當目錄操作請求為創建目錄時跳轉執行步驟4.2),當目錄操作請求為查詢目錄元數據時跳轉執行步驟4.3),當目錄操作請求為更新目錄權限時跳轉執行步驟4.4),當目錄操作請求為重命名目錄時跳轉執行步驟4.5),當目錄操作請求為刪除目錄時跳轉執行步驟4.6); 4.2)執行創建目錄: 4.2.1)客戶端從緩存中查找當前目錄的父目錄元數據,如果找到則查詢客戶端是否具有在父目錄下創建目錄的權限,如果沒有權限則返回用戶沒有權限在父目錄下創建目錄的錯誤提示并返回執行步驟3);如果有權限創建或者在緩存中沒有找到父目錄元數據信息,從目錄元數據服務器集群中隨機選擇一個指定節點發送創建目錄請求; 4.2.2)所述指定節點接收到創建目錄請求,首先通過本節點以及其它節點共享的布隆過濾器查找負責當前目錄的父目錄的目標節點,如果本節點不是目標節點,則向目標節點請求父目錄路徑權限,目標節點查詢父目錄路徑權限并返回給所述指定節點;否則本節點直接查詢獲取父目錄路徑權限; 4.2.3)所述指定節點將父目錄路徑權限緩存,判斷所述父目錄路徑權限是否允許客戶端創建目錄,如果不允許則返回出錯信息給客戶端并跳轉執行步驟3);如果允許則指定節點創建目錄,為新建目錄生成一個全局唯一標識符,將目錄操作請求中的指定的文件權限和父目錄路徑權限進行相與操作得到新建目錄的路徑權限,根據全局唯一標識符、目錄操作請求中的攜帶的完整路徑和文件權限、新建目錄的路徑權限生成目錄元數據,并將目錄元數據根據當前目錄的完整路徑哈希將當前目錄的目錄元數據提交到對象存儲服務器進行存儲; 4.2.4)所述指定節點將當前目錄的目錄元數據存入緩存中,并向負責父目錄的目標節點發送更新目錄元數據請求,所述目標節點接收請求并更新父目錄元數據信息;同時,所述指定節點將新創建目錄存入本地的布隆過濾器,并將布隆過濾器的更新項發送給目錄元數據服務器集群中的其它節點進行同步;所述指定節點向客戶端回復目錄創建消息,所述消息包含當前目錄的全局唯一標識符、文件權限、路徑權限和所在的目錄元數據服務器編號; 4.2.5)客戶端將接收到的目錄創建消息加入本地緩存中并向用戶顯示操作結果,跳轉執行步驟3); 4.3)執行查詢目錄元數據: 4.3.1)客戶端首先在本地緩存中查找是否有待當前目錄的目錄元數據信息,如果有則直接返回結果給客戶端,跳轉執行步驟3);否則跳轉執行步驟4.3.2); 4.3.2)客戶端隨機向目錄元數據服務器集群中隨機選擇一個指定節點發送目錄元數據查詢請求; 4.3.3)所述指定節點通過本節點以及其它節點共享的布隆過濾器查找負責當前目錄的目標節點,如果指定節點并非目標節點,則所述指定節點將目錄元數據查詢請求轉發給目標節點,否則所述指定節點即為目標節點; · 4.3.4)所述目標節點首先在內存中查找待查詢目錄的目錄元數據信息,如果在內存中查找失敗,則根據當前目錄的完整路徑名哈希獲取對象存儲服務器中存儲的目錄元數據信息,如果查詢目錄元數據請求為目錄列表請求命令,則還通過目錄層次結構指針獲取當前目錄所包含的子目錄和文件信息數據,最終將獲得的操作結果發送給客戶端; · 4.3.5)客戶端接收所述目標節點發送的操作結果,將目錄元數據信息加入到緩存中,將目錄操作請求的操作結果返回給用戶端,跳轉執行步驟3); · 4.4)執行更新目錄權限:· · 4.4.1)客戶端首先在本地緩存中查找目錄元數據服務器集群中負責當前目錄的目標節點,如果查找成功,則向目標節點發送更新目錄權限請求,跳轉執行步驟4.4.3),否則向目錄元數據服務器集群中隨機選擇一個指定節點發送更新目錄權限請求,跳轉執行步驟·4.4.2); ·4.4.2)所述指定節點通過本節點以及其它節點共享的布隆過濾器查找負責當前目錄的目標節點,如果所述指定節點并非目標節點,則所述指定節點將更新目錄權限請求轉發給目標節點,否則所述指定節點即為目標節點; ·4.4.3)所述目標節點修改當前目錄的文件權限和路徑權限,找出當前目錄所包含的子目錄,通過本節點以及其它節點共享的布隆過濾器查找負責待更新目錄下各個子目錄的關聯節點,并向所述關聯節點分別發送更新目錄路徑權限請求; ·4.4.4)所述關聯節點通過本節點以及其它節點共享的布隆過濾器查找負責待更新目錄下各個子目錄的下一級關聯節點,并向所述下一級關聯節點分別發送更新目錄路徑權限請求,接收到更新目錄請求的關聯節點分別執行更新目錄的路徑權限,將操作結果返回給所述目標節點;重復執行上述遞歸過程,直到待更新目錄下所有子目錄的路徑權限都更新成功; · 4.4.5)所述目標節點接收到各級關聯節點發送來的子目錄的路徑權限更新結果,并將操作結果返回給用戶端; ·4.4.6)客戶端接收到所述目標節點發送的操作結果并返回給用戶,跳轉執行步驟3); ·4.5)執行重命名目錄: ·4.5.1)客戶端首先在本地緩存中查找目錄元數據服務器集群中負責當前目錄的目標節點,如果查找成功,則向目標節點發送重命名目錄請求,進入步驟4.5.3),否則隨機向目錄元數據服務器集群中隨機選擇一個指定節點發送重命名目錄請求,跳轉執行步驟·4.5.2); · 4.5.2)所述指定節點通過本節點以及其它節點共享的布隆過濾器查找負責當前目錄的目標節點,如果所述指定節點并非目標節點,則所述指定節點將重命名目錄請求轉發給目標節點,否則所述指定節點即為目標節點; ·4.5.3)所述目標節點執行重命名目錄,通過本節點以及其它節點共享的布隆過濾器查找負責當前下各個子目錄的關聯節點,并向所述關聯節點分別發送重命名目錄請求; ·4.5.4)所述關聯節點通過本節點以及其它節點共享的布隆過濾器遞歸查找負責當前目錄下各個子目錄的下一級關聯節點,并向所述下一級關聯節點分別發送重命名目錄請求,接收到重命名目錄請求的關聯節點分別執行重命名目錄;重復執行上述遞歸過程,直到待重命名目錄下所有子目錄都重命名成功后,將操作結果返回給所述目標節點; .4.5.5)所述目標節點接收到各級關聯節點發送來的子目錄的重命名目錄結果,并將操作結果返回給用戶端; .4.5.6)客戶端接收到所述目標節點發送的操作結果并將操作結果返回給用戶,跳轉執行步驟3); .4.6)執行刪除目錄: .4.6.1)客戶端首先在本地緩存中查找目錄元數據服務器集群中負責待刪除目錄的目標節點,如果查找成功,則向目標節點發送刪除目錄請求,進入步驟4.6.3),否則隨機向目錄元數據服務器集群中隨機選擇一個指定節點發送刪除目錄請求,跳轉執行步驟4.6.2); .4.6.2)所述指定節點通過本節點以及其它節點共享的基于計數的布隆過濾器查找負責待刪除目錄的目標節點,如果所述指定節點并非目標節點,則所述指定節點將刪除目錄請求轉發給目標節點,否則所述指定節點即為目標節點; .4.6.3)所述目標節點執行刪除目錄,通過本節點以及其它節點共享的布隆過濾器查找負責當前目錄下各個子目錄的關聯節點,并向所述關聯節點分別發送刪除目錄請求; .4.6.4)所述關聯節點通過本節點以及其它節點共享的布隆過濾器遞歸查找負責待刪除目錄下各個子目錄的下一級關聯節點,并向所述下一級關聯節點分別發送刪除目錄請求,接收到刪除目錄請求的關聯節點執行刪除目錄,將操作結果返回給所述目標節點;重復執行上述遞歸過程,直到當前目錄下所有子目錄都刪除成功;最后,所述目標節點將執行結果返回給用戶端; .4.6.5)客戶端接收到所述目標節點發送的操作結果并返回給用戶,跳轉執行步驟3)。
5.根據權利要求4所述的面向高性能計算的分布式文件系統元數據管理方法,其特征在于,所述步驟5)的詳細步驟如下: 5.1)客戶端判斷文件操作請求類型,當文件操作請求為創建文件時跳轉執行步驟5.2),當文件操作請求為查詢文件元數據時跳轉執行步驟5.3),當文件操作請求為更新文件元數據時跳轉執行步驟5.4),當文件操作請求為重命名文件時跳轉執行步驟5.5),當文件操作請求為刪除文件時跳轉執行步驟5.6); 5.2)執行創建文件: 5.2.1)客戶端首先在本地緩存中查找當前文件父目錄的目錄元數據信息,若找到父目錄的目錄元數據信息,則查詢父目錄權限信息判斷客戶端是否具有創建文件權限,如果客戶端沒有創建文件權限,則返回消息給用戶并跳轉執行步驟3);如果客戶端有創建文件權限則跳轉執行步驟5.2.3);若客戶端沒有找到父目錄的目錄元數據信息,則跳轉執行.4.3)查詢當前文件父目錄的目錄元數據,收到父目錄的目錄元數據信息后返回執行步驟.5.2.2); .5.2.2)客戶端客戶緩存的目錄創建消息中的路徑權限信息判斷當前文件父目錄是否允許客戶端創建文件,如果不允許客戶端創建文件,則返回消息給用戶并跳轉執行步驟3);否則跳轉步驟5.2.3); .5.2.3)根據當前文件的文件名進行哈希,根據哈希值找到在文件元數據服務器集群中所映射的指定節點,發送文件創建請求到所述指定節點,發送的信息包含當前文件完整路徑名、父目錄全局唯一標識符和父目錄所在的目錄元數據服務器編號;`5.2.4)所述指定節點根據文件創建請求生成當前文件的元數據,根據父目錄全局唯一標識符和文件名將當前文件的元數據提交到對象存儲服務器進行存儲; ` 5.2.5)所述指定節點將當前文件的元數據存入緩存中,然后將文件創建成功消息發送到負責當前文件父目錄的目錄元數據服務器,所述目錄元數據服務器將當前文件父目錄的目錄元數據信息更新至指定的對象存儲服務器; `5.2.6)所述指定節點將創建新文件成功的消息發給客戶端; `5.2.7)客戶端接收到文件創建成功消息,向用戶提示文件創建成功,跳轉執行步驟3); `5.3)執行查詢文件元數據: `5.3.1)客戶端跳轉執行步驟4.3)獲取當前文件父目錄的元數據信息,收到待查詢文件父目錄的元數據信息后返回執行步驟5.3.2); ` 5.3.2)客戶端將當前文件的文件名進行哈希,在文件元數據服務器集群中根據待查詢文件的哈希值找到負責當前文件的目標節點;` 5.3.3)客戶端向所述目標節點發送查詢文件元數據請求,所述查詢文件元數據請求信息包括父目錄全局唯一標識符、待查詢文件的文件名和文件完整路徑; ` 5.3.4)所述目標節點收到客戶端的查詢文件元數據請求,首先在內存中查找當前文件的文件元數據,如果查找成功則直接跳轉執行步驟5.3.5);如果查找失敗則使用父目錄全局唯一標識符和待查詢文件的文件名,在對象存儲服務器集群中定位存儲所述文件元數據的對象存儲服務器,然后從所述對象存儲服務器中讀取當前文件的文件元數據; `5.3.5)所述目標節點向客戶端發送待查詢文件的文件元數據; `5.3.6)客戶端收到目標節點發送的文件元數據,返回給用戶并跳轉執行步驟3); `5.4)執行更新文件元數據: ` 5.4.1)客戶端跳轉執行步驟4.3)獲取當前文件父目錄的元數據信息,收到當前文件父目錄的元數據信息后返回執行步驟5.4.2); `5.4.2)客戶端將當前文件的文件名進行哈希,在文件元數據服務器集群中根據待更新文件的哈希值找到負責待更新文件的目標節點; `5.4.3)客戶端向所述目標節點發送更新文件元數據請求,所述查詢文件元數據請求信息包括父目錄全局唯一標識符和新的文件元數據; `5.4.4)所述目標節點收到客戶端的更新文件元數據請求,首先在內存中查找當前文件的文件元數據,如果查找失敗則使用父目錄全局唯一標識符和待更新文件的文件名,在對象存儲服務器集群中定位存儲所述文件元數據的對象存儲服務器,然后從所述對象存儲服務器中讀取文件元數據;獲取更新文件元數據以后,檢查客戶端是否修改權限,如果沒有修改權限則向客戶端返回沒有權限的更新失敗消息,跳轉執行步驟3);如果有修改權限則更新文件元數據并向客戶端發送更新成功消息; ` 5.4.5)客戶端收到目標節點的發送的消息后返回給用戶,跳轉執行步驟3); `5.5)執行重命名文件: ` 5.5.1)客戶端跳轉執行步驟4.3)獲取當前文件父目錄的元數據信息,收到待重命名文件父目錄的元數據信息后返回執行步驟5.5.2); ` 5.5.2)根據當前文件父目錄的元數據信息判斷父目錄下是否有待重命名文件新名稱相同的文件,如果在父目錄下找到相同文件名的文件,則返回存在相同文件名消息給客戶端,跳轉執行步驟3);否則,將待重命名文件的新文件名進行哈希,在文件元數據服務器集群中根據當前文件的哈希值找到負責當前文件的目標節點; .5.5.3)客戶端向所述目標節點發送重命名文件請求,所述查詢文件元數據請求信息包括父目錄全局唯一標識符、舊文件名、新文件名和父目錄所在目錄元數據服務器編號; .5.5.4)所述目標節點接收客戶端發送的重命名文件請求,首先在內存中查找當前文件的文件元數據,如果查找失敗則使用父目錄全局唯一標識符和當前文件的文件名,在對象存儲服務器集群中定位存儲所述文件元數據的對象存儲服務器,然后從所述對象存儲服務器中讀取文件元數據;獲取當前文件的元數據以后,檢查客戶端是否有修改權限,如果沒有修改權限則向客戶端返回沒有權限的重命名失敗消息,跳轉執行步驟3);如果有修改權限,則更新文件元數據,通過新文件名哈希在文件元數據服務器集群中找到負責新文件名的新目標節點,將文件重命名信息和新文件元數據發送給所述新目標節點,所述新目標節點接收并緩存文件重命名信息和新文件元數據,然后將文件重命名信息和新文件元數據提交到存儲到指定的對象存儲服務器;同時所述目標節點向負責父目錄的目錄元數據服務器發送文件重命名請求,負責父目錄的目錄元數據服務器收到文件重命名請求,根據文件重命名請求更新父目錄元數據中對應當前文件的文件名;最后向客戶端發送重命名文件成功消息; .5.5.5)客戶端收到目標節點發送的消息并返回給用戶,跳轉執行步驟3); .5.6)執行刪除文件: .5.6.1)客戶端跳轉執行步驟4.3)獲取當前文件父目錄的元數據信息,收到當前文件父目錄的元數據信息后返回執行步驟5.6.2); .5.6.2)將當前文件的文件名進行哈希,在文件元數據服務器集群中根據當前文件的哈希值找到負責待刪除文件的目標節點; .5.6.3)客戶端向所述目標節點發送刪除文件請求,所述刪除文件請求包含父目錄全局唯一標識符、待刪除文件名和負責父目錄的目錄元數據服務器編號; .5.6.4)所述目標節點接收刪除文件請求,首先在內存中查找當前文件的文件元數據,如果查找失敗則使用父目錄全局唯一標識符和當前文件的文件名,在對象存儲服務器集群中定位存儲所述文件元數據的對象存儲服務器,然后從所述對象存儲服務器中讀取當前文件的文件元數據;最后獲取當前文件的文件元數據以后,檢查客戶端是否刪除權限,如果沒有刪除權限,則向客戶端返回沒有權限的刪除失敗消息,跳轉執行步驟3);如果有刪除權限,則刪除當前文件的元數據,并向父目錄所在的目錄元數據服務器發送刪除文件請求,父目錄所在的目錄元數據服務器收到刪除文件請求,刪除父目錄元數據信息中的該文件的信息;最后向客戶端發送刪除文件成功消息; .5.6.5)客戶端收到目標節點發送的消息并返回給用戶,跳轉執行步驟3)。
6.根據權利要求5所述的面向高性能計算的分布式文件系統元數據管理方法,其特征在于,所述目錄元數據服務器對目錄元數據的修改均通過更新日志定時進行,其詳細步驟如下:首先目錄元數據服務器在需要修改目錄元數據時將對目錄元數據的修改生成更新日志并緩存,然后目錄元數據服務器定時檢查本地緩存的更新日志,然后根據更新日志哈希目標目錄的完整路徑,根據哈希值與對象存儲服務器的映射關系表定位負責目標目錄的對象存儲服務器,并將對目錄元數據的修改提交給負責目標目錄的對象存儲服務器執行對目錄元數據的修改。
7.根據權利要求6所述的面向高性能計算的分布式文件系統元數據管理方法,其特征在于,所述文件元數據服務器對文件元數據的修改均通過更新日志進行,其詳細步驟如下:首先文件元數據服務器在需要修改文件元數據時將對文件元數據的修改生成更新日志并緩存,然后文件元數據服務器定時檢查本地緩存的更新日志,然后根據更新日志哈希目標文件父目錄的全局唯一標識符和目標文件的文件名,根據哈希值與對象存儲服務器的映射關系表定位負責當前文件的對象存儲服務器,并將對文件元數據的修改提交給負責目標文件的對象存儲服務 器執行對文件元數據的修改。
全文摘要
本發明公開了一種面向高性能計算的分布式文件系統元數據管理方法,方法步驟如下1)建立目錄元數據服務器集群、文件元數據服務器集群和對象存儲服務器集群;2)在目錄元數據服務器集群中建立全局的基于計數的布隆過濾器;3)在客戶端的操作請求到來時,跳轉執行步驟4)或步驟5);4)所述目錄元數據服務器集群響應客戶端的目錄操作請求對目錄元數據進行管理;5)所述文件元數據服務器集群響應客戶端的文件操作請求對文件元數據進行管理。本發明能夠有效解決目錄重命名帶來的元數據遷移問題,具有存儲性能高、維護開銷小、高負載無瓶頸、擴展性好、負載均衡的優點。
文檔編號H04L29/08GK103150394SQ20131009681
公開日2013年6月12日 申請日期2013年3月25日 優先權日2013年3月25日
發明者盧宇彤, 王立新, 肖立權, 周恩強, 肖儂, 所光, 張偉, 董勇, 陳海濤 申請人:中國人民解放軍國防科學技術大學