银河麒麟V10双网卡绑定配置实战:从模式选择到故障切换
2026/9/17 11:04:26 网站建设 项目流程

1. 配置前想清楚:为什么做双网卡绑定,怎么选模式

国产化替代这几年,银河麒麟V10在政企服务器里的出镜率越来越高。它基于Linux内核,兼容CentOS生态,很多老运维拿到手里第一反应是“这不就是个换皮的RHEL嘛”,但真上手配置的时候才发现,坑比想象的多,尤其是双网卡绑定这种基础操作。

先说清楚双网卡绑定到底解决什么问题。生产环境里最怕的事就是业务跑着跑着突然断网——单块网卡一挂,服务直接掉线,哪怕VIP切走了,监控告警也得响半天。双网卡绑定就是把两块物理网卡逻辑上合并成一块虚拟网卡(bond0),对外表现为一个IP,对内起到链路冗余和流量分担的作用。

麒麟V10的绑定和CentOS系基本一脉相承,都走Linux bonding驱动,但有几个细节和纯CentOS不一样:NetworkManager默认托管程度、network服务的存在与否、以及ifcfg文件中参数兼容性。所以不要照抄老博客里的CentOS 6配置,那是system-network-config时代的东西,直接套在V10上大概率起不来。

绑定模式的选择是最核心的决策点。生产环境里最常见的三种:

模式名称特点适用场景
mode=0balance-rr轮询负载均衡,数据包按顺序轮流从两块网卡发出同网段、交换机需支持聚合,且链路物理参数完全一致
mode=1active-backup主备模式,一块工作一块待命,故障时自动切换最推荐,交换机无需配置,兼容性最高
mode=4802.3ad链路聚合,需要交换机侧配置LACP带宽有扩展需求且网络设备可控

我的建议是:没有特殊需求,优先选mode=1。理由很简单——双网卡绑定的第一诉求是高可用,不是堆带宽。mode=1不需要交换机做任何配置,两块网卡只要物理连通就行,对跨厂商网络设备、虚拟化平台、云环境都友好。mode=4虽然能把两个千兆口合成2Gbps的理论带宽,但实际瓶颈往往在交换机的哈希策略和链路质量上,而且一旦交换机侧聚合配置没做好,整条链路都可能起不来。

mode=0看着美,实际使用中如果两块网卡型号、速率不一致,很容易出现乱序重传,反而拖低性能。麒麟这个级别的服务器环境,稳定压倒一切,别为了跑分数字给自己挖坑。

另外补充一点:银河麒麟V10的服务器版和桌面版在网络管理上略有差异,服务器版默认装好NetworkManager,但同时保留传统的network服务。如果只想用一个网络管理组件,建议保留NetworkManager并统一用它管bond,或者反过来停掉NetworkManager全走ifcfg文件。两边同时下手,经常出现“明明配置文件都对,网卡就是不上IP”的灵异事件。

2. 动手前摸清家底:网卡信息、驱动模块、网络规划一个都不能少

2.1 确认当前网卡列表和命名规则

配置双网卡绑定,第一步是登录系统看清楚机器上到底有哪些网卡。

在麒麟V10里执行:

ip link show

输出里会列出所有物理网卡和虚拟网卡,名字一般是ens33、ens34、enp2s0f0、enp3s0f1这种风格。CentOS 6时代那种eth0、eth1的命名已经不用了,现在的命名规则和固件槽位挂钩,重启后不会变。

还要确认每块网卡当前是否在使用、有没有被分配IP:

ip addr show

我把实际生产中遇到的情况列个清单,大家对照着看:

  • 如果两块网卡都是up状态且名字规则,可以直接走绑定流程。
  • 如果网卡是down的,先排查物理接线和驱动加载情况,有些服务器板载网卡在BIOS里被disable了,系统里看得见但起不来。
  • 如果用ip link看不到网卡,大概率是驱动没加载,先ldconfig、modprobe相关模块再说。
  • 如果机器是虚拟机(比如KVM/VMware里跑麒麟),虚拟网卡的名称和物理机不一样,但这不影响绑定逻辑,照常操作即可。

2.2 检查bonding驱动与NetworkManager状态

麒麟V10的内核默认编译了bonding模块,但不同小版本的模块状态未必一样,先确认一遍最稳。

modinfo bonding

如果输出正常,能看到路径、版本、参数描述,说明内核有驱动,不用额外装。如果提示FATAL: Module bonding not found,那就得先处理内核模块问题,一般不会遇到。

接着看网络管理服务的情况:

systemctl status NetworkManager systemctl status network

