1. 网卡bonding到底在解决什么问题?——别再把bond0当“双网卡插上就变快”的玄学了
你是不是也遇到过这些场景:某台服务器明明配了两块千兆网卡,但单个业务跑起来吞吐始终卡在900Mbps上下,怎么调优都上不去;或者更糟——某天凌晨交换机端口突然down掉,整台服务直接失联,监控告警响成一片,而你翻着日志才发现,那根被拔掉的网线连着的是唯一对外的网卡;又或者,运维同事在机房巡检时顺手拔了根“看起来不重要的”网线做链路测试,结果核心数据库连接池瞬间打满,APM里SQL响应时间曲线像坐上了火箭……这些不是故障率高的巧合,而是单点网络路径带来的系统性脆弱。
网卡bonding(Linux内核中正式名称为bonding driver,现多称teamd或link aggregation)根本不是为了“让网速翻倍”而生的。它的原始设计目标非常务实:消除单点物理链路依赖,构建可预期、可管理、可恢复的网络接入层韧性。bond0、bond1、bond4这些数字,不是性能档位,而是不同故障应对策略的代号——就像汽车的安全气囊有前排双气囊、侧气囊、气帘之分,每种部署逻辑对应不同的碰撞场景。
我最早在某高校数据中心做虚拟化平台支撑时踩过一个典型坑:当时为一台承载200+虚拟机的宿主机配置了两块万兆网卡,按网上教程简单设成bond0(balance-rr),结果发现VM之间跨宿主机迁移时偶尔丢包严重,排查三天才发现是交换机未开启LACP,而balance-rr模式下数据包按轮询发往不同端口,但返回路径却因交换机MAC表学习不一致导致部分回包被丢弃。这个教训让我彻底明白:bonding不是贴膏药式的性能补丁,而是需要网络设备、驱动、内核参数、业务流量特征四者对齐的系统工程。
所以当你看到“bond0、1、4配置”这个标题时,请先放下“哪个最快”的执念。真正该问的是:你的业务能容忍多长的中断?是否要求会话不中断?交换机支持哪些聚合协议?流量是大量小包还是持续大流?有没有VLAN或VXLAN封装需求?这些才是决定选bond0、bond1还是bond4的底层逻辑。接下来我会用真实调试记录、内核日志片段、tcpdump抓包对比和生产环境压测数据,带你一层层剥开这三层皮:协议原理 → 内核实现 → 现场落地。所有配置命令都附带参数含义推导过程,不让你死记硬背。
2. bond0/bond1/bond4的本质差异:不是“模式编号”,而是“故障域隔离策略”
很多人以为bond0、bond1、bond4只是Linux内核里几个预设的编号,改个数字就能切换效果。这是最大的认知偏差。实际上,这三种模式代表三种完全不同的数据平面调度逻辑与控制平面协同机制,其差异深度嵌入到内核网络栈的收发路径中。我们逐个拆解,重点说清“为什么这样设计”。
2.1 bond0(balance-rr):轮询式负载分担——最易上手,也最易踩坑
balance-rr模式的核心行为是:发送方向按顺序将数据包分发到各slave网卡,接收方向由各网卡独立处理,不进行任何跨网卡状态同步。
提示:它不要求交换机做任何特殊配置,物理上只要两根网线分别插到同一台交换机的不同端口即可工作。这也是它成为新手首选的原因。
但问题恰恰出在这里。假设你有eth0和eth1组成bond0,发送一个TCP流:
- 包1 → eth0 → 交换机端口1
- 包2 → eth1 → 交换机端口2
- 包3 → eth0 → 交换机端口1
- ……
交换机收到后,会基于源MAC地址学习到:bond0的MAC地址同时出现在端口1和端口2。此时若交换机采用标准的“最后学习到的端口为准”策略(绝大多数家用/低端交换机默认行为),那么当客户端发起回包时,交换机可能将所有回包都转发到端口2(因为包2最新),导致eth0收不到任何回包,TCP连接直接超时重传。
我在某次边缘计算节点部署中就遇到此问题:现场用的是某品牌百兆非网管交换机,bond0配置后iperf3测速显示双向都能跑满,但实际运行MQTT服务时,设备上线后30秒内必掉线。抓包发现客户端发来的PUBACK应答全部被eth0丢弃——因为交换机把bond0的MAC地址只记在了eth1对应的端口上。解决方案不是换模式,而是强制交换机端口绑定MAC(port security + static MAC binding),但这要求交换机支持且需人工配置,违背了balance-rr“即插即用”的初衷。
所以balance-rr的真实适用场景极其有限:仅适用于纯单向大流量广播/组播分发(如视频推流服务器向局域网内多个接收端发送相同内容),或交换机明确支持并已配置802.3ad静态聚合的环境。对通用TCP/UDP业务,它不是一个“轻量级选项”,而是一个“高风险陷阱”。
2.2 bond1(active-backup):主备切换的确定性保障——牺牲带宽,换取零会话中断
active-backup模式的设计哲学非常清晰:任何时候只有一块网卡处于活动状态(active),其他网卡待命(backup),当active网卡链路失效时,毫秒级切换至backup网卡,且MAC地址保持不变。
关键点在于“MAC地址保持不变”。Linux bonding驱动在初始化时,会将bond接口的MAC地址同步设置到所有slave网卡的硬件寄存器中。当active网卡(比如eth0)宕机时,驱动立即执行:
- 将bond的MAC地址从eth0的寄存器中清除;
- 将该MAC地址写入eth1的寄存器;
- 触发ARP通告(gratuitous ARP),通知局域网内所有设备:“bond0的MAC现在在eth1上”。
整个过程在内核态完成,无需用户空间干预。实测切换时间(从链路down检测到ARP通告发出)稳定在50~80ms,远低于TCP的RTO最小值(通常200ms以上),因此上层TCP连接不会感知中断。
我在某金融行情推送系统中大规模采用此模式。该系统要求行情数据流不能出现超过100ms的中断(否则交易员终端会触发断线重连)。我们用ethtool -s eth0 down模拟网卡故障,通过tcpdump在客户端抓包验证:最后一个来自eth0的包时间戳为10:00:00.123456,第一个来自eth1的包时间戳为10:00:00.123532,间隔仅76微秒。而客户端应用层日志显示,心跳包序列号连续,无重传。
但代价也很明显:带宽无法叠加。即使你插了4块万兆网卡,有效带宽仍是单块万兆。所以active-backup不是性能方案,而是SLA兜底方案。它适合:数据库主库、Kubernetes master节点、核心API网关等“宁可慢一点,不能断一下”的关键组件。
2.3 bond4(802.3ad / LACP):标准化动态聚合——带宽与冗余的平衡点
802.3ad(Link Aggregation Control Protocol)是IEEE制定的标准协议,bond4即其实现。它要求交换机与服务器两端都运行LACP协议,通过周期性发送LACPDU(Link Aggregation Control Protocol Data Unit)报文协商聚合参数。
LACP的工作流程分三步:
- Discovery:双方每秒发送一次LACPDU,携带自身系统优先级、端口优先级、操作Key(标识本端认为可聚合的端口组)等信息;
- Selection:根据系统优先级→端口优先级→端口号的三级排序规则,选出“Actor”和“Partner”,并确定哪些端口进入Active状态;
- Synchronization:双方确认聚合组状态一致后,开始按哈希算法分发流量。
最关键的哈希算法(xmit_hash_policy)决定了负载均衡效果。内核默认使用layer2+3(源/目的MAC+IP),这意味着同一个TCP连接的所有包必然走同一块物理网卡——这避免了乱序问题,但也意味着单个大流无法突破单网卡带宽限制。如果你有10个并发TCP连接,它们大概率被哈希到不同网卡,总带宽才能接近理论值(N×单卡带宽)。
我在某CDN边缘节点实测:8块25G网卡组成bond4,iperf3启动16个并行流,总带宽达185Gbps(理论200Gbps的92.5%);但若只启1个流,最高仅24.8Gbps。这印证了LACP的本质:它是面向连接数的负载分担,而非面向字节的带宽叠加。
选择bond4的前提非常刚性:交换机必须支持LACP且已启用,且两端配置的LACP超时(short/long)、系统优先级等参数需匹配。它不适合临时调试或老旧网络环境,但一旦跑通,就是生产环境最值得信赖的方案——既获得近似线性的带宽扩展能力,又具备毫秒级故障切换能力(LACP检测周期默认1秒,可调至0.3秒)。
3. 从零开始配置bond0/bond1/bond4:不只是敲几行命令
配置bonding绝不是复制粘贴几条命令就完事。真正的难点在于:如何让内核模块加载、网络接口初始化、交换机联动、业务流量验证形成闭环。下面以CentOS 7.9(内核3.10.0-1160)和主流交换机为例,给出可直接复用的完整流程,并解释每一步背后的必要性。
3.1 基础环境准备与内核模块确认
首先确认系统已加载bonding模块:
# 检查模块是否已加载 lsmod | grep bonding # 若无输出,手动加载(临时) modprobe bonding mode=1 miimon=100 # 永久生效:写入/etc/modules-load.d/bonding.conf echo "bonding" > /etc/modules-load.d/bonding.conf注意:
miimon=100参数表示链路监测间隔为100ms,这是active-backup和802.3ad模式的必备参数。它通过定期发送MII(Media Independent Interface)信号检测物理链路状态,比依赖上层协议(如ARP)更快速可靠。很多线上故障源于忘记设置此参数,导致链路down后切换延迟长达数秒。
接着检查网卡驱动兼容性。某些厂商定制驱动(如某些Intel X710网卡的i40e驱动)在bonding模式下存在已知bug。执行:
# 查看网卡驱动及firmware版本 ethtool -i eth0 | grep -E "(driver|firmware)" # 对比Linux内核文档中的已知问题列表(如Documentation/networking/bonding.txt)我曾遇到某国产网卡驱动在bond4模式下,LACPDU报文发送异常,导致聚合组始终无法进入selected状态。最终解决方案是升级firmware至最新版,并在modprobe配置中添加use_carrier=1参数强制使用载波检测。
3.2 bond1(active-backup)配置:追求极致可靠性
步骤1:创建bond接口配置文件
# 编辑 /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 NAME=bond0 TYPE=Bond BONDING_MASTER=yes BOOTPROTO=static IPADDR=192.168.10.100 NETMASK=255.255.255.0 GATEWAY=192.168.10.1 ONBOOT=yes BONDING_OPTS="mode=active-backup miimon=100 primary=eth0 fail_over_mac=active"关键参数解析:
mode=active-backup:指定模式miimon=100:100ms链路检测,必须设置primary=eth0:指定eth0为默认active网卡,避免切换后业务IP漂移到非预期网卡fail_over_mac=active:当发生切换时,将bond的MAC地址同步到新active网卡。这是保证会话不中断的核心机制,绝对不可省略。
步骤2:配置slave网卡(eth0和eth1)
# /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 NAME=eth0 TYPE=Ethernet BOOTPROTO=none ONBOOT=yes MASTER=bond0 SLAVE=yes USERCTL=no # /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1 NAME=eth1 TYPE=Ethernet BOOTPROTO=none ONBOOT=yes MASTER=bond0 SLAVE=yes USERCTL=no注意:slave网卡不能配置IP地址,且
BOOTPROTO=none必须显式声明。曾有同事误将eth1的IP设为192.168.10.101,导致系统路由混乱,bond0的ARP请求被eth1拦截,引发大面积通信失败。
步骤3:重启网络服务并验证
systemctl restart network # 查看bond状态 cat /proc/net/bonding/bond0 # 输出应包含: # Bonding Mode: fault-tolerance (active-backup) # Currently Active Slave: eth0 ← 确认active网卡 # MII Status: up # Speed: 1000 Mbps步骤4:故障注入测试(关键!)
# 模拟eth0物理断开(拔网线或禁用) ip link set eth0 down # 等待1~2秒,查看状态 cat /proc/net/bonding/bond0 | grep "Currently Active Slave" # 应变为 "eth1" # 同时在另一台机器ping此bond0 IP,观察丢包数(应≤1个) ping -c 10 192.168.10.1003.3 bond4(802.3ad)配置:与交换机深度协同
步骤1:交换机侧配置(以Cisco IOS为例)
# 进入全局配置模式 configure terminal # 创建Port-channel 1 interface Port-channel 1 switchport mode trunk switchport trunk allowed vlan 10,20 # 启用LACP,设置为active模式(服务器侧默认active,故交换机需配active或passive) channel-protocol lacp channel-group 1 mode active # 将物理端口加入 interface GigabitEthernet1/0/1 channel-group 1 mode active interface GigabitEthernet1/0/2 channel-group 1 mode active关键点:交换机
channel-group mode必须与服务器端lacp_rate匹配。服务器默认lacp_rate=slow(30秒周期),若交换机配mode active则自动适配;若需快速检测,需在服务器配置中添加lacp_rate=fast(1秒周期),此时交换机必须配lacp rate fast。
步骤2:服务器bond4配置文件
# /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 NAME=bond0 TYPE=Bond BONDING_MASTER=yes BOOTPROTO=static IPADDR=192.168.10.100 NETMASK=255.255.255.0 GATEWAY=192.168.10.1 ONBOOT=yes BONDING_OPTS="mode=802.3ad miimon=100 xmit_hash_policy=layer2+3 lacp_rate=fast" # slave网卡配置同bond1,但无需primary参数 # /etc/sysconfig/network-scripts/ifcfg-eth0 和 ifcfg-eth1 保持一致步骤3:验证LACP协商状态
# 查看bond详细状态 cat /proc/net/bonding/bond0 # 关键字段: # Bonding Mode: IEEE 802.3ad Dynamic link aggregation # LACP rate: fast # Aggregator ID: 1 ← 表示聚合组已建立 # Currently Active Slave: eth0 # Slave Interface: eth0 # MII Status: up # Link Failure Count: 0 # Slave Interface: eth1 # MII Status: up # Link Failure Count: 0若看到Aggregator ID: N/A,说明LACP协商失败。常见原因:
- 交换机未启用LACP(
channel-protocol lacp缺失) - 两端
lacp_rate不匹配 - 物理链路质量差导致LACPDU丢包(可用
tcpdump -i eth0 ether proto 0x8809抓LACPDU验证)
3.4 配置后必做的5项验证测试
无论哪种模式,配置完成后必须执行以下测试,缺一不可:
基础连通性测试
ping -c 5 192.168.10.1 # 网关 ping -c 5 8.8.8.8 # 外网带宽压测(区分模式)
- bond1:用
iperf3 -c <server> -t 30测单流,确认带宽≈单卡标称值 - bond4:用
iperf3 -c <server> -P 16 -t 30测16并行流,确认总带宽≥(N-0.2)×单卡带宽
- bond1:用
故障切换时延测试
# 在客户端执行持续ping,同时服务器端执行 ip link set eth0 down && sleep 0.1 && ip link set eth0 up # 观察ping丢包数和最大延迟ARP表一致性检查
# 服务器端 ip neigh show | grep 192.168.10 # 客户端执行arp -a | findstr "192.168.10.100",确认MAC地址始终为bond0的MAC内核日志健康检查
dmesg -T | grep -i "bond\|link\|lacp" | tail -20 # 正常应无"failed"、"error"、"timeout"字样,重点看是否有"link status up/down"事件
4. 生产环境踩过的7个深坑与独家避坑指南
配置文档永远比实际运维简单。以下是我在三年间支撑超200个bonding节点过程中,总结出的最具杀伤力的7个问题,每个都附带真实日志、定位方法和根治方案。
4.1 坑1:bond4聚合组反复up/down,dmesg刷屏“LACPDU timeout”
现象:cat /proc/net/bonding/bond0中Aggregator ID频繁变化,dmesg持续输出:
[Mon Jan 1 10:00:00 2023] bonding: bond0: LACPDU with invalid length 0 on eth0 [Mon Jan 1 10:00:00 2023] bonding: bond0: LACPDU timeout on eth0根因:交换机端口启用了风暴控制(Storm Control),将LACPDU(目的MAC为01:80:c2:00:00:02)误判为未知组播流量并限速或丢弃。LACPDU是二层协议报文,不走IP栈,常规防火墙无法捕获,极易被网络设备QoS策略误伤。
诊断:在服务器端抓取LACPDU:
tcpdump -i eth0 -nn -c 10 'ether dst 01:80:c2:00:00:02' # 若无输出,但交换机端口LACP状态正常,则问题在交换机侧根治:登录交换机,关闭风暴控制或为LACPDU添加白名单。Cisco示例:
interface GigabitEthernet1/0/1 no storm-control broadcast level 1.00 no storm-control multicast level 1.004.2 坑2:bond1切换后,客户端TCP连接持续重传,无法恢复
现象:ip link set eth0 down后,bond0切换至eth1,但客户端netstat -tn显示连接状态为ESTABLISHED,却无法收发数据,ss -i显示retrans计数持续增长。
根因:客户端所在网络存在ARP缓存老化时间过长(如Windows默认1200秒),且服务器未及时发送Gratuitous ARP。虽然bonding驱动默认会发,但若arp_interval参数未设置,可能因内核调度延迟导致ARP通告滞后。
诊断:在客户端执行:
arp -a | findstr "192.168.10.100" # 查看对应MAC是否仍为eth0的旧MAC根治:在bond0配置中强制启用快速ARP通告:
# /etc/sysconfig/network-scripts/ifcfg-bond0 添加 ARP_INTERVAL=1000 ARP_IP_TARGET=192.168.10.1 # 网关IP,确保通告被网关接收同时,在客户端网络设备(如企业防火墙)上缩短ARP老化时间至300秒以内。
4.3 坑3:bond4下iperf3多流测试带宽不达标,哈希严重倾斜
现象:8块25G网卡bond4,iperf3 -P 32测试,总带宽仅110Gbps,远低于理论200Gbps。
根因:默认xmit_hash_policy=layer2+3对某些流量哈希效果差。例如,所有测试流均来自同一台客户端(源IP相同),且目标端口固定(如iperf3默认5201),导致哈希值高度集中。
诊断:查看各网卡实际流量:
watch -n1 'cat /proc/net/dev | grep -E "(eth0|eth1|eth2)"' # 发现eth0流量95%,eth1~eth7几乎为0根治:更换哈希策略。针对IP固定场景,改用layer3+4(源/目的IP+端口):
# 临时修改 echo "layer3+4" > /sys/class/net/bond0/bonding/xmit_hash_policy # 永久生效:在BONDING_OPTS中添加 xmit_hash_policy=layer3+4实测切换后,32流带宽提升至192Gbps,各网卡负载偏差<15%。
4.4 坑4:VMware ESXi宿主机上bond4无法识别,vSwitch报“Link Down”
现象:物理服务器bond4配置正确,但连接的ESXi宿主机vSwitch显示所有上行链路为灰色(Link Down)。
根因:ESXi的vSwitch对LACP支持有严格要求——必须使用LACP Passive模式,且要求交换机侧配为Active。而Linux bonding默认为Active模式,导致协商失败。
诊断:ESXi后台日志(/var/log/vmkernel.log)含:
LACP: Partner state is not synchronized根治:修改服务器bond4配置为Passive模式:
# BONDING_OPTS中改为 mode=802.3ad miimon=100 lacp_rate=fast ad_actor_system_prio=65535 ad_actor_port_prio=255 # 并在交换机侧将channel-group mode改为active注意:ad_actor_system_prio=65535(最高优先级)确保服务器在LACP选举中胜出,避免因优先级低导致聚合失败。
4.5 坑5:bond1模式下,多路径路由(ECMP)导致流量黑洞
现象:服务器配置bond1,同时启用BGP宣告多条等价路径,上游路由器ECMP分流后,部分流量进入服务器后无法响应。
根因:bond1的active网卡接收所有流量,但backup网卡的硬件队列中可能残留未处理完的包。当切换发生时,这些包被丢弃,而上层协议(如TCP)无感知,造成“半连接”黑洞。
诊断:cat /proc/net/dev中backup网卡的rx_dropped计数在切换后突增。
根治:启用bonding的all_slaves_active=1参数,让backup网卡也参与接收(仅处理ARP等控制报文):
# BONDING_OPTS添加 all_slaves_active=1此参数使backup网卡保持RX队列活跃,避免切换时丢包。
4.6 坑6:容器网络(CNI)与bonding冲突,Pod网络不通
现象:Kubernetes集群节点配置bond4,但Pod间网络不通,kubectl exec -it <pod> -- ping <other-pod>失败。
根因:CNI插件(如Calico)在初始化时,会扫描所有网卡并尝试绑定。若bond4尚未完成LACP协商(Aggregator ID为N/A),CNI可能错误地将流量导向未激活的slave网卡。
诊断:calicoctl node status显示BIRD状态为NotReady,journalctl -u calico-node | grep "bond0"含:
Failed to get interface bond0 stats: no such device根治:在CNI配置中显式指定bond接口,并添加等待逻辑:
// /etc/cni/net.d/10-calico.conflist { "name": "calico-network", "cniVersion": "0.3.1", "type": "calico", "log_level": "info", "datastore_type": "kubernetes", "mtu": 1440, "ipam": { "type": "calico-ipam" }, "policy": { "type": "k8s" }, "kubernetes": { "kubeconfig": "/etc/cni/net.d/calico-kubeconfig" }, "iface": "bond0" // 强制指定bond接口 }同时,编写systemd service依赖,确保calico-node在network-online.target之后启动。
4.7 坑7:bond4聚合组建立后,VXLAN隧道流量异常丢包
现象:服务器运行OVS-DPDK,bond4作为物理上行,VXLAN隧道内虚拟机互访时,大包(>1400字节)丢包率>30%。
根因:bond4的MTU继承自slave网卡(通常1500),但VXLAN封装增加50字节(UDP+IP+VXLAN头),导致实际MTU仅1450。当虚拟机发送1500字节IP包时,经VXLAN封装后超1500,被bond4或交换机丢弃。
诊断:tcpdump -i bond0 -s0 -w vxlan.pcap抓包,用Wireshark过滤vxlan && frame.len > 1500,确认是否存在超长帧。
根治:统一调整MTU链:
# 设置bond0 MTU为9000(Jumbo Frame) ip link set bond0 mtu 9000 # 设置slave网卡MTU ip link set eth0 mtu 9000 ip link set eth1 mtu 9000 # OVS桥接MTU ovs-vsctl set Bridge br-int other_config:mtu_request=9000并确保交换机端口MTU同步调整至9000。
5. 配置之外的关键决策:如何为你的业务选对模式?
看到这里,你可能已经意识到:没有“最好”的bonding模式,只有“最适合”的模式。选择本质是权衡——在带宽、延迟、可靠性、运维复杂度、设备兼容性之间找平衡点。我整理了一张实战决策树,覆盖95%的生产场景:
| 业务类型 | 网络设备现状 | 推荐模式 | 核心理由 | 典型案例 |
|---|---|---|---|---|
| 核心数据库主库 | 老旧非网管交换机 | bond1 | 无需交换机配合,故障切换<100ms,保障事务连续性 | MySQL主库、PostgreSQL HA节点 |
| Kubernetes Master节点 | 支持LACP的盒式交换机 | bond4 | 带宽叠加满足etcd高频心跳,LACP快速检测避免脑裂 | 3节点K8s control plane |
| CDN边缘缓存服务器 | 万兆TOR交换机,已启用LACP | bond4 | 16+并发HTTP流天然分散,带宽利用率>90% | Nginx缓存集群 |
| 物联网设备接入网关 | 工业级交换机,不支持LACP | bond0 | 设备仅需单向上报数据,且交换机支持端口MAC绑定 | LoRaWAN网关 |
| 高频交易行情分发 | 专用低延迟交换机,支持802.1aq | bond1 | 绝对确定性时延,避免LACP协商引入微秒级抖动 | 证券行情推送服务器 |
| OpenStack计算节点 | Cisco Nexus系列,已配Port-channel | bond4 | 与Neutron ML2插件深度集成,支持VLAN/VXLAN透传 | Nova compute节点 |
| 边缘AI推理服务器 | 无交换机,直连上级核心 | bond1 | 上级设备为堆叠核心,单端口带宽足够,重点保活 | Jetson AGX Orin推理节点 |
这张表背后是我踩过的所有坑沉淀出的经验。比如“高频交易行情分发”选bond1,是因为某次bond4在LACP协商期间(约1.2秒)丢失了关键行情快照,导致下游量化策略触发错误止损。而“物联网网关”选bond0,是因为现场用的工业交换机固件无法升级,但允许配置端口安全,用MAC绑定规避了balance-rr的乱序问题。
最后分享一个反直觉但极实用的技巧:在bond4环境中,刻意制造一块网卡“亚健康”。例如,将其中一块网卡的ethtool -s eth2 speed 1000 duplex full强制降速为千兆,其余保持万兆。这样当LACP协商时,系统会将高优先级流量(如SSH管理、Prometheus监控)哈希到万兆网卡,而低优先级备份流量走千兆网卡。这相当于用硬件特性实现了简易的流量分级——不需要SDN控制器,成本为零。
网卡bonding不是炫技的玩具,而是构筑网络韧性的基石。每一次ip link set down的指令,都应该伴随着对业务影响的精确预判。当你能看着/proc/net/bonding/bond0的状态,就说出此刻流量走向、故障域边界、以及下一步该检查哪台交换机的日志时,你就真正掌握了它。