2. 配置子网管理器(SM)
任务目标
在IB网络中,子网管理器(SM)负责节点发现、LID分配、路由计算及分区配置。本案例在一台管理节点上部署opensm作为主SM,配置分区(PKey)隔离不同业务流量,并验证所有节点可被正确发现与通信。
环境与依赖
- 操作系统:Rocky Linux 9.x / Ubuntu 22.04+(均需内核支持IB驱动)
- 软件包:
opensm、infiniband-diags(提供ibstat、ibping等工具) - 所有节点已安装Mellanox或Intel IB网卡驱动,且
ibstat能识别到HCAs - 集群中仅一台节点运行opensm(本案例为管理节点
192.168.1.10)
实现步骤
1. 安装软件包
在管理节点执行:
# Rocky/RHEL
dnf install -y opensm infiniband-diags
# Ubuntu/Debian
apt install -y opensm infiniband-diags
2. 配置opensm
编辑 /etc/opensm/opensm.conf,关键配置项如下:
# 指定作为主SM运行
sm_type = 0
# 分区配置(默认包含所有端口的全成员分区)
pkey = 0x7fff, 0xffff : ALL
# 路由算法(推荐使用updn避免环路)
routing_engine = updn
# 日志级别
log_level = 2
# 子网前缀(保持默认即可)
subnet_prefix = 0xfe80000000000000
3. 创建分区配置文件
在 /etc/opensm/partitions.conf 中定义业务分区:
# 默认分区(所有节点必须包含)
Default=0x7fff, ALL
# 计算分区(仅计算节点)
Compute=0x0001, ipoib:all, ALL:self
# 存储分区(仅存储节点)
Storage=0x0002, ipoib:all, ALL:self
说明:ALL:self 表示该分区包含所有端口自身,ipoib:all 表示所有IPoIB接口。实际部署时需按节点GUID或端口GUID精确指定成员。
4. 启动并验证SM
# 启动服务
systemctl enable --now opensm
# 查看SM状态
ibstat | grep -A5 "SM state"
# 预期输出:SM state: MASTER
# 查看子网发现结果
ibswitches
ibhosts
5. 验证节点通信
在任意两个计算节点间执行:
# 使用ibping测试(需先启动ibping服务端)
# 节点A上执行:
ibping -S -C 0 -P 0 &
# 节点B上执行(替换为节点A的LID):
ibping -c 100 -C 0 -P 0 -L <节点A的LID>
验证方法与判定标准
| 检查项 | 命令 | 通过条件 |
|---|---|---|
| SM状态 | ibstat | SM state为MASTER,非DISCOVERING |
| 节点发现 | ibhosts | 列出所有预期节点,无缺失 |
| 交换机发现 | ibswitches | 所有IB交换机均被列出 |
| 分区生效 | ibquery -p | 各端口PKey包含所属分区值 |
| 通信测试 | ibping | 丢包率0%,平均延迟正常(通常<5μs) |
常见问题
- SM未成为MASTER:检查是否有其他SM在运行(
ps aux | grep opensm),或使用sm_type=0强制为主SM。 - 节点未被发现:确认IB线缆连接正常,
ibstat显示端口状态为Active。 - 分区不生效:修改
partitions.conf后需重启opensm,且确认节点GUID与配置匹配。
本案例完成最小可用SM部署。生产环境建议配置双SM冗余(sm_type=1作为备用),并依据实际业务调整分区策略。