我的经验是:如果NetworkManager在运行,而且你后续想用nmcli来管理bond,那就不需要碰network服务;如果更习惯写ifcfg文件,那么建议先把NetworkManager停下来,避免两边抢配置。

systemctl stop NetworkManager systemctl disable NetworkManager systemctl start network systemctl enable network

有朋友可能会问:麒麟V10里network服务还在吗?实测多数版本还在,少数最小化安装的版本可能没有。如果没有,又不想用NetworkManager,那得先补装:

yum install -y network-scripts

把这个基础问题解决掉,免得配置到一半发现服务指挥棒是空的。

2.3 规划IP、网关、交换机策略和物理链路

双网卡绑定规划环节最容易忽略的是物理链路的联通性。

我遇到过一位同事,绑完bond0后发现切换测试怎么都不生效,排查到最后发现第二块网卡连的交换机端口是光口,链路灯是亮的,但交换机管理员根本没给那个端口划分VLAN。所以配置bond之前,给网络管理员发个工单确认以下内容:

  • 两块网卡对应的交换机端口是否都允许业务VLAN通过
  • 如果选mode=4,交换机端口是否需要配置为LACP聚合口(通常是动态聚合)
  • 如果选mode=1,交换机侧不需要额外动作,但建议将两个物理端口放在同一个VLAN内
  • 如果是跨交换机接双链路,确认两台交换机之间是否做了级联,否则主备模式没问题,但mode=4会出问题

同时把IP规划固话下来。bond0的IP地址、网关、DNS要提前定好,物理网卡上不要单独配IP,这是铁律。如果你在绑定时发现原来的业务IP在某个物理网卡上,配置前先记下来,待会要清掉的。

3. 完整实操:麒麟V10双网卡绑定配置全过程

3.1 绑定前的网络配置文件备份

做任何网络变更之前,第一件事是备份配置文件。这步省了,后面出了问题哭都来不及。

cp -a /etc/sysconfig/network-scripts /root/network-scripts.bak_$(date +%F)

把整个network-scripts目录打包备份,回滚的时候直接整体覆盖回去。别觉得这步多余,实际生产里配置改坏、重启连不上机器的例子我见太多了。有了备份,恢复只花两分钟,否则只能去机房接显示器单用户模式救急。

3.2 编写bond0主配置文件

麒麟V10的bond配置核心在/etc/sysconfig/network-scripts/ifcfg-bond0。用vim编辑:

vim /etc/sysconfig/network-scripts/ifcfg-bond0

完整内容如下:

DEVICE=bond0 NAME=bond0 TYPE=Bond BONDING_MASTER=yes ONBOOT=yes BOOTPROTO=static IPADDR=192.168.10.20 NETMASK=255.255.255.0 GATEWAY=192.168.10.1 DNS1=223.5.5.5 DNS2=114.114.114.114 BONDING_OPTS="mode=1 miimon=100 fail_over_mac=1"

逐个字段解释一下:

  • DEVICE与NAME都设为bond0,这两个字段保持跟文件名一致,避免系统识别混乱。
  • TYPE=Bond和BONDING_MASTER=yes配合使用,告知系统这是一个bond主接口。
  • BOOTPROTO=static,固定IP,不要用dhcp,服务器场景静态IP是基本素养。
  • IPADDR、NETMASK、GATEWAY、DNS都写在bond0上,物理网卡接口不承载这些。
  • BONDING_OPTS是核心,双引号包起来写在一行。mode=1指定主备模式,miimon=100表示每100毫秒检查一次链路状态,fail_over_mac=1让bond0在切换时主动同步MAC地址,这个参数在虚拟化环境特别重要。

顺便说一下miimon的含义。它是bonding驱动周期性检测物理链路状态的间隔,单位是毫秒。100毫秒是常见默认值,太短会消耗额外CPU,太长则故障切换慢。如果对切换时间要求高,可以调到50,但没必要追求极限。

3.3 编写两块物理网卡的从属配置文件

接下来配置两块物理网卡,让它们加入bond0。

先编辑第一块:

vim /etc/sysconfig/network-scripts/ifcfg-ens33

内容如下:

DEVICE=ens33 NAME=ens33 TYPE=Ethernet ONBOOT=yes BOOTPROTO=none MASTER=bond0 SLAVE=yes

再编辑第二块:

vim /etc/sysconfig/network-scripts/ifcfg-ens34

内容除了设备名不同,其他完全一样:

DEVICE=ens34 NAME=ens34 TYPE=Ethernet ONBOOT=yes BOOTPROTO=none MASTER=bond0 SLAVE=yes

这里有几个容易踩坑的点:

