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状态ibstatSM 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作为备用),并依据实际业务调整分区策略。