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


? ? ? 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組成,它作為擴展屬性存儲在文件本身中。因此,linkEA可以用來重建文件的完整路徑名。
? ? ? 有關(guān)文件數(shù)據(jù)在OST上的位置信息將作為擴展屬性布局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é)點進行交互。具體過程如下圖所示。

網(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ù)量的對象上進行條帶化。一個文件中處理的對象數(shù)稱為stripe_count。每個對象包含文件中的一個數(shù)據(jù)塊,當(dāng)寫入特定對象的數(shù)據(jù)塊超過stripe_size時,文件中的下一個數(shù)據(jù)塊將存儲在下一個對象上。stripe_count和stripe_size的默認值由為文件系統(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個)進行分割,每個對象可使用多達16 TB的ldiskfs,多達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提供了強大的系統(tǒng)監(jiān)控與控制接口用于進行性能分析與調(diào)優(yōu),對于小文件I/O,也可以通過調(diào)整一些系統(tǒng)參數(shù)進行優(yōu)化。

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

