在高性能計算(HPC)領域,計算能力(算力)與數據吞吐能力(I/O)始終是相輔相成的。隨着並行計算規模的擴大,傳統的NAS存儲往往會成為系統的瓶頸。Lustre作為一種開源的、分佈式並行文件系統,憑藉其卓越的可擴展性和極高的I/O吞吐量,成為了全球Top 500超算中心的首選。


一、 為什麼HPC離不開Lustre?

在典型的HPC任務中(如氣象預報、基因測序、流體力學模擬),成百上千個計算節點需要同時讀寫同一份數據集。Lustre的核心優勢在於:

  1. 高帶寬與高併發:通過將數據條帶化(Striping)分佈在多個存儲服務器上,實現併發訪問。
  2. 元數據與數據分離:獨立處理文件索引與實際數據,極大提升了文件查找與讀寫效率。
  3. 橫向擴展能力:支持在線增加存儲節點,容量可達PB級甚至EB級。

二、 Lustre核心架構拆解

在部署之前,必須理解其三大核心組件:

  • MDS (Metadata Server):元數據服務器。負責管理文件系統的目錄結構、權限、文件佈局。其後端的存儲實體稱為MDT。
  • OSS (Object Storage Server):對象存儲服務器。負責存儲實際的文件內容。其後端的存儲實體稱為OST。
  • Lustre Client:計算節點通過客户端掛載Lustre分區,像使用本地硬盤一樣使用分佈式存儲。

 毅碩HPC | Lustre文件系統在HPC集羣中的部署實戰_HPC



三、 部署實戰:從零搭建Lustre環境

1.  環境準備

  • 操作系統:建議使用RHEL/CentOS 7.x或Rocky Linux 8.x。
  • 內核要求:Lustre服務器端需要安裝經過補丁修改的特製內核。
  • 網絡:建議使用InfiniBand (IB) 或10/25/100G以太網。

2.  安裝Lustre軟件包

在MDS和OSS節點上配置Whamcloud Lustre官方Repo並安裝(組合節點,MGS、MDS和OSS部署在同一台虛擬機):

  • MDS節點配置Whamcloud Lustre Server和e2fsprogs源:nano /etc/yum.repos.d/lustre.repo
[lustre-server]
name=Lustre Server
baseurl=https://downloads.whamcloud.com/public/lustre/lustre-2.15.3/el8.8/server/
gpgcheck=0
enabled=1

[e2fsprogs-wc]
name=e2fsprogs-wc
baseurl=https://downloads.whamcloud.com/public/e2fsprogs/latest/el8/
gpgcheck=0
enabled=1
  • MDS節點安裝Lustre Server:
# 先安裝patch後的內核:
dnf install -y kernel-4.18.0-477.10.1.el8_lustre kernel-headers-4.18.0-477.10.1.el8_lustre kernel-core-4.18.0-477.10.1.el8_lustre
# 安裝Lustre Server
dnf install -y lustre lustre-osd-ldiskfs-mount kmod-lustre-osd-ldiskfs

 毅碩HPC | Lustre文件系統在HPC集羣中的部署實戰_HPC_02

安裝成功後查看當前默認使用的內核: grubby --info=ALL | grep -E "kernel|index"

 毅碩HPC | Lustre文件系統在HPC集羣中的部署實戰_高性能計算_03

按索引設置默認內核為lustre:grubby --set-default-index=1 。

確定當前引導模式,重新生成配置文件:

[ -d /sys/firmware/efi ] && echo "EFI Mode" || echo "Legacy Mode"

# 輸出EFI Mode 則執行:
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

# 輸出Legacy Mode 則執行
grub2-mkconfig -o /boot/grub2/grub.cfg

 毅碩HPC | Lustre文件系統在HPC集羣中的部署實戰_Lustre_04

重啓系統,若提示內核非法的簽名,關閉secure boot再重啓系統。執行uname -r 查看是否設置成功:

4.18.0-477.10.1.el8_lustre.x86_64
  • 計算節點上配置Whamcloud Lustre Client源:nano /etc/yum.repos.d/lustre.repo
[lustre-client]
name=Lustre Client
baseurl=https://downloads.whamcloud.com/public/lustre/lustre-2.15.3/el8.8/client/
gpgcheck=0
enabled=1
  • 計算節點安裝Lustre Client
yum install -y lustre-client kmod-lustre-client

 毅碩HPC | Lustre文件系統在HPC集羣中的部署實戰_Lustre_05

3.  格式化並初始化存儲