第一,物理网卡里千万不要配IPADDR、GATEWAY这些参数,否则用ip addr能看到物理网卡上有地址,route表也会混乱。BOOTPROTO必须为none,而不是static,因为从属接口的IP完全由bond0分配。

第二,MASTER=bond0要和ifcfg-bond0里的DEVICE=bond0对应上,拼写错了网卡永远不会加入bond。

第三,如果系统里同时装了NetworkManager,建议在这些ifcfg文件里加一行NM_CONTROLLED=no,强制让network服务来管理这些接口,避免NM的自动连接把配置冲掉。

当然,如果你的环境就是决定用NetworkManager统一管理,那配置方式完全不同,在后面的替代方案里我会单独说。

3.4 加载bonding模块并重启网络服务

配置写完,先把bonding模块拉起来:

modprobe bonding

如果这个模块本身没有被modprobe.d配置静默加载,上面的命令只解决当前内存状态,重启后不生效。稳妥做法是在/etc/modules-load.d/bonding.conf里加一行:

echo "bonding" > /etc/modules-load.d/bonding.conf

接下来重启网络服务让配置生效。走network服务路线的话:

systemctl restart network

重启后验证bond0是否起来:

ip addr show bond0 cat /proc/net/bonding/bond0

/proc/net/bonding/bond0是bonding驱动实时状态表,最关心的几个信息:

  • Bonding Mode: fault-tolerance (active-backup) 确认模式是主备。
  • MII Status: up 表示链路正常。
  • Active Slave: ens33 表示当前激活的物理网卡。
  • Slave Interface: ens33、ens34列出所有从属网卡。

如果ip addr里bond0有IP、ping网关能通,说明基本配置成功。

3.5 NetworkManager替代方案:用nmcli完成同样的绑定

有些麒麟V10环境默认NetworkManager在管网络,强行停掉可能影响其他业务,比如虚拟网桥、隧道接口都是NM创建的。这时候用nmcli来配置bond是更优雅的方案。

先创建bond0连接:

nmcli connection add type bond con-name bond0 ifname bond0 mode active-backup ipv4.method manual ipv4.addresses 192.168.10.20/24 ipv4.gateway 192.168.10.1 ipv4.dns "223.5.5.5 114.114.114.114"

再创建两个从属端口连接:

nmcli connection add type ethernet con-name bond-slave-ens33 ifname ens33 master bond0 nmcli connection add type ethernet con-name bond-slave-ens34 ifname ens34 master bond0

激活连接:

nmcli connection up bond0 nmcli connection up bond-slave-ens33 nmcli connection up bond-slave-ens34

验证方式:

nmcli connection show nmcli device status

nmcli的好处是配置写在/etc/sysconfig/network-scripts下但由NM统一调度,不冲突。缺点是不熟悉NM命令的人看着有点晕,新手还是建议走ifcfg文件路线。

4. 性能验证与故障切换测试

4.1 验证绑定状态:link速度、从属网卡状态、实际吞吐

配置完成不代表万事大吉,验证环节必须认真做。

先确认bond0的速率:

ethtool bond0

正常情况下,Speed显示的数值是当前活动网卡的协商速率。比如ens33是千兆,ens34也是千兆,bond0的Speed就是1000Mb/s。mode=1不叠加带宽,看到这个结果别惊讶。

再看从属接口的状态:

ethtool ens33 ethtool ens34

两块网卡都应该是Link detected: yes、Speed: 1000Mb/s。如果有一块Speed降到100Mb/s,多半是网线、光模块或交换机端口协商问题,需要排查物理链路。

然后测试实际吞吐。使用iperf3在局域网内另起一台机器做服务端:

# 服务端 iperf3 -s # 客户端 iperf3 -c 192.168.10.100

对普通千兆环境,TCP窗口默认值下能跑到940Mbps左右就说明链路没问题。如果带宽低于预期,先把网卡固件、驱动检查一遍,别怀疑bond配置有bug。

4.2 主备切换测试:拔线、断端口、恢复

mode=1的核心价值在于故障切换,这步必须实测。

测试方法很简单,在bond0上做持续ping:

ping -i 0.2 192.168.10.1

然后断开当前活动网卡的物理链路——拔网线、关交换机端口或直接在服务器上调低网卡link。观察ping的断流情况。

正常切换链路时,ping会丢大约1-2个包,然后恢复正常。观察/proc/net/bonding/bond0里的Active Slave字段会发现从ens33切换到了ens34,MII Status保持up。

这个切换由驱动完成,不需要人工干预。切换时间取决于miimon参数,100毫秒的检查周期意味着最坏情况下100毫秒发现链路故障,加上切换动作,业务侧感知通常在一个交换机转发延迟级别。

