深度:全面解析Lustre文件系統(tǒng)

? ? ? Lustre架構(gòu)是一種集群存儲體系結(jié)構(gòu),其核心組件就是Lustre文件系統(tǒng)。該文件系統(tǒng)可在Linux操作系統(tǒng)上運行,并提供了符合POSIX標(biāo)準(zhǔn)的UNIX文件系統(tǒng)接口。Lustre是面向集群的存儲架構(gòu),它是基于Linux平臺的開源集群(并行)文件系統(tǒng),提供與POSIX兼容的文件系統(tǒng)接口。Lustre兩個最大特征是高擴(kuò)展性和高性能,能夠支持?jǐn)?shù)萬客戶端系統(tǒng)、PB級存儲容量、數(shù)百GB的聚合I/O吞吐量。Lustre是Scale-Out存儲架構(gòu),借助強(qiáng)大的橫向擴(kuò)展能力,通過增加服務(wù)器即可方便擴(kuò)展系統(tǒng)總存儲容量和性能。
Lustre的集群和并行架構(gòu),非常適合眾多客戶端并發(fā)進(jìn)行大文件讀寫的場合,但目前對于小文件應(yīng)用非常不適用,尤其是海量小文件應(yīng)用LOSF(Lots Of Small Files)。Lustre廣泛應(yīng)用于各種環(huán)境,目前部署最多的為高性能計算HPC,世界超級計算機(jī)TOP 10中的70%,TOP 30中的50%,TOP 100中的40%均部署了Lustre。另外,Lustre在石油、天然氣、制造、富媒體、金融等行業(yè)領(lǐng)域也被大量部署應(yīng)用。
? ? ?Lustre文件系統(tǒng)可運行在各種廠商的內(nèi)核上。一個Lustre文件系統(tǒng)在客戶端節(jié)點數(shù)量、磁盤存儲量、帶寬上進(jìn)行擴(kuò)大或縮小。可擴(kuò)展性和性能取決于可用磁盤、網(wǎng)絡(luò)帶寬以及系統(tǒng)中服務(wù)器的處理能力。?
? ? ? Lustre文件系統(tǒng)可以以多種配置進(jìn)行部署,這些配置的可擴(kuò)展性遠(yuǎn)遠(yuǎn)超出了迄今所觀察到生產(chǎn)系統(tǒng)中的規(guī)模和性能。
??
? ? ? Lustre 2.4或更高版本中,可使用ZFS作為Lustre的MDT,OST和MGS存儲的后備文件系統(tǒng)。這使Lustre能夠利用ZFS的可擴(kuò)展性和數(shù)據(jù)完整性特性來實現(xiàn)單個存儲目標(biāo),Lustre文件系統(tǒng)典型特性如下。
? ? ? Lustre 2.4或更高版本中,可配置多個MDT的主動/主動故障切換。這允許了通過添加MDT存儲設(shè)備和MDS節(jié)點來擴(kuò)展Lustre文件系統(tǒng)的元數(shù)據(jù)性能。
? ? ? 一個Lustre安裝實例包括管理服務(wù)器(MGS)和一個或多個與Lustre網(wǎng)絡(luò)(LNet)互連的Lustre文件系統(tǒng)。Lustre文件系統(tǒng)組件的基本配置如下圖所示:

