SStorpath
实验预计 70 分钟

实验:GPFS ECE 部署与调优

从网络规划到 recovery group,把一套 ECE 集群跑起来。

学完这节你能做到

  • 完成 ECE 集群的规划与部署
  • 创建 recovery group、vdisk 与文件系统
  • 应用关键调优参数并验证效果

这一节要做什么

把一套 ECE 集群从零跑起来:预检 → 集群定义 → 安装 → 创建 recovery group 与文件系统 → 调优。

!ECE 是商业软件

GPFS / Storage Scale 需要 IBM 授权,安装包从 IBM Fix Central 下载。没有授权的情况下无法实际部署这一节的内容。

流程和参数仍然值得掌握:你会在面试、方案评审、和厂商沟通时用到,也能理解为什么它的性能比 CephFS 高。

第 0 步:预检(这一步决定成败)

ECE 对环境的要求比 Ceph 严格得多,预检没做干净后面会反复返工。

# 1. 操作系统:必须 EL8 / EL9
cat /etc/redhat-release

# 2. 名称解析:必须是 "IP FQDN 短名" 三段格式,所有节点一致
cat /etc/hosts
# 192.168.1.101 sn001.example.com  sn001
# 192.168.1.102 sn002.example.com  sn002
# 192.168.1.103 sn003.example.com  sn003
# 192.168.1.200 gui01.example.com  gui01

# 3. 关闭防火墙
pdsh -w ^all systemctl disable firewalld --now

# 4. 时间同步
pdsh -w ^all dnf install -y chrony
pdsh -w ^all 'sed -i "s/^pool.*/pool ntp.aliyun.com iburst/" /etc/chrony.conf'
pdsh -w ^all systemctl enable chronyd --now
pdsh -w ^all chronyc sources

# 5. 节点间 root 免密
# 6. 安装最新版 Mellanox OFED(用 RDMA 时必需)
×/etc/hosts 的三段格式不是可选的

必须是 <IP> <FQDN> <短名> 三段,且所有节点的文件内容完全一致。少了 FQDN 或者各节点内容不同步,集群创建会以各种难以定位的方式失败。

这是 GPFS 部署里最高频的翻车点,没有例外。部署前用 pdsh -w ^all md5sum /etc/hosts 确认所有节点的 hosts 文件哈希一致。

第 1 步:规划节点角色

在写集群定义之前,先把角色分配想清楚:

角色数量规则说明
quorum node4 节点→3;5~6 节点→5;≥7 节点→7维持集群一致性
manager node至少 2 个每个文件系统指定一个作 File System Manager,也承担 token 管理
RG 主节点每个 RG 一个恢复组的管理入口
CES node按需提供 NFS/SMB/S3 导出
GUI node1~2 个GPFS CSI 依赖 GUI 的 REST API
!CES 节点要独占,且网络要分开

官方要求:高性能环境下 CES 节点除导出服务外不应运行其它工作负载;并且 CES 协议访问用的网络,必须与 ECE 内部流量使用不同的物理网卡和网络

理由和 Ceph 的 public/cluster 分离一样:导出服务的客户端流量会和 ECE 的纠删码流量抢带宽,而后者是数据路径的一部分。

第 2 步:容量与 EC 规划

按 L1 和 L3 学的方法算,但要注意 ECE 特有的两项开销:

可用容量 = 裸容量 × EC 效率 × (1 - spare 空间比例) × 水位
  • EC 效率:按节点数选方案(见上一节的推荐表)
  • spare 空间:ECE 会预留备用空间用于 RAID 重建,这部分不可用
  • 元数据:官方经验是预留约 10%

declustered array(DA) 是 ECE 的一个重要概念:同一 RG 内所有节点的同类磁盘组成一个分散阵列,数据和校验分散到 DA 的所有磁盘上。这样重建时所有盘一起参与,重建速度远快于传统 RAID 的"往一块热备盘写"。

扩容 DA 的硬性规则:

· 新盘必须与 DA 中现有磁盘类型相同
· RG 中所有节点必须添加相同数量的新盘
· 建议一次添加与现有盘数相同的数量(使 DA 空间翻倍)

第 3 步:网络规划

数据网(ECE 内部):25Gbps 起,推荐 100Gbps,用 RDMA 时需 OFED + 无损网络配置
管理网:千兆即可,用于 SSH、GUI、监控
CES 网(如果有):独立物理网卡

第 4 步:安装

ECE 用安装工具包(installation toolkit)部署,流程是:

1. 网络和硬件预检查(工具包自带 mmnetverify 等检查)
2. 集群定义(声明节点、角色、RG)
3. 执行安装
# 从 IBM Fix Central 下载并解压安装包
./Storage_Scale_ECE-5.2.x.x-x86_64-Linux-install --silent

