4、环境搭建:硬件要求、操作系统准备、OFED驱动安装与验证

4.1 硬件要求与拓扑规划

搭建IB子网管理器运维环境,首先需要明确硬件的最低要求与推荐配置。IB网络的核心组件包括IB交换机、IB HCA(Host Channel Adapter)卡、IB线缆(铜缆或光缆)以及管理服务器。对于学习与实验环境,建议至少准备两台IB节点(一台作为子网管理器节点,一台作为普通端节点)和一台IB交换机(如Mellanox/MSX系列或NVIDIA Quantum系列)。若条件有限,也可使用双端口HCA直连的“两节点点对点”拓扑,但无法体验完整的子网管理功能。

组件最低要求推荐配置说明
CPU4核 x86_648核以上子网管理器(opensm)单线程为主,但日志与监控会占用CPU
内存8 GB16 GB以上节点数越多,SM所需内存越大
HCA卡ConnectX-3ConnectX-5/6需支持RDMA与内核驱动
操作系统CentOS 7.9 / Ubuntu 20.04Rocky Linux 8.6+ / Ubuntu 22.04内核版本需与OFED兼容
磁盘50 GB100 GB SSD用于系统、日志及转储文件

在硬件规划时,务必记录每台节点的GUID(全球唯一标识符)与端口LID分配策略。建议将子网管理器节点固定为LID 1(通过opensm的--lid参数或配置文件指定),便于后续排障时快速识别。

IB子网管理器实验环境拓扑 子网管理器节点 opensm + OFED HCA: ConnectX-5 GUID: 0x248a070300 IB交换机 36端口 EDR SM: 自动/手动 LID范围: 1-36 GUID: 0x506b4b0300 计算节点1 HCA: ConnectX-4 GUID: 0x248a070301 计算节点2 HCA: ConnectX-4 GUID: 0x248a070302 存储节点 GUID: 0x248a070303 IB链路 端口1 端口2 端口3 管理以太网(带外)

4.2 操作系统准备与内核配置

操作系统安装完成后,需进行以下关键准备:

  1. 关闭防火墙与SELinux(或设置宽松策略),避免阻塞IB子网管理所需的UDP/TCP端口(默认opensm使用端口10000)。
  2. 更新内核与基础工具:yum update -y(RHEL系)或apt update && apt upgrade(Debian系)。
  3. 确认内核版本:IB驱动与内核版本强相关,使用uname -r查看。建议使用长期支持内核。
  4. 配置静态IP与主机名:IB接口(如ib0)建议配置静态IP,便于管理工具连接。
# 查看内核版本
uname -r
# 关闭SELinux(临时)
setenforce 0
# 永久关闭(编辑/etc/selinux/config)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
若使用Ubuntu,注意apparmor可能限制opensm访问IB设备,需执行aa-complain /usr/sbin/opensm或调整配置文件。

4.3 OFED驱动安装与验证

OFED(OpenFabrics Enterprise Distribution)是IB/RoCE驱动的标准发行包。NVIDIA官方提供预编译的MLNX_OFED,也可使用系统自带的rdma-core。推荐使用MLNX_OFED以获得完整功能支持。

4.3.1 安装步骤

# 下载对应内核版本的MLNX_OFED(示例为5.8-1.0.1.1)
wget https://content.mellanox.com/ofed/MLNX_OFED-5.8-1.0.1.1/MLNX_OFED_LINUX-5.8-1.0.1.1-rhel8.6-x86_64.tgz
tar xzf MLNX_OFED_LINUX-5.8-1.0.1.1-rhel8.6-x86_64.tgz
cd MLNX_OFED_LINUX-5.8-1.0.1.1-rhel8.6-x86_64
# 运行安装脚本(自动匹配内核)
./mlnxofedinstall --add-kernel-support --skip-unsupported-devices-check

安装完成后,重启或手动加载驱动模块:

# 加载核心模块
modprobe mlx5_core
modprobe ib_umad
modprobe ib_uverbs
# 确认模块加载
lsmod | grep mlx5

4.3.2 验证驱动与硬件

使用ibstat和ibv_devinfo验证HCA状态:

# 查看IB设备状态
ibstat
# 输出示例:
# CA 'mlx5_0'
#     state: Active
#     physical state: LinkUp
#     rate: 100 Gb/sec (EDR)
#     base lid: 0x2
#     port GUID: 0x248a070300

# 查看详细设备能力
ibv_devinfo -v

若state显示Active且physical state为LinkUp,说明驱动与硬件链路正常。若显示Down,需检查线缆连接、交换机端口状态及光模块是否兼容。

4.4 子网管理器(opensm)安装与启动

opensm是IB子网管理的核心守护进程。安装方式:

# RHEL/CentOS
yum install -y opensm
# Ubuntu
apt install -y opensm

启动前需编辑配置文件/etc/opensm/opensm.conf,关键参数如下:

# 指定子网管理器运行的端口(对应ib0)
# 通常自动检测,也可手动指定
# 设置LID分配范围
# 启用日志
log_file /var/log/opensm.log
log_level 0x0F
# 设置SM优先级(多SM环境)
sm_priority 15

启动并设置开机自启:

systemctl start opensm
systemctl enable opensm
# 查看状态
systemctl status opensm
若交换机上已启用内置SM(如Mellanox交换机默认开启),需先关闭交换机SM或设置opensm为sm_priority更高值,否则会出现“双SM”冲突,导致LID分配不稳定。

4.5 连通性验证与常见误区

驱动与SM就绪后,使用以下工具验证子网管理是否正常:

  • ibswitches:查看子网中的交换机列表
  • ibping:测试IB链路连通性(类似以太网ping)
  • ibdiagnet:全面诊断子网健康状态
# 查看子网中的交换机
ibswitches
# 输出示例:
# Switch  : 0x506b4b0300 ports:36
#     state: Active

# 测试节点间连通性(在节点1上执行)
ibping -S -L 2   # 节点1作为服务器
# 在节点2上执行
ibping -G 0x248a070301 -C 1 -P 1
常见问题可能原因排查方法
ibstat显示Down线缆/光模块故障、端口未启用检查物理连接,使用ibportstate重置端口
opensm启动失败端口被占用、配置文件错误查看/var/log/opensm.log,确认无其他SM
ibping超时子网未收敛、LID未分配执行ibdiagnet -r查看路由表
典型误区:初学者常忽略交换机内置SM的存在,导致外部opensm无法接管子网。正确做法是:在交换机上通过enable命令进入配置模式,执行no sm关闭内置SM,或使用sm priority命令降低其优先级。