這是部署的關鍵步驟,使用 mkfs.lustre 命令。

  • 在MDS上初始化MDT:
# --mgs 表示同時作為管理服務器,--mdt 表示元數據目標
modprobe ldiskfs
mkfs.lustre --fsname=hpcfs --mgs --mdt --index=0 /dev/xvdb
mkdir /mnt/mdt && mount -t lustre /dev/xvdb /mnt/mdt

 毅碩HPC | Lustre文件系統在HPC集羣中的部署實戰_部署_06

可以看到:

# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               4.8G     0  4.8G   0% /dev
tmpfs                  4.8G     0  4.8G   0% /dev/shm
tmpfs                  4.8G   17M  4.8G   1% /run
tmpfs                  4.8G     0  4.8G   0% /sys/fs/cgroup
/dev/mapper/rhel-root   70G   20G   51G  28% /
/dev/xvda2            1014M  352M  663M  35% /boot
/dev/mapper/rhel-home   41G   15G   27G  36% /home
/dev/xvda1             599M  5.8M  594M   1% /boot/efi
tmpfs                  971M     0  971M   0% /run/user/1001
manage01:/slurm-data    17G  7.2G  9.9G  43% /slurm-data
tmpfs                  971M     0  971M   0% /run/user/0
/dev/xvdb               56G  5.6M   51G   1% /mnt/mdt
# /dev/xvdb原100GB

Lustre的ldiskfs後端文件系統在格式化時,為了保障元數據的高性能和高可靠性,採取了特殊的預留和分配策略。

  • 元數據預留 (Inode Space):Lustre的MDT並不存儲實際文件內容,而是存儲文件的“索引”(元數據)。為了防止在磁盤空間還沒滿時元數據索引(Inode)就耗盡,mkfs.lustre 在格式化時會預分配大量的Inode。在 df 命令看來,這些預分配的結構佔用了大量“已用”或“不可用”的空間。
  • Journal(日誌) 空間:為了保證元數據的一致性,Lustre會分配一個較大的Journal區(通常為400MB到數GB),用於記錄事務日誌。
  • 系統保留空間 (Reserved Blocks):默認情況下,Ext4/ldiskfs會保留5%的空間供root用户使用,防止空間完全塞滿導致系統崩潰。
  • Lustre內部管理開銷:Lustre會在MDT上創建一組特殊的系統文件(如 CATALOGSCONFIGSO/0/LAST_ID 等),用於管理整個集羣的配置和對象索引。

可以看到Inode數量非常龐大:

# df -i /mnt/mdt
Filesystem       Inodes IUsed    IFree IUse% Mounted on
/dev/xvdb      41943040   266 41942774    1% /mnt/mdt
  • 在OSS(即MDS) 上初始化OST:
# --mgsnode 指向 MDS 的地址,--ost 表示對象存儲目標
mkfs.lustre --fsname=hpcfs --mgsnode=192.168.1.11@tcp --ost --index=0 /dev/xvdc
mkdir /mnt/ost0 && mount -t lustre /dev/xvdc /mnt/ost0

可以看到:

# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               4.8G     0  4.8G   0% /dev
tmpfs                  4.8G     0  4.8G   0% /dev/shm
tmpfs                  4.8G   18M  4.8G   1% /run
tmpfs                  4.8G     0  4.8G   0% /sys/fs/cgroup
/dev/mapper/rhel-root   70G   20G   51G  28% /
/dev/xvda2            1014M  352M  663M  35% /boot
/dev/mapper/rhel-home   41G   15G   27G  36% /home
/dev/xvda1             599M  5.8M  594M   1% /boot/efi
tmpfs                  971M     0  971M   0% /run/user/1001
manage01:/slurm-data    17G  7.2G  9.9G  43% /slurm-data
tmpfs                  971M     0  971M   0% /run/user/0
/dev/xvdb               56G  5.6M   51G   1% /mnt/mdt
/dev/xvdc               98G  1.1M   93G   1% /mnt/ost0
# /dev/xvdc 100GB

4.  客户端掛載

在計算節點上執行:

mount -t lustre 192.168.1.11@tcp:/hpcfs /pfs/storage

四、 Lustre詳細優化參數表

1.  LNet網絡層優化 (InfiniBand場景)

LNet是Lustre的傳輸基石。在高帶寬網絡下,默認參數往往無法跑滿物理帶寬。

參數分類

參數項 / 路徑

建議取值

説明

併發數

peer_credits

32或64

單個對端允許的併發請求數,高併發集羣建議調大

併發數

credits