恢复原网卡链路后,bond0并不会自动切回ens33,因为mode=1下bonding驱动默认不会把流量切回优先级高的网卡,除非原主卡成了唯一存活链路。如果需要回切,可以手动操作:

ifenslave -c bond0 ens33

或者干脆用ip命令:

ip link set ens33 down ip link set ens33 up

整个切换测试过程中,观察业务侧应用日志是否出现超时或RST。如果业务系统对网络抖动敏感,建议把miimon调低,同时配合arp_interval和arp_ip_target做双保险。

4.3 验证路由和网关漂移情况

很多时候bond0起来了,但业务还是不通,问题出在路由表上。

检查route表:

ip route show

正常情况只有一条默认路由指向网关,且dev是bond0。如果发现两条默认路由,或者有路由的dev指向物理网卡,说明之前的配置残留,必须清理。

清空路由残留:

ip route flush dev ens33 ip route flush dev ens34 ip route add default via 192.168.10.1 dev bond0

同时在/etc/sysconfig/network-scripts/route-bond0里固化:

default via 192.168.10.1 dev bond0

这样防火墙、路由表在重启后也不会漂。

5. 常见问题与排查技巧实录

5.1 问题速查表

故障现象可能原因排查方法
bond0未生成bonding模块未加载或NetworkManager抢占modprobe bonding,检查NM状态
bond0有IP但ping不通网关物理网卡配置残留IP或路由问题ip route check,清残留路由
从属网卡一直不up网卡未接入网络或驱动问题ethtool查看link,检查交换机端口
重启后bond配置丢失模块未持久化或ONBOOT未设为yes检查modprobe.d和ONBOOT参数
切换测试不生效miimon=0或物理链路未断开完全cat /proc/net/bonding/bond0确认
出现IP冲突物理网卡和bond0同时配置了IP检查所有ifcfg文件,物理网卡不设IP

5.2 麒麟V10特有的隐患

麒麟V10虽然兼容RHEL体系,但有些隐患是这版系统独有的。

第一个隐患是克隆虚拟机导致UUID和MAC绑定问题。很多麒麟V10跑在虚拟化平台上,从模板克隆出来的虚机,网卡MAC变了,但ifcfg文件里还可能留着旧的HWADDR条目。这种情况下网卡可能起不来或者绑定失败。处理方式是把ifcfg-ens33、ifcfg-ens34文件里的HWADDR、UUID行删掉,让系统重新识别。

第二个隐患是BONDING_OPTS引号问题。老版本Linux允许不带引号的写法,但麒麟V10的脚本解析器对这个参数有严格要求。实测必须用双引号将整个BONDING_OPTS包住,并且mode、miimon、fail_over_mac三项不换行。格式错了,network服务会直接忽略bond0配置,且不报错。

第三个隐患是DNS配置遗漏。麒麟V10默认的resolv.conf可能被NetworkManager或systemd-resolved接管,手动在ifcfg-bond0里写DNS1、DNS2之后,重启网络服务会发现resolv.conf被覆盖。这时候要么关闭NM并且禁用resolvconf的hook,要么用nmcli的ipv4.dns配置。

第四个坑是网络服务冲突。有些麒麟最小化版本没有network服务,或者NetworkManager和network服务同时在拉起网络,导致bond0在network服务起来一瞬间被NM接管了。建议要么彻底禁用NM走ifcfg,要么彻底走NM方案,不要两边混用。

5.3 从实战中总结的几点见解

配置双网卡绑定这块,我个人的体会是:比命令更重要的是整体思维。

第一,bonding不是堆硬件,是设计冗余。物理链路要独立,如果两块网卡连到同一台交换机,那交换机挂了业务还是断。有条件的话,两块网卡分别接两台交换机,配合交换机的堆叠或者VPC技术,实现真正的设备级冗余。

第二,绑定参数不是越多越好。除了mode和miimon,其他参数默认配置就够用。有人喜欢加主备优先级primary参数,让指定网卡作为首选激活口,这没问题,但要明白primary只影响初始状态,链路故障恢复后不会自动切回主卡。

第三,变更前后做好记录和验证。实测生产环境做完bond后,最好保留切换测试记录、路由表快照、bond状态快照。后续出了问题,直接对比快照定位,省时省力。

最后再分享一个小技巧:配置完成后,强烈建议启动时自动加载bonding模块,并且把网络服务设为开机自启。用systemd平台的话,还可以把ifcfg-bond0里的ONBOOT=yes放到第一位,避免boot阶段网卡没起来导致后续服务启动失败。踩过几次坑之后你会明白,宁可多写一行配置,也不要凌晨两点爬起来处理业务中断的事故。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询