在高性能计算(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分区,像使用本地硬盘一样使用分布式存储。
![未标题-1 [已恢复]22-03-03.png](https://ucc.alicdn.com/pic/developer-ecology/rrfkvqeyjfoao_82c42c18a3904f65aea5bc0a3e0bfa39.png?x-oss-process=image/resize,w_1400/format,webp)
三、 部署实战:从零搭建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的传输基石。在高带宽网络下,默认参数往往无法跑满物理带宽。

操作方式: 修改 /etc/modprobe.d/lnet.conf,例如: options lnet networks=o2ib(ib0) peer_credits=32 credits=256
2. 操作系统与内核参数 (OS Level)
服务器端的内核调度对存储延迟影响极大。

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操作),调高线程数可降低排队。
- MDT预读(Metadata Read-ahead):
对象存储服务器 (OSS) 优化
- OSS并发线程:
lctl set_param ost.*.threads_max=256根据CPU核心数调整,通常建议为核心数的2-4倍。 - 最大条带大小:
lctl set_param obdfilter.*.brw_size=16将单次RPC的I/O大小从默认的1MB提升至16MB,显著提升大块连续写吞吐量。
- OSS并发线程:
4. 客户端 (Client) 条带化策略优化
条带化(Striping)是Lustre最具威力的工具,需要根据应用模型动态调整。

为某个高性能计算任务目录设置高条带化
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架构师与运维工程师的必经之路。