256

LNet 層的總信譽額度,確保有足夠的槽位處理請求

內存限制

max_rpcs_in_flight

32-128

控制客户端到服務器同時進行的RPC數量

網絡超時

lnet_transaction_timeout

50

在網絡擁塞或丟包時縮短超時時間,加速故障轉移

操作方式: 修改 /etc/modprobe.d/lnet.conf,例如: options lnet networks=o2ib(ib0) peer_credits=32 credits=256

2.  操作系統與內核參數 (OS Level)

服務器端的內核調度對存儲延遲影響極大。

優化項

路徑 / 命令

推薦配置

目的

磁盤調度

/sys/block/*/queue/scheduler

deadline或noop

避免複雜的電梯算法干擾Lustre自身的並行I/O調度

預讀大小

/sys/block/*/queue/read_ahead_kb

4096-16384

增加底層磁盤預讀,提升大文件順序讀性能

髒數據比例

vm.dirty_ratio

20-40

增大內核緩衝區,平衡內存壓力與寫入吞吐

中斷綁定

irqbalance

關閉並手動綁定

將IB網卡中斷綁定到特定CPU核心,減少上下文切換

3.  Lustre核心性能參數 (MDS/OSS)

這些參數通常通過 lctl 命令在運行時動態調整,或在掛載時持久化。

  • 元數據服務器 (MDS) 優化
  • MDT預讀(Metadata Read-ahead): lctl set_param mdt.*.dir_restripe=1 (僅限Lustre 2.12+) 允許在大型目錄掃描時進行更高效的元數據獲取。
  • 最大線程數: lctl set_param mdt.*.threads_max=512 對於高併發元數據請求(如大量ls或stat操作),調高線程數可降低排隊。
  • 對象存儲服務器 (OSS) 優化
  • OSS併發線程: lctl set_param ost.*.threads_max=256 根據CPU核心數調整,通常建議為核心數的2-4倍。

  • 最大條帶大小: lctl set_param obdfilter.*.brw_size=16 將單次RPC的I/O大小從默認的1MB提升至16MB,顯著提升大塊連續寫吞吐量。

4.  客户端 (Client) 條帶化策略優化

條帶化(Striping)是Lustre最具威力的工具,需要根據應用模型動態調整。

應用類型

建議Stripe Count

建議Stripe Size

理由

海量小文件

1

1M

避免多台OSS尋址開銷

單文件並行寫

8-(-1) (全部)

1M-4M

利用多個OST的聚合帶寬,適合Checkpoint文件

氣象/流體大文件


4-16

2M

平衡單文件帶寬與系統負載

為某個高性能計算任務目錄設置高條帶化

lfs setstripe -c 16 -S 2M /pfs/storage/simulation_data/




五、 運維建議與監控

1.  條帶化策略 (File Striping)

這是Lustre的靈魂。運維人員可以根據業務需求調整文件在多少個OST上分佈。

  • 小文件場景:設置 stripe_count=1,減少尋址開銷。
  • 大文件/高併發場景:增加 stripe_count,將讀寫壓力分散到多個OSS。
# 查看當前目錄條帶屬性
lfs getstripe /pfs/storage/data
# 設置新文件的條帶數為 4
lfs setstripe -c 4 /pfs/storage/big_file.dat

2.  健康監控

運維人員需重點關注:

  1. LNET狀態:通過 lnetctl 檢查網絡連通性。
  2. 定期檢查平衡性:使用 lfs df -h。如果某些OST的空間使用率遠高於其他,會觸發I/O傾斜,導致整體性能下降。
  3. 日誌監控:監控 /var/log/messages 或 dmesg 中的"LustreError",特別是關於 "slow RPC"的報警,這通常預示着底層硬盤可能存在壞道或網絡鏈路不穩定。
  4. Benchmark測試:在交付前,務必使用IOR或mdtest進行基準測試,驗證參數調整前後的吞吐率(GB/s)和IOPS差異。


六、 總結與最佳實踐

在HPC項目實施中,Lustre分佈式並行文件系統的穩定性直接決定了整個集羣的作業運行率。

  • 高可用性 (HA):在生產環境中,務必為MDS配置雙機熱備(如使用Pacemaker+Corosync)。
  • 硬件選型:MDT建議使用NVMe SSD以加速元數據處理;OST則可根據成本選擇SAS HDD。

Lustre不僅僅是一個存儲系統,它是連接計算資源與科學數據的紐帶。深入掌握其部署與調優,是每一位HPC架構師與運維工程師的必經之路。