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


? ? ? Lustre客戶端軟件為Linux虛擬文件系統(tǒng)和Lustre服務(wù)器之間提供了接口。客戶端軟件包括一個(gè)管理客戶端(MGC),一個(gè)元數(shù)據(jù)客戶端(MDC)和多個(gè)對(duì)象存儲(chǔ)客戶端(OSC)。每個(gè)OSC對(duì)應(yīng)于文件系統(tǒng)中的一個(gè)OST。
? ? ? 邏輯對(duì)象卷(LOV)通過聚合OSC以提供對(duì)所有OST的透明訪問。因此,掛載了Lustre文件系統(tǒng)的客戶端會(huì)看到一個(gè)連貫的同步名字空間。多個(gè)客戶端可以同時(shí)寫入同一文件的不同部分,而其他客戶端可以同時(shí)讀取文件。
? ? ? 與LOV文件訪問方式類似,邏輯元數(shù)據(jù)卷(LMV)通過聚合MDC提供一種對(duì)所有MDT透明的訪問。這使得了客戶端可將多個(gè)MDT上的目錄樹視為一個(gè)單一的連貫名字空間,并將條帶化目錄合并到客戶端形成一個(gè)單一目錄以便用戶和應(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ī)模上,一個(gè)Lustre文件系統(tǒng)集群可以包含數(shù)百個(gè)OSS和數(shù)千個(gè)客戶端(如下圖所示)。Lustre集群中可以使用多種類型的網(wǎng)絡(luò),OSS之間的共享存儲(chǔ)啟用故障切換功能。

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

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

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

? ? ? 最大文件大小不受單個(gè)目標(biāo)大小的限制。在Lustre文件系統(tǒng)中,文件可以跨越多個(gè)對(duì)象(最多2000個(gè))進(jìn)行分割,每個(gè)對(duì)象可使用多達(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之前,單個(gè)文件的最大條帶數(shù)為160個(gè)OST。盡管一個(gè)文件只能被分割成2000個(gè)以上的對(duì)象,但是Lustre文件系統(tǒng)可以有數(shù)千個(gè)。
? ? ?實(shí)際上前面已經(jīng)提到,Lustre并不適合小文件I/O應(yīng)用,性能表現(xiàn)非常差。因此,建議不要將Lustre應(yīng)用于LOSF場(chǎng)合。不過,Lustre操作手冊(cè)仍然給出了一些針對(duì)小文件的優(yōu)化措施。?
? ? ?Lustre提供了強(qiáng)大的系統(tǒng)監(jiān)控與控制接口用于進(jìn)行性能分析與調(diào)優(yōu),對(duì)于小文件I/O,也可以通過調(diào)整一些系統(tǒng)參數(shù)進(jìn)行優(yōu)化。

免責(zé)申明:本號(hào)聚焦相關(guān)技術(shù)分享,內(nèi)容觀點(diǎn)不代表本號(hào)立場(chǎng),可追溯內(nèi)容均注明來源,發(fā)布文章若存在版權(quán)等問題,請(qǐng)留言聯(lián)系刪除,謝謝。
電子書<服務(wù)器基礎(chǔ)知識(shí)全解(終極版)>更新完畢。
獲取方式:點(diǎn)擊“閱讀原文”即可查看182頁?PPT可編輯版本和PDF閱讀版本詳情。
溫馨提示:
請(qǐng)搜索“AI_Architect”或“掃碼”關(guān)注公眾號(hào)實(shí)時(shí)掌握深度技術(shù)分享,點(diǎn)擊“閱讀原文”獲取更多原創(chuàng)技術(shù)干貨。

