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