# 定义集群
cd /usr/lpp/mmfs/5.2.x.x/ansible-toolkit
./spectrumscale setup -s <安装节点IP>
./spectrumscale node add sn001 -so -q -m       # storage / quorum / manager
./spectrumscale node add sn002 -so -q -m
./spectrumscale node add sn003 -so -q
./spectrumscale node add gui01 -g -a           # gui / admin
./spectrumscale recoverygroup define -N sn001,sn002,sn003

# 预检 + 安装
./spectrumscale install --precheck
./spectrumscale install

第 5 步:创建 vdisk 与文件系统

# 查看 recovery group 与 declustered array
mmvdisk recoverygroup list
mmvdisk recoverygroup list --recovery-group rg01 --all

# 定义 vdisk set:指定 EC 方案、容量占比、块大小
mmvdisk vdiskset define --vdisk-set vs01 \
  --recovery-group rg01 --code 8+2p --block-size 16M --set-size 80%

# 创建 vdisk
mmvdisk vdiskset create --vdisk-set vs01

# 用 vdisk set 创建文件系统
mmvdisk filesystem create --file-system fs1 --vdisk-set vs01

# 挂载
mmmount fs1 -a
mmlsfs fs1
mmdf fs1
iblock-size 怎么选

GPFS 的块大小对性能影响很大,而且创建后不能改

  • 大文件顺序读写为主(AI 训练、HPC)→ 8M / 16M
  • 小文件多、元数据密集 → 1M / 4M
  • 混合负载 → 4M 起步

选错了只能重建文件系统。所以这个决定要在需求调研阶段就问清楚:平均文件大小是多少。

第 6 步:调优(收益非常明显)

这几个参数是 GPFS 调优的核心,来自实际项目的经验值:

# ---------- 吞吐 ----------
# maxMBpS:单节点允许的读写数据流最大速率,缺省 2048
# GPFS 用它来计算给顺序访问分配多少预读/后台写线程
# 建议设为每节点最大网络吞吐的 2 倍,上限 100000
# 例:4 × 200Gb 网络 → 4×200×1000/8×2 = 200000,超过上限则取 100000
mmchconfig maxMBpS=100000
mmdiag --config | grep maxMBpS

# workerThreads:处理并发文件系统请求的工作线程池大小
mmchconfig workerThreads=3072      # 存储集群
mmchconfig workerThreads=1024      # 客户端集群

# ---------- 元数据(对 read & stat 提升巨大)----------
# maxFilesToCache:每节点可缓存的完整 inode 数,每个约占 3K~10K 内存
mmchconfig maxFilesToCache=3M      # 存储集群
mmchconfig maxFilesToCache=1M      # 客户端集群

# maxStatCache:缓存的文件属性数量,每个约占 400~500 字节
# 只记基本属性(够响应 ls -l),不足以直接读写
mmchconfig maxStatCache=4M         # 存储集群
mmchconfig maxStatCache=1M         # 客户端集群

# ---------- 改完必须重启守护进程 ----------
mmshutdown -a && mmstartup -a
mmgetstate -a
为什么元数据缓存参数收益这么大

maxFilesToCachemaxStatCache 直接决定了 lsstat 这类操作能否命中内存。海量小文件场景下调对这两个参数,元数据性能提升往往是数量级的。

注意算清内存:3M × 8K ≈ 24GB 只是 inode 缓存,加上 4M × 500B ≈ 2GB 的 stat 缓存,还有 pagepool。这些内存必须在容量规划时就算进去,否则调完参数节点直接 OOM。

检查点单选

GPFS 集群创建失败,报各种奇怪的节点通信错误。最该先检查什么?

检查点单选

改了 maxFilesToCache 之后用 mmlsconfig 能看到新值,但性能没有变化。最可能的原因?

检查点多选

关于 ECE 部署,下面哪些是硬性要求?(多选)

这节课的落点

  • 预检决定成败,/etc/hosts 三段格式 + 全节点一致是头号坑
  • 角色规划先做:quorum 数按节点数定,CES 要独占且网络分开
  • DA 让所有盘参与重建,这是 ECE 重建快的原因;扩容有严格的同型号同数量规则
  • block-size 创建后不可改,必须先问清平均文件大小
  • 四个核心调优参数:maxMBpSworkerThreadsmaxFilesToCachemaxStatCache
  • 调元数据缓存前先算内存,否则直接 OOM
  • 改完参数要 mmshutdown -a && mmstartup -a,并用 mmdiag --config 验证生效

延伸资料

  • ·k8s-in-actionstorage/gpfs/day-0-plan-ece.md
  • ·k8s-in-actionstorage/gpfs/day-1-deploy-ece.md
  • ·k8s-in-actionstorage/gpfs/day-1-tunning.md