HPC
DCV 应用教程
DCV | Nice DCV 安装手册
DCV | RLM 提取 HOSTID
EF Portal and DCV HA Solution
Enginframe 应用教程
Enginframe | 技术参数说明
毅硕HPC教程
毅硕HPC | HPC环境下的LDAP配置
毅硕HPC | Rocky Linux 9 SLURM软件编译安装
毅硕HPC | RHEL 8 上的NVIDIA驱动安装
毅硕HPC | 配置SLURM作业队列优先级
毅硕HPC | Pritunl + ECS + Frp 搭建远程办公VPN
毅硕HPC | 在HPC集群上优雅地使用 Conda
毅硕HPC | 一文详解HPC环境中的MPI并行计算
毅硕HPC | NVIDIA DGX Spark 万字硬核评测:将AI超级工厂带上桌面
毅硕HPC | Lustre文件系统在HPC集群中的部署实战
毅硕HPC | InfiniBand网络在HPC集群中的核心应用
毅硕HPC | OpenPBS构建高效稳定的HPC作业调度环境
毅硕HPC | HPC集群LSF调度系统部署指南
毅硕HPC | 轻量高效的XFCE桌面环境
毅硕HPC | Ubuntu 24 SLURM 编译安装
-
+
首页
毅硕HPC | Lustre文件系统在HPC集群中的部署实战
在高性能计算(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分区,像使用本地硬盘一样使用分布式存储。  * * * # 三、 部署实战:从零搭建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\. 健康监控 运维人员需重点关注: 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架构师与运维工程师的必经之路。
chsnp
2026年1月28日 14:10
转发
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
有效期