服务器bond模式就是把多块物理网卡绑成一块虚拟网卡的技术,用来实现网卡冗余和带宽聚合。 如果你管理过Linux服务器,大概率听说过bond、绑定网卡、网卡汇聚这些词,它们说的都是同一个东西,当一块网卡突然罢工,另一块能立刻接管,业务不中断;某些模式下,多块网卡还能同时分摊流量,让吞吐量明显提升。
服务器bond模式是什么?为什么网管离不开它?
服务器bond模式在Linux系统里叫bonding,Windows服务器下则常被称作teaming,本质上都是同一个思路:不再让流量只走一块网卡,而是让多块网卡组成一个“虚拟团队”,对外表现成一个统一的网络接口,比如bond0。
你可以把bond模式理解为快递站的多条运输线路,平时只有一条路在跑,一旦这条路堵了或者断了,另一条路马上启用,货车照常进出,如果多条路同时跑,快递吞吐能力自然翻倍,服务器网络也类似,核心目标只有两个:故障冗余和带宽扩展。
网卡bond的底层原理
bond虚拟出一个逻辑网卡接口,比如bond0,然后把你指定的物理网卡全部挂到这个接口下面,内核里的bonding驱动负责监控每块物理网卡的状态,并按照你选定的模式,决定数据包从哪块网卡进、哪块网卡出,一旦某块网卡链路断开,驱动会立刻把流量迁移到健康网卡上,这个切换过程通常能做到秒级甚至更短。
哪些服务器场景离不开bond?
- 数据库服务器:数据库连接数高,网络一旦抖动影响面很大,bond提供冗余保障。
- 虚拟化平台:一台物理机跑多台虚拟机,所有虚拟机共享物理网卡的出口带宽,bond能明显提升整体吞吐。
- 文件存储与备份服务器:频繁传输大块文件,多网卡聚合后能有效缩短传输时间。
- 高可用集群:节点间心跳通信要求连接稳定,bond可以避免单块网卡故障导致节点被误判下线。
Linux bond模式详解:7种模式一次看懂
Linux bonding驱动在大多数发行版里都内置,支持7种模式,从mode0到mode6,每种模式对容错、负载均衡、交换机配置的要求都不同,先看一张表,快速了解全貌:
| 模式 | 模式名 | 容错能力 | 负载均衡方式 | 交换机要求 |
|---|---|---|---|---|
| mode0 | balance-rr | 有 | 逐包轮询,双方向均衡 | 无特别要求 |
| mode1 | active-backup | 有 | 主备模式,无均载 | 无特别要求 |
| mode2 | balance-xor | 有 | 按MAC/IP哈希分派 | 可汇聚,但非必须 |
| mode3 | broadcast | 有 | 所有包从所有网卡发 | 无特别要求 |
| mode4 | 3ad | 有 | 基于LACP动态聚合 | 必须支持并启用LACP |
| mode5 | balance-tlb | 有 | 发送流量按负载分配 | 无特别要求 |
| mode6 | balance-alb | 有 | 收发流量都可均衡 | 无特别要求 |
7种模式的脾气秉性
- mode0(轮询):数据包一块网卡一个包轮流往外发,理论上能跑满所有网卡的聚合带宽,但容易出现数据包乱序,TCP传输效率有时反而不高。
- mode1(主备):平时只有一张网卡工作,另一张闲置待命,切换时ARP广播通知邻居更新MAC地址,配置简单,交换机零要求,是很多生产环境的首选。
- mode2(异或):通过源MAC和目的MAC做哈希计算,分配数据包走哪块网卡,链路利用率比mode1好,但单会话流量依然固定在一块网卡上。
- mode3(广播):每个数据包同时从所有网卡发送,容错性极强,但浪费带宽,实际部署很少见。
- mode4(LACP动态聚合):网卡与交换机之间通过LACP协议协商,建立动态链路聚合组,这种模式能同时利用多块网卡的带宽,而且故障切换速度快,是目前数据中心里最常用的高性能方案。
- mode5、mode6(自适应):mode5会根据每块网卡的实时负载动态调整发送流量分配;mode6在mode5基础上还能把入站流量也做均衡,它们不需要交换机特别配置,但会占用一定CPU资源。
mode1和mode4到底怎么选?
这是最常被问到的一个对比。mode1是主备,mode4是聚合。 区别非常直观:
- mode1只有一张网卡在干活,另一张纯粹做备用,两块千兆网卡绑定后,可用带宽还是千兆,优点是配置简单,只要服务器网卡驱动支持就行,交换机上不需要做任何聚合配置,故障切换速度通常在1秒内,对大多数业务来说足够。
- mode4需要交换机配合开启LACP,两端协商成功后,多块网卡可以同时并行收发数据,两块千兆网卡聚合后,传输吞吐的理论上限接近2Gbps,缺点是交换机不支持LACP就没法用,而且LACP配置不当容易出现协商失败,导致网络不通。
从实际部署来看,如果只是想要“网卡挂了业务不断”,mode1最省心;如果追求吞吐量,且交换机是支持LACP的企业级设备,mode4更合适,不少运维老手会默认用mode1,因为它在兼容性和稳定性上几乎挑不出毛病。
服务器bond模式配置实战:Linux下的标准操作
不同Linux发行版的bond配置方式略有差别,这里以最常见的CentOS/RHEL系和Ubuntu netplan为例,演示一套可直接照做的流程。
CentOS/RHEL系列:修改bond配置文件
传统ifcfg系列配置文件路径在/etc/sysconfig/network-scripts/,假设物理网卡是eth0和eth1,要绑定成bond0,IP地址为192.168.1.100,使用mode1。
第一步,创建ifcfg-bond0文件:
cat > /etc/sysconfig/network-scripts/ifcfg-bond0 <<EOF DEVICE=bond0 TYPE=Bond BONDING_MASTER=yes BOOTPROTO=static IPADDR=192.168.1.100 NETMASK=255.255.255.0 ONBOOT=yes BONDING_OPTS="mode=1 miimon=100" EOF
第二步,修改eth0和eth1的配置,把两块网卡设为bond0的从属接口:
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF DEVICE=eth0 ONBOOT=yes MASTER=bond0 SLAVE=yes USERCTL=no EOF
eth1的配置照葫芦画瓢,把DEVICE换成eth1即可。
第三步,重启网络服务:
systemctl restart network
或者用NetworkManager重新加载连接。
Ubuntu 18.04及以上:netplan配置
netplan配置文件一般在/etc/netplan/下,通常名为00-installer-config.yaml,下面是一个mode4的示例:
network:
version: 2
ethernets:
eth0:
dhcp4: no
eth1:
dhcp4: no
bonds:
bond0:
interfaces: [eth0, eth1]
addresses: [192.168.1.100/24]
parameters:
mode: 802.3ad
lacp-rate: fast
mii-monitor-interval: 100
保存后执行:
netplan apply
注意,使用mode4时必须在交换机上创建对应的LACP聚合口,否则bond0无法正常工作。
配置后怎么验证bond状态?
查看bond0的当前状态:
cat /proc/net/bonding/bond0
这个文件会显示bond当前使用的主从网卡、每个从属网卡的MII状态、以及mode类型,比如mode1下能看到Active Slave是eth0,当eth0断开时,Active Slave会自动变成eth1。
更直观的测试方式是拔线验证,在业务低峰期拔掉一根网线,观察ping包丢包情况或SSH连接是否中断,正常情况下,type1主备模式切换会产生极短时间内少量丢包,但连接不会彻底断开。
bond模式选型建议:哪种最稳定?
行业共识认为,对于双网卡的普通业务服务器,mode1是稳定性优先级最高的选择,它不需要交换机配合,完全靠服务器自身完成故障切换,配置起来也不容易出错。
如果你需要利用多网卡带宽,且交换机支持LACP,那么mode4是网络性能和稳定性之间最好的折中方案,数据中心里,绝大多数机架服务器在双网卡方案中采用的模式就是mode1或mode4。
对于mode0轮询模式,多数情况下不建议在生产环境使用,因为它把连续数据包打散到不同网卡发送,接收端可能要处理乱序重排,遇到TCP协议栈敏感的应用,实际吞吐反而下降。
不管用哪种模式,都建议在bind配置里加上miimon=100,让网卡每100毫秒检测一次链路状态,故障发现和切换速度会更快。
服务器bond模式常见问题解答
使用bond模式能提升单文件下载速度吗?
不能,对于单条TCP连接,bond模式不会突破单块物理网卡的速率上限,因为哈希类模式和LACP模式下,同一个数据流会被固定分配到某一张网卡上,要提升单文件下载速度,需要启用多线程或多连接下载,让不同连接分发到不同网卡,才能看到聚合带宽效果,mode0理论上可以单流利用多网卡,但乱序代价太高,实际收益有限。
bond模式和teaming有什么区别?
bond是Linux内核自带的网卡绑定机制,teaming是后来推出的用户态网络聚合方案,RHEL 7开始官方推荐使用teaming,teaming支持更细粒度的负载均衡算法,也支持热加载配置,但底层原理相似,在较新的CentOS/RHEL系统中,你依然可以用bond方式,因为在简单的主备和LACP场景中,两者稳定性差距并不大。
虚拟机上能不能配置bond?
可以,虚拟机里的虚拟网卡同样能绑定成bond,某些云主机示例中也能看到这种用法,不过虚拟化环境的物理出口带宽由宿主机统筹,虚拟网卡bond所带来的吞吐提升有限,而且会增加CPU开销,物理裸机服务器使用bond是更常见、收益更直接的选择。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/926546.html


评论列表(2条)
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是服务器部分,给了我很多新的思路。感谢分享这么好的内容!
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是服务器部分,给了我很多新的思路。感谢分享这么好的内容!