服务器bond0交换机配置的核心答案:服务器bond0模式本质是双网卡绑定成一块逻辑网卡,交换机侧无需特殊配置,但若换用bond4则必须启用交换机的LACP链路聚合,配置的关键在于搞清楚你用的哪种bond模式。
先把bond0和交换机的真实关系说清楚
很多运维新手上手就翻交换机配置手册,其实这是本末倒置,bond0是Linux内核原生的网卡绑定模式,官方名称叫balance-rr,它的工作方式是轮询数据包依次从两块物理网卡发出去,交换机看到的就是两个普通接口,不参与任何聚合协商,所以在交换机上你什么都不用做,插上两根网线就能通。
但要命的是,bond0这种轮询机制在某些场景下会出乱子,如果交换机开启了STP(生成树协议),默认端口要经历listening到learning再到forwarding,差不多要等30到50秒,这段时间服务器往外发包,交换机端口还没就绪,业务就会卡顿。行业共识是,给服务器接bond0的交换机端口务必配成边缘端口(portfast或edge-port),直接跳过STP状态检测。
另外有个细节,很多老工程师栽过跟头:bond0模式下如果交换机端口启用了port-security,检测到同一MAC地址漂移到两个物理端口,会把其中一个端口直接err-disable掉,所以接bond0之前,先把交换机端口的port-security关掉,或者允许MAC地址数大于2。
服务器bond0和bond4到底哪个好:先看场景再做决定
长话短说,bond0和bond4之间是”要不要交换机配合”的根本差异,bond4也叫3ad动态聚合,它基于LACP协议,要求交换机必须配置对应的Eth-Trunk,而且物理模式、速率、双工都得匹配,否则聚合口起不来。
| 对比维度 | bond0(轮询) | bond4(LACP) |
|---|---|---|
| 交换机配置 | 不需要,插上就能通 | 必须配Eth-Trunk和LACP |
| 吞吐量 | 双向流量都能跑满两块网卡,但单条TCP流卡在一张网卡上 | 基于哈希分发,多TCP流场景更均匀 |
| 容错机制 | 网卡挂了自动切流量,但交换机端口down掉需要检测时间 | 收敛速度更快,LACP可快速感知链路状态 |
| 适用场景 | 中小机房、单机高吞吐(比如FTP/NFS) | 大规模集群、需要负载均衡的生产环境 |
我的建议是,如果你只有一台服务器、两根网线接一个交换机,bond0完全够用,改交换机配置反而增加变数。 但如果是机房里有几十台服务器做虚拟化集群,流量模型分散,bond4的优势就出来了它的哈希算法能按MAC和IP把不同会话分散到不同物理网卡上,不容易出现bond0那种”一根网线累死另一根闲着”的情况。
服务器bond0配置步骤:五步走,照着敲就行
在CentOS/RHEL系列系统上配bond0,路径很明确,首先要确认内核模块加载了bonding:
modprobe bonding
然后把两块物理网卡(以eth0和eth1为例)的配置文件分别改掉,在/etc/sysconfig/network-scripts/ifcfg-eth0里写入:
DEVICE=eth0
TYPE=Ethernet
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ifcfg-eth1同理,接着新建/etc/sysconfig/network-scripts/ifcfg-bond0:
DEVICE=bond0
TYPE=Bond
BONDING_MASTER=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
BONDING_OPTS="mode=1 miimon=100"
注意这里的mode=1其实是active-backup主备模式,如果你要的是真正意义上的bond0轮询负载均衡,改成mode=0,然后重启网络服务,用cat /proc/net/bonding/bond0看绑定状态,MII Status显示UP就说明通了。
华为交换机bond0配置实例:顺着流量查问题更快
既然说到了交换机侧,拿华为设备举例子,华为交换机的Eth-Trunk有两种模式:手动模式和LACP模式,配bond0对应的就是手动模式,配bond4对应的才是LACP模式。
如果服务器用的是bond0(mode=0),华为交换机上这样配:
[Switch] interface Eth-Trunk 1
[Switch-Eth-Trunk1] mode manual load-balance
[Switch-Eth-Trunk1] trunkport GigabitEthernet 0/0/1
[Switch-Eth-Trunk1] trunkport GigabitEthernet 0/0/2
注意如果交换机端口底下配了VLAN,Eth-Trunk也要放行对应的VLAN,一般用port trunk allow-pass vlan 10这种命令,另一个高频坑是,华为交换机默认的负载均衡模式基于源MAC和目的MAC,如果服务器端bond0走的是IP哈希,两边算法不一样会导致流量分布不均,可以在Eth-Trunk视图下用load-balance src-dst-ip把哈希算法调到IP层对齐。
如果服务器换成了bond4,交换机这边就必须上LACP:
[Switch] interface Eth-Trunk 1
[Switch-Eth-Trunk1] mode lacp-static
[Switch-Eth-Trunk1] trunkport GigabitEthernet 0/0/1
[Switch-Eth-Trunk1] trunkport GigabitEthernet 0/0/2
LACP模式下交换机主动发LACPDU报文,服务器网卡收到后才会协商成功,如果对端没反应,先查物理层是不是有Error-down,再查两端mode是不是都是active。
服务器bond0网卡绑定不生效:排障思路比命令更重要
遇到bond0起不来,别急着重启网络,按下面的顺序排查最省时间。
- 第一步:确认网卡驱动认到了两块物理网卡,用
ethtool eth0看Link detected: yes,如果有一块是no,线缆或交换机端口故障,不是配置问题。 - 第二步:检查
/etc/modprobe.d/bonding.conf是否配置了alias绑定,有些发行版需要指定alias bond0 bonding,否则重启后bond0消失。 - 第三步:看
dmesg | grep bonding的日志,如果提示”bond0: link status definitely down”,说明对端交换机端口没起来,返回去查交换机端口状态。 - 第四步:验证负载效果,用
ip link set bond0 down && ip link set bond0 up重置后,跑一个iperf3 -c 目标IP -t 60 -P 4,观察两块网卡的流量比例,bond0模式下如果只有一张网卡有流量,大概率是mode没改成0,或者被NetworkManager接管了配置。
NetworkManager是bond0的头号天敌,凡是图形界面装出来的系统,NetworkManager会默认接管网络配置,导致改完ifcfg-不生效,处理办法很简单:systemctl stop NetworkManager && systemctl disable NetworkManager,然后重启network服务,生产环境我一直建议直接关掉这玩意。
bond4模式下交换机聚合口起不来:优先级和速率必须对齐
换到bond4场景,常见问题集中在LACP协商阶段,华为交换机上跑display lacp statistics,能看到LACPDU的收发计数,如果收包一直是0,说明对端根本没发LACP报文,这时候要确认服务器的bond4配置里miimon和lacp_rate参数是否正常。
比较隐蔽的一个坑是速率和双工模式不一致,服务器网卡可能自动协商到1000M全双工,但交换机端口挨着服务器主板供电问题,协商成了百兆,结果是Eth-Trunk里两个成员口速率不一致,LACP聚合口起不来,排查方法是用display eth-trunk 1看两个成员口的Speed字段,如果有S100和S1000并存,聚合就是失败的。
另一个实战教训是STP边缘端口没开,bond4的交换机端口如果连接服务器的口不是边缘端口,STP计算过程中LACP报文会被丢弃,聚合协商自然失败,因此华为交换机上务必配stp edged-port enable,这个步骤相当于给LACP报文开了绿灯。
上海某机房服务器bond0交换机怎么配置的完整实战复盘
去年帮朋友处理过一个上海机房的实际案例,场景是业务高峰期NFS存储链路频繁抖动,他们接了两根千兆网线做bond0,但交换机是华为S5720系列,当时的配置思路可以拆解为三步:
- 第一步:确认交换机端口成对划进同一个VLAN,且端口类型一致,他们原配置里一个端口是access,一个端口是trunk,导致bond0的轮询流量行为出现异常,因为两个端口的PVID不同,二层封装都不一样。
- 第二步:华为那边加了两条命令
loopback-detect enable,防止双网卡汇聚成环导致广播风暴,虽然bond0不参与链路聚合,但物理拓扑上确实存在环路风险,这个防护值得开。 - 第三步:交换机端口的STP指定为边缘端口,同时把
bpdu-filter enable打开,原因是华为交换机默认收到BPDU报文会自动把端口转为非边缘,导致网络抖动时STP重新计算,bond0流量出现断流窗口。
这套配置下来,NFS存储链路的稳定性明显改善,核心结论是:bond0的配置重心实际在交换机侧的”去干扰”而非”加特性”,把STP、端口安全、VLAN这些基础项弄干净,bond0工作得比预期更稳定。
具体场景下bond0配置的常见几个疑问
服务器bond0需要配几个IP?流量怎么走?
bond0只需要配置一个IP,物理网卡不配IP,数据包从bond0入口进来,由内核决定从哪张物理网卡出去,bond0轮询模式下,不同数据包轮流从两块网卡发出去,但对端交换机若是只支持单条TCP流哈希到同一端口,实际吞吐可能达不到双网卡叠加的效果,这是bond0的天然特性,不是配置问题。
服务器bond0是否必须接在同一台交换机上?
建议接同一台交换机,如果接两台不同的交换机,bond0的轮询模式会把流量同时从两台设备上发出去,遇到MAC地址飘移,交换机MAC表会不停震荡,严重时会导致二层环路和报文泛洪,机房规模大不得不跨交换机时,必须把这两台交换机做堆叠成一台逻辑设备,或者采用bond4模式稍微缓解,但本质还是要做堆叠,如果你在找”服务器bond0交换机怎么配置”这类信息,第一步就应该检查你的两个网口最终去了哪台物理交换机,这是排查一切问题的起点。
千兆和万兆混合接在bond0里行不行?
行是行,但效果比较尴尬,bond0轮询模式下,数据包轮流发到千兆口和万兆口,快速口总是等待慢速口完成传输,整体速率被千兆卡脖子,而且不同速率网卡的中断消耗不均衡,CPU软中断会集中在一张网卡上。强烈建议bond0成员网卡的速率、型号、驱动保持一致,要么全千兆,要么全万兆,混合使用只会在流量峰值时暴露出瓶颈。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/784405.html


