写点什么

毅硕 HPC | Lustre 文件系统在 HPC 集群中的部署实战

作者:INSVAST
  • 2025-12-23
    广东
  • 本文字数:3941 字

    阅读完需:约 13 分钟

毅硕HPC | Lustre文件系统在HPC集群中的部署实战

在高性能计算(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 Serverbaseurl=https://downloads.whamcloud.com/public/lustre/lustre-2.15.3/el8.8/server/gpgcheck=0enabled=1
[e2fsprogs-wc]name=e2fsprogs-wcbaseurl=https://downloads.whamcloud.com/public/e2fsprogs/latest/el8/gpgcheck=0enabled=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 Serverdnf 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 Clientbaseurl=https://downloads.whamcloud.com/public/lustre/lustre-2.15.3/el8.8/client/gpgcheck=0enabled=1
复制代码
  • 计算节点安装 Lustre Client

yum install -y lustre-client kmod-lustre-client
复制代码


3. 格式化并初始化存储

这是部署的关键步骤,使用 mkfs.lustre 命令。

  • 在 MDS 上初始化 MDT:

# --mgs 表示同时作为管理服务器,--mdt 表示元数据目标modprobe ldiskfsmkfs.lustre --fsname=hpcfs --mgs --mdt --index=0 /dev/xvdbmkdir /mnt/mdt && mount -t lustre /dev/xvdb /mnt/mdt
复制代码



可以看到:

# df -hFilesystem             Size  Used Avail Use% Mounted ondevtmpfs               4.8G     0  4.8G   0% /devtmpfs                  4.8G     0  4.8G   0% /dev/shmtmpfs                  4.8G   17M  4.8G   1% /runtmpfs                  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/efitmpfs                  971M     0  971M   0% /run/user/1001manage01:/slurm-data    17G  7.2G  9.9G  43% /slurm-datatmpfs                  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/mdtFilesystem       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/xvdcmkdir /mnt/ost0 && mount -t lustre /dev/xvdc /mnt/ost0
复制代码

可以看到:

# df -hFilesystem             Size  Used Avail Use% Mounted ondevtmpfs               4.8G     0  4.8G   0% /devtmpfs                  4.8G     0  4.8G   0% /dev/shmtmpfs                  4.8G   18M  4.8G   1% /runtmpfs                  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/efitmpfs                  971M     0  971M   0% /run/user/1001manage01:/slurm-data    17G  7.2G  9.9G  43% /slurm-datatmpfs                  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 操作),调高线程数可降低排队。

  • 对象存储服务器 (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 最具威力的工具,需要根据应用模型动态调整。

为某个高性能计算任务目录设置高条带化

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设置新文件的条带数为 4lfs setstripe -c 4 /pfs/storage/big_file.dat
复制代码

2. 健康监控

运维人员需重点关注:

  • LNET 状态:通过 lnetctl 检查网络连通性。

  • 定期检查平衡性:使用 lfs df -h。如果某些 OST 的空间使用率远高于其他,会触发 I/O 倾斜,导致整体性能下降。

  • 日志监控:监控 /var/log/messagesdmesg 中的"LustreError",特别是关于 "slow RPC"的报警,这通常预示着底层硬盘可能存在坏道或网络链路不稳定。

  • Benchmark 测试:在交付前,务必使用 IOR 或 mdtest 进行基准测试,验证参数调整前后的吞吐率(GB/s)和 IOPS 差异。


六、 总结与最佳实践

在 HPC 项目实施中,Lustre 分布式并行文件系统的稳定性直接决定了整个集群的作业运行率。

  • 高可用性 (HA):在生产环境中,务必为 MDS 配置双机热备(如使用 Pacemaker+Corosync)。

  • 硬件选型:MDT 建议使用 NVMe SSD 以加速元数据处理;OST 则可根据成本选择 SAS HDD。

Lustre 不仅仅是一个存储系统,它是连接计算资源与科学数据的纽带。深入掌握其部署与调优,是每一位 HPC 架构师与运维工程师的必经之路。

用户头像

INSVAST

关注

还未添加个人签名 2023-07-04 加入

还未添加个人简介

评论

发布
暂无评论
毅硕HPC | Lustre文件系统在HPC集群中的部署实战_高性能计算_INSVAST_InfoQ写作社区