管理服務(wù)器(MGS):MGS存儲集群中所有Lustre文件系統(tǒng)的配置信息,并將此信息提供給其他Lustre組件。每個Lustre目標(biāo)(target)通過聯(lián)系MGS提供信息,而Lustre客戶通過聯(lián)系MGS獲取信息。MGS最好有自己的存儲空間,以便可以獨立管理。但同時,MGS可以與MDS放在一起,并共享存儲空間,如上圖中所示。
? ? ? 在Lustre 2.4中,分布式命名空間環(huán)境(DNE)中可支持多個MDT。除保存文件系統(tǒng)根目錄的主MDT之外,還可以添加其他MDS節(jié)點,每個MDS節(jié)點都有自己的MDT,以保存文件系統(tǒng)的子目錄樹。在Lustre 2.8中,DNE還允許文件系統(tǒng)將單個目錄的文件分布到多個MDT節(jié)點。分布在多個MDT上的目錄稱為條帶化目錄。
? ? ? Lustre客戶端軟件為Linux虛擬文件系統(tǒng)和Lustre服務(wù)器之間提供了接口。客戶端軟件包括一個管理客戶端(MGC),一個元數(shù)據(jù)客戶端(MDC)和多個對象存儲客戶端(OSC)。每個OSC對應(yīng)于文件系統(tǒng)中的一個OST。
? ? ? 邏輯對象卷(LOV)通過聚合OSC以提供對所有OST的透明訪問。因此,掛載了Lustre文件系統(tǒng)的客戶端會看到一個連貫的同步名字空間。多個客戶端可以同時寫入同一文件的不同部分,而其他客戶端可以同時讀取文件。
? ? ? 與LOV文件訪問方式類似,邏輯元數(shù)據(jù)卷(LMV)通過聚合MDC提供一種對所有MDT透明的訪問。這使得了客戶端可將多個MDT上的目錄樹視為一個單一的連貫名字空間,并將條帶化目錄合并到客戶端形成一個單一目錄以便用戶和應(yīng)用程序查看。

? ? ? Lustre Networking(LNet)是一種定制網(wǎng)絡(luò)API,提供處理Lustre文件系統(tǒng)服務(wù)器和客戶端的元數(shù)據(jù)和文件I/O數(shù)據(jù)的通信基礎(chǔ)設(shè)施。
Lustr文件系統(tǒng)在規(guī)模上,一個Lustre文件系統(tǒng)集群可以包含數(shù)百個OSS和數(shù)千個客戶端(如下圖所示)。Lustre集群中可以使用多種類型的網(wǎng)絡(luò),OSS之間的共享存儲啟用故障切換功能。

Lustre文件系統(tǒng)存儲與I/O,在 Lustre 2.0?中引入了Lustre文件標(biāo)識符(FID)來替換用于識別文件或?qū)ο蟮腢NIX inode編號。FID是一個128位的標(biāo)識符,其中,64位用于存儲唯一的序列號,32位用于存儲對象標(biāo)識符(OID),另外32位用于存儲版本號。序列號在文件系統(tǒng)(OST和MDT)中的所有Lustre目標(biāo)中都是唯一的。這一改變使未來支持多種 MDT 和ZFS(均在Lustre 2.4中引入)成為了可能。
? ? ? 同時,在此版本中也引入了一個名為FID-in-dirent(也稱為Dirdata)的ldiskfs功能,F(xiàn)ID作為文件名稱的一部分存儲在父目錄中。該功能通過減少磁盤I/O顯著提高了ls命令執(zhí)行的性能。FID-in-dirent是在創(chuàng)建文件時生成的。
? ? ? 在 Lustre 2.4 中,LFSCK文件系統(tǒng)一致性檢查工具提供了對現(xiàn)有文件啟用FID-in-dirent的功能。具體如下:
為1.8版本文件系統(tǒng)上現(xiàn)有文件生成IGIF模式的FID。
驗證每個文件的FID-in-dirent,如其無效或丟失,則重新生成FID-in-dirent。
驗證每個linkEA條目,如其無效或丟失,則重新生成。linkEA由文件名和父類FID組成,它作為擴(kuò)展屬性存儲在文件本身中。因此,linkEA可以用來重建文件的完整路徑名。
? ? ? 有關(guān)文件數(shù)據(jù)在OST上的位置信息將作為擴(kuò)展屬性布局EA,存儲在由FID標(biāo)識的MDT對象中(具體如下圖所示)。若該文件是普通文件(即不是目錄或符號鏈接),則MDT對象1對N地指向包含文件數(shù)據(jù)的OST對象。若該MDT文件指向一個對象,則所有文件數(shù)據(jù)都存儲在該對象中。若該MDT文件指向多個對象,則使用RAID 0將文件數(shù)據(jù)劃分為多個對象,將每個對象存儲在不同的OST上。

? ? ? 當(dāng)客戶端讀寫文件時,首先從文件的MDT對象中獲取布局EA,然后使用這個信息在文件上執(zhí)行I / O,直接與存儲對象的OSS節(jié)點進(jìn)行交互。具體過程如下圖所示。

