在高性能計算(HPC)領域,計算能力(算力)與數據吞吐能力(I/O)始終是相輔相成的。隨着並行計算規模的擴大,傳統的NAS存儲往往會成為系統的瓶頸。Lustre作為一種開源的、分佈式並行文件系統,憑藉其卓越的可擴展性和極高的I/O吞吐量,成為了全球Top 500超算中心的首選。
一、 為什麼HPC離不開Lustre?
在典型的HPC任務中(如氣象預報、基因測序、流體力學模擬),成百上千個計算節點需要同時讀寫同一份數據集。Lustre的核心優勢在於:
- 高帶寬與高併發:通過將數據條帶化(Striping)分佈在多個存儲服務器上,實現併發訪問。
- 元數據與數據分離:獨立處理文件索引與實際數據,極大提升了文件查找與讀寫效率。
- 橫向擴展能力:支持在線增加存儲節點,容量可達PB級甚至EB級。
二、 Lustre核心架構拆解
在部署之前,必須理解其三大核心組件:
- MDS (Metadata Server):元數據服務器。負責管理文件系統的目錄結構、權限、文件佈局。其後端的存儲實體稱為MDT。
- OSS (Object Storage Server):對象存儲服務器。負責存儲實際的文件內容。其後端的存儲實體稱為OST。
- Lustre Client:計算節點通過客户端掛載Lustre分區,像使用本地硬盤一樣使用分佈式存儲。
三、 部署實戰:從零搭建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
安裝成功後查看當前默認使用的內核: grubby --info=ALL | grep -E "kernel|index"
按索引設置默認內核為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
重啓系統,若提示內核非法的簽名,關閉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
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
可以看到:
# 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上創建一組特殊的系統文件(如 CATALOGS, CONFIGS, O/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. 健康監控
運維人員需重點關注:
- LNET狀態:通過 lnetctl 檢查網絡連通性。
- 定期檢查平衡性:使用 lfs df -h。如果某些OST的空間使用率遠高於其他,會觸發I/O傾斜,導致整體性能下降。
- 日誌監控:監控 /var/log/messages 或 dmesg 中的"LustreError",特別是關於 "slow RPC"的報警,這通常預示着底層硬盤可能存在壞道或網絡鏈路不穩定。
- Benchmark測試:在交付前,務必使用IOR或mdtest進行基準測試,驗證參數調整前後的吞吐率(GB/s)和IOPS差異。
六、 總結與最佳實踐
在HPC項目實施中,Lustre分佈式並行文件系統的穩定性直接決定了整個集羣的作業運行率。
- 高可用性 (HA):在生產環境中,務必為MDS配置雙機熱備(如使用Pacemaker+Corosync)。
- 硬件選型:MDT建議使用NVMe SSD以加速元數據處理;OST則可根據成本選擇SAS HDD。
Lustre不僅僅是一個存儲系統,它是連接計算資源與科學數據的紐帶。深入掌握其部署與調優,是每一位HPC架構師與運維工程師的必經之路。