物理机更换 Bond 网卡
主机: node-a01(基地A)
时间: 2026-06-23
操作: 10Gb 双口网卡硬件更换、bond0 配置同步、bnxt_en 驱动升级
ENV
| 类别 | 信息 |
|---|---|
| 操作系统 | Rocky Linux 9.3(el9_3) |
| 内核 | 5.14.0-362.8.1.el9_3.x86_64 |
| 网络管理 | NetworkManager(nmcli) |
| Bond 配置路径 | /etc/NetworkManager/system-connections/*.nmconnection |
| Bond 接口 | bond0,IP 8.8.243.101/24 |
| Bond 模式 | active-backup(fault-tolerance) |
1. 更换前后对比
| 项目 | 更换前 | 更换后(当前) |
|---|---|---|
| 芯片型号 | BCM57810 NetXtreme II 10Gb | BCM57412 NetXtreme-E 10Gb RDMA |
| PCI 槽位 | 01:00.0 / 22:00.0 |
不变 |
| 接口名 | ens1f0 / ens2f0 |
ens1f0np0 / ens2f0np0 |
| 驱动模块 | bnx2x |
bnxt_en(kmod 外置驱动) |
驱动版本(ethtool version) |
5.14.0-362.8.1.el9_3.x86_64(内核 in-tree) |
1.10.3-234.0.154.0 |
| 驱动 RPM | — | kmod-bnxt_en-1.10.3-234.0.154.0.rocky9u3.x86_64 |
| 固件版本 | mbi 7.15.42 / bc 7.15.23 | 234.0.150.0 / pkg 234.1.124.0 |
| Bond slaves | ens1f0 ens2f0 | ens1f0np0 ens2f0np0 |
| Active slave | ens2f0 | ens1f0np0 |
| Primary slave | ens2f0 | ens1f0np0(第一个 slave,默认主用) |
| 链路 | 双口 10G Full UP | 双口 10G Full UP |
| Bond 状态 | UP | UP |
说明: 换卡初装时使用内核自带 in-tree bnxt_en,version 显示内核版本;安装 Broadcom kmod 包并重启后,version 显示独立驱动版本 1.10.3-234.0.154.0。
参考节点(基地B node-a02,未更换): BCM57810 / bnx2x / 接口 ens1f0 ens2f0 / primary=ens2f0。
2. 更换操作
2.1 更新 bond slave 接口名
网卡型号变更后 udev 接口名变化,需同步 NetworkManager slave 连接:
sudo nmcli con mod bond-slave-ens1f0 connection.interface-name ens1f0np0
sudo nmcli con mod bond-slave-ens2f0 connection.interface-name ens2f0np0
sudo nmcli con reload
sudo nmcli con up bond-slave-ens1f0
sudo nmcli con up bond-slave-ens2f0
sudo nmcli con up bond0
2.2 Primary 策略
主用口沿用 第一个 slave(ens1f0np0),与当前 active 一致,无需额外修改 bond.options。
2.3 升级 bnxt_en 驱动
换卡后安装 Broadcom 外置驱动模块,需重启生效:
sudo rpm -ivh kmod-bnxt_en-1.10.3-234.0.154.0.rocky9u3.x86_64.rpm
sudo reboot
重启后验证:
ethtool -i ens2f0np0
modinfo bnxt_en | grep -E '^version|^filename'
更新后 ethtool -i 输出:
driver: bnxt_en
version: 1.10.3-234.0.154.0
firmware-version: 234.0.150.0/pkg 234.1.124.0
bus-info: 0000:22:00.0
supports-priv-flags: yes
3. 验证
3.1 Bond 状态
cat /proc/net/bonding/bond0
ip a show bond0
结果:
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: ens1f0np0
Currently Active Slave: ens1f0np0
slaves: ens1f0np0 ens2f0np0
bond0: UP,8.8.243.101/24
3.2 连通性
ping -c 3 8.8.243.1
curl -I http://monitor.igozhang.cn/health
3.3 网卡与统计一键检查
sudo bash <<'EOF'
BOND="${BOND:-bond0}"
sval(){ v=$(ethtool -S "$1" 2>/dev/null|grep -v '\['|grep "$2:"|head -1|cut -d: -f2); v="${v// /}"; echo "${v:-0}"; }
stats(){ local n=$1 d=$2 r=$(sval $n recoverable_errors) u=$(sval $n unrecoverable_errors)
case "$d" in
bnxt_en) echo " rx_disc=$(sval $n rx_total_discard_pkts) rx_fcs=$(sval $n rx_fcs_err_frames) recoverable=$r unrecoverable=$u link_down=$(sval $n link_down_events)";;
bnx2x|bnx2) echo " rx_disc=$(sval $n rx_discards) rx_crc=$(sval $n rx_crc_errors) recoverable=$r unrecoverable=$u rx_brb_disc=$(sval $n rx_brb_discard)";;
*) echo " recoverable=$r unrecoverable=$u";;
esac; }
S=$(cat /sys/class/net/$BOND/bonding/slaves|xargs)
IP=$(ip -br addr show $BOND|awk '{print $3}')
A=$(tr -d ' \n' </sys/class/net/$BOND/bonding/active_slave 2>/dev/null)
M=$(grep 'Bonding Mode' /proc/net/bonding/$BOND|head -1|cut -d: -f2-|xargs)
echo "=== $(hostname) $(date '+%F %T') | $BOND ${IP:-no-ip} ==="
echo "mode=$M active=$A slaves=$S"
for n in $S; do
b=$(ethtool -i $n|awk '/bus-info/{print $2}')
d=$(ethtool -i $n|awk '/^driver/{print $2}')
fw=$(ethtool -i $n|awk '/firmware-version/{print $2}')
dv=$(ethtool -i $n|awk '/^version/{print $2}')
md=$(lspci -s $b|sed 's/.*: //')
sp=$(ethtool $n 2>/dev/null|awk -F: '/Speed/{gsub(/ /,"",$2);print $2}')
lk=$(ethtool $n 2>/dev/null|awk -F: '/Link detected/{print $2}'|tr -d ' ')
echo "=== $n ==="
echo " pci=$b model=$md"
echo " driver=$d fw=$fw drv_ver=$dv"
echo " link=${sp:-?} / ${lk:-?}"
echo " stats:"; stats $n $d; echo
done
EOF
更换后检查结果(node-a01,驱动升级后):
=== node-a01 ... | bond0 8.8.243.101/24 ===
mode=fault-tolerance (active-backup) active=ens1f0np0 slaves=ens1f0np0 ens2f0np0
=== ens1f0np0 ===
pci=0000:01:00.0 model=BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller (rev 01)
driver=bnxt_en fw=234.0.150.0/pkg drv_ver=1.10.3-234.0.154.0
link=10000Mb/s / yes
stats: rx_disc=0 rx_fcs=0 recoverable=0 unrecoverable=0 link_down=4
=== ens2f0np0 ===
pci=0000:22:00.0 model=BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller (rev 01)
driver=bnxt_en fw=234.0.150.0/pkg drv_ver=1.10.3-234.0.154.0
link=10000Mb/s / yes
stats: (同上)
4. 后续换卡 SOP 要点
| 角色 | 建议 |
|---|---|
| 运维 | 换卡后核对 ip a 与 nmcli con show 接口名;NM 操作使用 sudo;BCM57412 建议安装 kmod-bnxt_en 并重启;更新后 ethtool -i 确认 version 为驱动版本号 |
5. Bond 配置参数(更换后)
| 参数 | 值 | 说明 |
|---|---|---|
bond.mode |
active-backup | 双链路热备 |
bond.primary |
ens1f0np0 | 第一个 slave 为主用口 |
bond.miimon |
100 | 链路监测间隔(ms) |
| slave 连接 | bond-slave-ens1f0 → ens1f0np0 | NM interface-name 已同步 |
| slave 连接 | bond-slave-ens2f0 → ens2f0np0 | NM interface-name 已同步 |
| 驱动包 | kmod-bnxt_en-1.10.3-234.0.154.0 | 外置驱动,重启后生效 |