網(wǎng)絡(luò)帶寬等于OSS到目標(biāo)的總帶寬。
磁盤帶寬等于存儲目標(biāo)(OST)的磁盤帶寬總和,受網(wǎng)絡(luò)帶寬限制。
總帶寬等于磁盤帶寬和網(wǎng)絡(luò)帶寬的最小值。
可用的文件系統(tǒng)空間等于所有OST的可用空間總和。
? ? ? Lustre文件系統(tǒng)高性能的主要原因之一是能夠以輪詢方式跨多個OST將數(shù)據(jù)條帶化。用戶可根據(jù)需要為每個文件配置條帶數(shù)量,條帶大小和OST。當(dāng)單個文件的總帶寬超過單個OST的帶寬時,可以使用條帶化來提高性能。同時,當(dāng)單個OST沒有足夠的可用空間來容納整個文件時,條帶化也能發(fā)揮它的作用。
? ? ? 如圖下圖所示,條帶化允許將文件中的數(shù)據(jù)段或“塊”存儲在不同的OST中。在Lustre文件系統(tǒng)中,通過RAID 0模式將數(shù)據(jù)在一定數(shù)量的對象上進(jìn)行條帶化。一個文件中處理的對象數(shù)稱為stripe_count。每個對象包含文件中的一個數(shù)據(jù)塊,當(dāng)寫入特定對象的數(shù)據(jù)塊超過stripe_size時,文件中的下一個數(shù)據(jù)塊將存儲在下一個對象上。stripe_count和stripe_size的默認(rèn)值由為文件系統(tǒng)設(shè)置的,其中,stripe_count為1,stripe_size為1MB。用戶可以在每個目錄或每個文件上更改這些值。
? ? ? 下圖中,文件C的stripe_size大于文件A的stripe_size,表明更多的數(shù)據(jù)被允許存儲在文件C的單個條帶中。文件A的stripe_count為3,則數(shù)據(jù)在三個對象上條帶化。文件B和文件C的stripe_count是1。OST上沒有為未寫入的數(shù)據(jù)預(yù)留空間。

? ? ? 最大文件大小不受單個目標(biāo)大小的限制。在Lustre文件系統(tǒng)中,文件可以跨越多個對象(最多2000個)進(jìn)行分割,每個對象可使用多達(dá)16 TB的ldiskfs,多達(dá)256PB的ZFS。也就是說,ldiskfs的最大文件大小為31.25 PB,ZFS的最大文件大小為8EB。Lustre文件系統(tǒng)上的文件大小受且僅受OST上可用空間的限制,Lustre最大可支持2 ^ 63字節(jié)(8EB)的文件。
? ? ? 注意: Lustre 2.2之前,單個文件的最大條帶數(shù)為160個OST。盡管一個文件只能被分割成2000個以上的對象,但是Lustre文件系統(tǒng)可以有數(shù)千個。
? ? ?實際上前面已經(jīng)提到,Lustre并不適合小文件I/O應(yīng)用,性能表現(xiàn)非常差。因此,建議不要將Lustre應(yīng)用于LOSF場合。不過,Lustre操作手冊仍然給出了一些針對小文件的優(yōu)化措施。?
? ? ?Lustre提供了強(qiáng)大的系統(tǒng)監(jiān)控與控制接口用于進(jìn)行性能分析與調(diào)優(yōu),對于小文件I/O,也可以通過調(diào)整一些系統(tǒng)參數(shù)進(jìn)行優(yōu)化。
相關(guān)閱讀:GPFS并行文件系統(tǒng)原理解析

轉(zhuǎn)載申明:轉(zhuǎn)載本號文章請注明作者和來源,本號發(fā)布文章若存在版權(quán)等問題,請留言聯(lián)系處理,謝謝。
推薦閱讀
更多架構(gòu)相關(guān)技術(shù)知識總結(jié)請參考“架構(gòu)師技術(shù)全聯(lián)盟書店”相關(guān)電子書(35本技術(shù)資料打包匯總詳情可通過“閱讀原文”獲取)。
內(nèi)容持續(xù)更新,現(xiàn)下單“架構(gòu)師技術(shù)全店打包匯總(全)”,后續(xù)可享全店內(nèi)容更新“免費”贈閱,格僅收188元(原總價270元)。
溫馨提示:
掃描二維碼關(guān)注公眾號,點擊閱讀原文鏈接獲取“架構(gòu)師技術(shù)全店資料打包匯總(全)”電子書資料詳情。


