3、子网管理器概述:SM的功能、类型(主备、独立)与子网管理代理(SMA)的交互
3.1 核心原理:SM 是什么,为什么需要它
InfiniBand(IB)网络与以太网最大的区别之一,在于其转发行为不是由交换机自主决定的。IB 交换机是“被动”设备,它们本身不运行路由协议,也不学习 MAC 地址。所有端口的状态、路径转发规则、分区(P_Key)过滤表,都必须由外部一个集中式的控制实体统一下发。这个实体就是子网管理器(Subnet Manager,SM)。
SM 的逻辑位置通常运行在某个计算节点(如管理服务器)或专用交换机控制模块上。它通过子网管理接口(SMI)发送管理数据报(MAD),完成对子网内所有节点的发现、配置和监控。可以这样理解:IB 子网是“身体”,SM 是“大脑”。没有 SM 的 IB 子网,所有端口即使物理链路是 UP 的,也无法进行数据通信。
核心职责速览:
- 发现(Discovery): 扫描子网内所有交换机、CA(Channel Adapter,通道适配器)和路由器。
- 配置(Configuration): 为每个端口分配本地标识符(LID),建立线性转发表(LFT)和分区表。
- 计算(Routing): 基于最短路径算法(通常为 Dijkstra)计算所有端到端的路径。
- 监控(Monitoring): 持续跟踪链路状态变化,对故障链路进行重路由或端口禁用。
下图展示了 SM 在子网中的核心控制位置,以及它与交换机、CA 的从属关系:
3.2 方法流程:SM 的类型与主备切换机制
在实际部署中,SM 并非只能运行一份。为了保证子网的可用性,IB 规范定义了主备(Master/Standby)机制。同时,根据 SM 是否与子网内其他业务共用主机,又可分为独立 SM 与集成 SM。
3.2.1 SM 的三种运行类型
| 类型 | 部署位置 | 优点 | 缺点 |
|---|---|---|---|
| 独立 SM | 专用物理服务器或管理网段 | 性能不受业务干扰,故障隔离性好 | 额外硬件成本,需单独维护 |
| 集成 SM | 运行在存储网关或计算节点上 | 节省硬件,部署灵活 | 与业务争抢 CPU/内存,SM 故障影响面大 |
| 主备 SM | 至少两台节点同时运行 SM 实例 | 高可用,自动故障切换 | 需配置优先级,避免“脑裂” |
3.2.2 主备协商与切换流程
IB 子网中,每个 SM 实例都有一个优先级(Priority)属性(0~15,数值越大优先级越高)。当多个 SM 同时存在时,通过 SM 握手(SM Handshake)过程确定谁是 Master。流程如下:
- 启动发现: 所有 SM 启动后,先扫描子网,互相发现对方的存在。
- 主从协商: 每个 SM 发送包含自身优先级的
SubnGet(SMInfo)报文。优先级最高的 SM 成为 Master,其余自动进入 Standby 状态。 - 主 SM 接管: Master SM 开始执行全量发现和路径计算,并下发配置。
- 备份监听: Standby SM 不主动下发配置,但持续监听 Master 的心跳(Heartbeat)。
- 故障切换: 若 Standby 在超时时间(通常为 1.5 秒)内未收到 Master 的心跳,则重新发起选举,优先级最高的 Standby 提升为新的 Master。
实操提示: 使用 ibstat 或 sminfo 命令可以查看当前 SM 的状态。例如:
# 查看当前 SM 状态
ibstat | grep -i sm
# 输出示例
SM state: 4 (MASTER)
SM lid: 2
SM sl: 0
3.3 案例/场景:双 SM 配置实战
假设某 HPC 集群有 64 个计算节点和 8 台交换机,需要配置高可用 SM。推荐方案是使用两台管理节点,分别运行 OpenSM(最常见的开源 SM 实现)。
配置步骤:
# 节点1(主 SM)配置
opensm -g 0x0011750000010001 -p 10001 -P 15 -B
# 节点2(备 SM)配置
opensm -g 0x0011750000010002 -p 10002 -P 10 -B
参数说明:
-g:指定 SM 的 GUID(全局唯一标识符)。-p:指定监听端口。-P:指定优先级,节点1为 15(最高),节点2为 10。-B:后台运行。
当节点1宕机时,节点2 的 OpenSM 会在约 2 秒内检测到 Master 丢失,自动提升为 Master。此时,所有交换机端口会重新向新 Master 发送 SubnGet 请求,完成重配置。整个切换过程对上层应用是透明的,但会造成短暂的路径重算(通常小于 5 秒)。
常见误区: 不要将两个 SM 的优先级配置为相同值。如果相同,系统会依据 GUID 大小决定 Master,这可能导致你预期的“主”节点没有成为 Master。务必显式设置不同的优先级。
3.4 误区/复盘:SM 与 SMA 交互中的典型问题
SM 与 SMA 的交互是子网管理的核心链路,但在实际运维中,以下问题经常出现:
3.4.1 误区一:混淆 SM 与 SMA 的角色
SMA(子网管理代理)是每个 IB 节点(包括交换机、CA)上的一个逻辑代理,它负责响应 SM 的查询和设置请求。SMA 是被动组件,它不会主动发起管理操作。而 SM 是主动的、全局的。如果混淆两者,容易在排障时找错对象——例如,当某个端口无法通信时,应该检查 SM 是否下发了正确的 LFT,而不是去检查 SMA 是否“自己算错了路径”。
3.4.2 误区二:忽略 SMA 的响应超时
SM 通过 SMI 向 SMA 发送 MAD 请求时,如果 SMA 所在节点负载过高(例如计算节点正在运行大规模 MPI 任务),可能导致 SMA 响应延迟。SM 默认的超时时间较短(通常为 200ms),如果连续多次超时,SM 会认为该节点已离线,从而将其从转发路径中移除。这会导致非物理故障的业务中断。
复盘建议: 在高负载计算节点上,适当调大 SM 的超时参数。OpenSM 中可通过 -t 参数调整:
# 将超时时间调整为 500ms
opensm -t 500 -P 15 -B
3.4.3 误区三:主备切换后配置未同步
当 Standby SM 提升为 Master 后,它会重新执行全量发现。如果原 Master 曾手动修改过某些端口配置(如禁用某端口),这些修改不会自动同步到 Standby。新 Master 会基于自己的配置数据库重新计算,可能导致原手动配置丢失。
解决方案: 使用 OpenSM 的 -f 选项指定配置文件,并确保主备 SM 使用相同的配置文件。同时,定期备份 SM 的配置数据库。
| 排障命令 | 作用 | 典型输出 |
|---|---|---|
ibswitches |
列出子网内所有交换机 | 显示交换机 GUID、LID、端口数 |
ibqueryerrors |
查询端口错误计数 | 显示 CRC 错误、链路恢复次数 |
sminfo |
查看 SM 状态和优先级 | 显示 SM 版本、状态、LID |
通过以上对 SM 功能、类型及与 SMA 交互机制的梳理,可以看到 SM 在 IB 子网中处于绝对的控制核心地位。理解其主备协商逻辑和 SMA 的被动代理特性,是后续进行子网配置、性能调优和故障定位的基础。在实际操作中,务必通过 ibstat、sminfo 等工具确认当前 SM 的运行状态,避免因角色误判导致错误的操作方向。