尧图精选

Linux网卡bond七种模式详解:原理、配置与避坑指南

🕒 发布时间:2026/10/1 16:27:15 📁 来源:尧图网络
干过几年Linux运维的人应该都绕不过网卡bond这个词。服务器网卡从千兆换到万兆业务流量上去之后单块网卡很快成为瓶颈或者说你担心它成为瓶颈于是把两块甚至四块物理网卡绑成一个逻辑口要么为了加大带宽要么为了冗余这套机制在Linux里就叫bonding也常被喊作链路聚合或网卡绑定。问题是bond不是你想的那种“把两根网线拧成一股”那么简单的操作。Linux的bond驱动一共给了你7种模式从mode 0到mode 6每种模式背后的数据转发逻辑、对交换机的要求、适用场景都完全不同。选错了轻则带宽上不去重则网络震荡、丢包、广播风暴直接搞垮业务。这篇文章我会把这7种模式全部拆开结合实际的配置命令和排障经验讲清楚它们到底是什么原理、适合什么场景、踩过哪些坑、怎么避坑。内容按“原理到实操”的顺序来建议收藏后对照着自己的环境试一遍。1. 为什么需要bond先搞清楚它到底解决什么问题1.1 单网卡的极限与业务的不满足先搞清楚一个朴素的问题为什么要把多块网卡绑在一起一台物理服务器的性能瓶颈往往不在CPU和内存而在网络吞吐。一块千兆网卡理论极限是1000Mbps刨掉协议开销实际有效吞吐大概在940Mbps左右。如果你跑的是文件存储、备份传输、视频点播这类大流量业务千兆很容易被打满。上万的网卡不是没有但成本、布线、交换机端口都得匹配一时半会儿全换不现实。另一个更致命的问题是单点故障。一块网卡、一根网线、一个交换机端口任何一个环节出问题这台机器的网络就断了。业务系统可以容忍网速慢但很难容忍断网。尤其在对可用性要求极高的数据库、支付系统、在线交易场景里网络中断几分钟就是事故。bond的出现就是为了同时解决这两个问题把多块物理网卡抽象成一个逻辑网卡对外表现为一个IP、一个MAC。在这个逻辑框架下流量可以摊到多块物理网卡上带宽叠加某块网卡、某条链路坏了流量自动切到其他正常的链路上实现冗余不中断。1.2 bond工作在哪里内核驱动还是用户态工具很多人一听到bond就以为是个配置工具其实它最核心的东西是内核里的一个驱动模块叫bonding。这个模块负责把多块物理网卡纳管成一个虚拟的bond接口所有数据包的收发都经过这个虚拟接口进行调度。用户态看到的ifcfg-bond0、/etc/modprobe.d/bonding.conf这些配置文件本质上是告诉内核“你把这个网卡和那个网卡绑成一个组用哪种模式跑”。一旦配置加载真正干活的是内核里的bonding驱动而不是某个服务进程。这也是为什么bond的切换和对故障的响应可以做到亚秒级——它不需要经过用户态转发全靠内核处理。理解这一点很重要。后面你排查bond问题的时候很大一部分精力要花在内核参数和驱动行为上而不是去看某个服务日志。比如mode 1的主备切换快不快、mode 4的协商能不能成功这些都不是配置文件决定的而是bonding驱动的实现逻辑决定的。1.3 硬件环境要求别忽略这些先决条件在动手之前有几个硬性条件必须先确认否则后面配置得再漂亮也是白搭。第一物理网卡通常建议使用同型号、同速率、同固件版本的网卡。混用Intel和Broadcom的网卡不是不行但不同驱动的处理习惯、中断行为差异很大出问题的时候很难排查。至少速率要一致一块千兆一块万兆绑在一起低速网卡会拖累整个bond的链路协商。第二交换机端口需要支持并开启相应的聚合协议。特别是对于mode 4这种标准化的LACP模式交换机必须开启链路聚合Port Channel / EtherChannel / LACP并且配置为对应的模式否则协商失败链路直接不通。mode 0、2等基于静态hash的模式虽然理论上不依赖LACP协商但很多交换机默认会学习MAC或做STP计算需要手工配置trunk或聚合口不是插上就通的。第三服务器端和交换机端的流控、巨型帧MTU设置应该保持一致。MTU不一致会导致数据包被分片或丢弃最常见的表现就是大文件传输很慢、TCP会话频繁重置而ping小包完全正常。2. 7种bond模式全景解读原理、适用场景与选型思路2.1 mode 0 round-robin轮询模式mode 0的全称是balance-rr意思是round-robin轮询发送。它的工作方式非常直白数据包按顺序轮流从每块物理网卡发出去。假设你有两块网卡eth0和eth1第一个包走eth0第二个包走eth1第三个包又走eth0以此类推。从带宽叠加的角度讲mode 0能非常充分地利用所有物理链路因为每一块网卡都在干活。发送方向上确实是负载均衡的而且它是7种模式里唯一一个在裸协议层面就可以做到“充分利用多链路”的模式。但这恰恰也是它最坑的地方接收方向不一定均衡。因为数据包到了交换机以后交换机根据目的MAC或IP把包从某个端口转发过来它可不管你发的时候是怎么轮询的。结果是发送均匀接收可能全部堆到某一块网卡上。另外如果两块网卡连接的是同一个交换机且交换机没有正确配置mode 0很容易造成乱序和重复帧。因为同一个TCP流的多个包从不同物理口发出如果其中一条路径延迟略高对端收到的数据包顺序就乱了。TCP对乱序非常敏感会反复触发重传性能反而下降。所以我的建议是mode 0适合对吞吐要求极高、且包特征比较分散比如大量UDP小包、多路并发短连接的场景尽量避免在单一长连接大流量场景下使用。还有一点mode 0要求交换机侧必须配置聚合否则小心广播风暴——mac地址在多个端口之间来回抖动交换机的MAC表会疯掉。2.2 mode 1 active-backup主备模式mode 1是主备模式也是最保守、最适合当“保险”用的一种模式。它的逻辑很简单同一时间只有一块物理网卡处于活动状态负责转发所有流量其他网卡全部待命。一旦活动网卡出现链路故障待命网卡立即顶上。这种模式不增加任何带宽它存在的唯一意义是高可用。因为同一时间只有一条链路在跑不存在数据包乱序、负载均衡这类问题也不要求交换机做任何特殊配置。你只要把两块网卡插上主备关系自己就建立了。这里有个细节值得注意mode 1在链路切换时如果使用了fail_over_mac参数会把活动网卡的MAC地址随切换一起迁移这样对端交换机和路由器感知不到MAC地址变化TCP连接不会中断。但也因此要求交换机端口在短时间内允许MAC地址漂移个别严格开启端口安全Port Security的交换机可能会误判为攻击把端口封掉。使用场景上mode 1最适合那些有“绝对不能断”的诉求、但对带宽要求不高的业务。比如管理口、数据库的日志传输、或者直接作为应急备份通道。我见过不少企业把业务网卡做成mode 4再单独留一张管理网卡跑mode 1分工明确。2.3 mode 2 balance-xor基于hash的负载均衡mode 2balance-xor是基于哈希算法的负载均衡模式。它不是简单轮询而是根据数据包的源MAC、目的MAC、IP地址、端口等信息计算一个哈希值再根据哈希值决定从哪块物理网卡发出。这样做的最大好处是同一个流比如一个TCP会话的包会被哈希到同一块网卡上从而避免了mode 0那种乱序问题。不同流则可能被分配到不同的网卡整体上实现了负载均衡。默认的哈希策略通常是基于MAC地址的xmit_hash_policylayer2也就是看源MAC和目的MAC。如果你的流量都集中在少数几台服务器之间交互MAC维度区分度不够可能出现某一块网卡忙死、其他网卡闲死的情况。这时候可以调整xmit_hash_policy为layer34把源IP、目的IP、源端口、目的端口也加入哈希计算均衡效果会好很多。mode 2不需要交换机支持LACP但同样要求交换机把对应端口配置成聚合口否则交换机可能因为MAC地址在多个端口间漂移而产生异常。它的核心价值是在不依赖LACP的情况下实现“不乱序的负载均衡”算是一个折中方案。2.4 mode 3 broadcast广播模式mode 3的全称是broadcast广播模式。它的行为就是字面意思每个数据包同时从所有物理网卡发送一份。对端交换机如果收到来自两个端口的相同数据包会做去重和丢弃处理。这个模式的安全性很高因为只要还有一条链路活着数据就能送达。但它没有任何带宽叠加的能力反而会成倍增加网络负载。两块网卡广播就是两份流量四块网卡就是四份等于把网络的可用带宽直接打对折再打折。实际生产环境中mode 3用得非常少。偶尔在一些金融场景里因为监管要求极其严格必须保证数据不丢有人会用mode 3做双发校验。但绝大多数业务不需要这种极端冗余而且交换机侧的兼容性也需要额外验证。如果你不是明确知道自己在干什么不建议选mode 3。2.5 mode 4 802.3ad最推荐的LACP聚合模式mode 4是802.3ad基于IEEE 802.3ad标准的动态链路聚合也就是大家常说的LACP模式。它和前面几种模式最大的区别在于链路是否激活、如何负载均衡不是由服务器单方面决定的而是通过LACP协议和交换机协商出来的。协商的过程可以这样理解服务器周期性发送LACPDU报文给交换机报文中带着自己的系统优先级、端口优先级、端口号等信息。交换机和服务器双方根据优先级规则决定哪些链路可以被聚合哪些端口必须挂起。协商成功后双方建立一条逻辑聚合链路数据流量按双方协商好的hash算法分布在各条物理链路上。mode 4是唯一有标准协议背书的bond模式所以它对交换机、对服务器驱动来说行为都可预期兼容性最好也最适合多厂商设备混用。如果你用的交换机支持链路聚合我一般会直接推荐mode 4。配置细节上mode 4要求选择LACP的协商角色。Linux bond里的lacp_rate参数就是控制LACP报文发送频率的设置为fast表示每1秒发送一次slow表示每30秒发送一次。交换机侧如果配置为active模式就可以主动发起协商如果配置为passive模式服务器就得靠fast频率去主动触发。两边角色不匹配协商就建立不起来这是最常见的mode 4排障点。还有xmit_hash_policy这个参数在mode 4下尤其重要。默认的layer2哈希策略在跨交换机聚合时效果很差——比如服务器连了两台堆叠交换机或者接了不同的TOR交换机MAC维度哈希完成后流量可能全部走到其中一个端口另一个端口空转。生产环境建议显式设置xmit_hash_policylayer34让五元组参与哈希均衡效果更可控。2.6 mode 5 balance-tlb发送端自适应负载均衡mode 5的全称是balance-tlb自适应传输负载均衡模式。它有一个非常显著的特点不需要交换机做任何配置就能实现发送方向的负载均衡。它的工作原理是服务器根据每块物理网卡的实时负载情况动态决定新数据流从哪块网卡发出。哪个网卡当前比较闲新流量就尽量分配给它。接收方向则比较取巧——只有活动网卡在收包其他网卡待命。这里说的“活动网卡”不是固定的bonding驱动会根据当前负载不断调整哪个网卡承担接收任务。这个模式非常适合那些交换机老旧、不支持任何聚合协议的环境。因为发送方向的均衡逻辑完全在服务器本地不依赖交换机识别。接收能力虽然只有单链路但对于“下载少、上传多”的业务模型比如Web服务器、邮件服务器、备份上传mode 5也能获得可观的吞吐提升。不过要注意mode 5的均衡粒度是流级别的它并不能像mode 4那样做精细的hash分配。如果业务上来就是几十个大文件同时上传流数量少均衡效果就很有限。2.7 mode 6 balance-alb接收端也均衡的自适应模式mode 6是balance-alb自适应负载均衡模式。它是在mode 5的基础上增加了接收方向的负载均衡能力具体实现办法是靠ARP协商。说白了就是bond接口会劫持ARP请求和应答让不同对端机器认为同一个IP对应了不同的MAC地址。比如两台客户端A和B同时访问这台服务器A拿到的ARP应答里MAC是eth0的B拿到的MAC是eth1的。这样A的流量自然会发给eth0B的流量发给eth1接收流量就这么被分摊开了。mode 6不需要交换机支持在老旧交换机环境里能实现真正的双向负载均衡这是它最大的卖点。但ARP协商这种方式在某些严格的安全设备或者开启了ARP防护的交换机上会被拦截导致通信异常。而且因为涉及到ARP层面的“骗来骗去”排障时非常抽象不太适合刚入门的人折腾。我的建议是如果你的交换机足够新、支持LACP优先考虑mode 4如果交换机不支持聚合但业务以发送为主用mode 5如果既要双向均衡又没有交换机支持再考虑mode 6。不要一上来就追求“全能”的mode 6它的隐藏代价会在你排查问题的时候慢慢体现。2.8 七种模式横向对比速查模式名称带宽叠加冗余交换机要求适用场景mode 0balance-rr是是需配置聚合多路小包并发场景mode 1active-backup否是无高可用场景mode 2balance-xor是是需配置聚合中等流量均衡mode 3broadcast否强需兼容双发极端可靠性场景mode 4802.3ad是是需LACP生产环境首选mode 5balance-tlb发送叠加是无上传为主场景mode 6balance-alb双向叠加是无老交换机双向均衡3. 手把手配置bond从ifcfg到nmcli的实操记录3.1 环境准备检查内核与网卡状态不管后续用哪种配置工具环境准备这一步都一样。先确认内核有没有加载bonding模块lsmod | grep bonding如果没有输出说明模块没加载手动加载一下modprobe bonding接着查看系统支持的bond模式确认内核已经编译好相关支持cat /sys/class/net/bonding_masters 2/dev/null如果目录都不存在说明bonding模块还没被拉起来。可以用下面的命令确保开机自动加载模块echo bonding /etc/modules-load.d/bonding.conf然后查看当前机器上有哪些物理网卡记下它们的名称和速率ip link show ethtool eth0 | grep -i speed这一步非常重要。很多人在配置bond的时候发现网卡名是eth0、eth1就在配置文件里写死。但在某些系统上网卡名可能是eno1、ens33甚至是p1p1这样的PCI位置命名写错了系统起不来。所以第一步一定是看清实际网卡名。3.2 CentOS / RHEL 7 的经典ifcfg配置法老派的Linux运维应该都很熟悉/etc/sysconfig/network-scripts/ifcfg-*这一套配置。下面的例子是把eth0和eth1绑成bond0采用mode 4。创建/etc/sysconfig/network-scripts/ifcfg-bond0DEVICEbond0 NAMEbond0 TYPEBond BONDING_MASTERyes BOOTPROTOnone ONBOOTyes IPADDR192.168.10.20 NETMASK255.255.255.0 GATEWAY192.168.10.1 BONDING_OPTSmode4 miimon100 lacp_ratefast xmit_hash_policylayer34配置从属网卡eth0修改/etc/sysconfig/network-scripts/ifcfg-eth0DEVICEeth0 NAMEeth0 TYPEEthernet BOOTPROTOnone ONBOOTyes MASTERbond0 SLAVEyeseth1的配置同理只把DEVICE和NAME换成eth1。这里重点解释一下BONDING_OPTS里的几个参数miimon100表示每100毫秒检查一次链路状态。这个值不要设太大也不能太小。太大比如1000链路断了要等1秒才感知高可用性大打折扣太小比如10导致频繁检测链路CPU开销上升个别交换机还可能出现误报。lacp_ratefast只对mode 4有效表示LACP报文1秒发一次加快协商速度。xmit_hash_policylayer34前面说过用五元组做哈希均衡效果更好。downdelay和updelay这两个参数也值得了解它们表示链路状态切换的确认延迟可以防止链路抖动导致bond反复切换。比如链路闪断200毫秒马上恢复如果down时延设置300毫秒就不会触发主备切换避免业务无谓中断。配置完后重启网络服务systemctl restart network重启后确认bond状态cat /proc/net/bonding/bond0看到输出里有“MII Status: up”和“Bonding Mode: IEEE 802.3ad Dynamic link aggregation”这样的内容就说明模式切换成功链路是通的。3.3 CentOS / RHEL 8 的nmcli配置法从CentOS 8开始NetworkManager成为网络配置的主流接口虽然也可以继续用ifcfg文件但官方推荐用nmcli。nmcli的方式更清晰不容易敲错字段。步骤一创建bond连接指定IP和模式nmcli con add type bond ifname bond0 mode 4 ipv4.method manual ipv4.addresses 192.168.10.20/24 ipv4.gateway 192.168.10.1步骤二把eth0和eth1加进bondnmcli con add type ethernet ifname eth0 master bond0 nmcli con add type ethernet ifname eth1 master bond0步骤三设置bond的细化参数nmcli con mod bond-bond0 bond.options miimon100,lacp_ratefast,xmit_hash_policylayer34这里连接名可能会出现自动生成的“bond-bond0”这样的名称不确定的时候用nmcli con show查看一下。步骤四激活连接nmcli con up bond-bond0用nmcli还有一个好处所有配置被NetworkManager统一纳管不会出现ifcfg文件和NetworkManager各管一套导致冲突的情况。CentOS 7时代常出现的“明明配了bond但是重启网卡配置就没了”的问题在nmcli体系下基本不会再出现。3.4 Ubuntu / Debian 的netplan配置法Ubuntu近几年的版本都用netplan管理网络。它的配置逻辑是写一份YAML然后让netplan把配置渲染成后端的实际网络配置。编辑/etc/netplan/01-netcfg.yamlnetwork: version: 2 ethernets: eth0: dhcp4: no eth1: dhcp4: no bonds: bond0: interfaces: [eth0, eth1] addresses: [192.168.10.20/24] gateway4: 192.168.10.1 parameters: mode: 802.3ad mii-monitor-interval: 100 lacp-rate: fast transmit-hash-policy: layer34然后应用配置netplan apply注意netplan的mode字段用的是802.3ad不是4。这个差异很容易让人迷糊实际含义和mode 4是一样的。如果netplan apply执行后网络直接断了多半是YAML格式问题或者交换机没配好。可以等几秒如果恢复不了就得重启网络服务或者手动恢复原配置。所以操作前最好先备份配置文件并且确认能通过带外管理IPMI/控制台登录机器。3.5 配置验证怎么看bond是否真的生效配置完成后不能只看IP能ping通就认为大功告成。必须验证两件核心事实聚合是否协商成功、故障切换是否真的管用。先看聚合状态cat /proc/net/bonding/bond0关注几个输出字段Bonding Mode显示当前模式mode 4会显示为802.3ad。MII Status链路状态up表示正常。Slave Interface列出每个从属网卡以及它的MII Status。Aggregator ID这是mode 4特有的如果每个从属网卡分配到的聚合ID不一致说明协商有问题。再看网卡成员是否都成功加入聚合ip link show master bond0更直观的做法是用ethtool看LACP的协商状态ethtool bond0如果你和交换机的LACP协商成功bond0的速度会显示为多块网卡速率之和比如两块万兆网卡会显示为20000Mb/s。故障切换的测试方法很简单手动把其中一块物理网卡down掉观察业务是否中断、流量是否自动切到另一块ip link set eth0 down tail -f /var/log/messages在日志里你会看到bond接管链路切换的记录同时ping包几乎不丢。这是验证高可用是否达标的唯一标准。注意测试完要把eth0重新up回来并观察它是否重新加入聚合组。4. 生产环境里的坑常见问题与排查技巧4.1 交换机不聚合链路全通但流量异常最常见的一个坑服务器端bond配好了IP也能ping通但是流量一大就丢包、时延剧增。查交换机发现根本没有配置聚合口服务器把两块网卡分别接在不同的端口上。这种情况下交换机把服务器看成了两台不同的设备。MAC地址一会儿出现在端口1一会儿出现在端口2交换机MAC表不断刷新甚至产生广播风暴。尤其mode 0每包轮询最容易触发这种问题。排查方法登录交换机查看端口MAC表变化频率看到同一个MAC在多个端口之间反复跳变基本可以断定聚合没生效。解决方式是去交换机上把对应端口配置为聚合端口或者干脆在服务器端换成mode 1主备模式在交换机侧不用做任何聚合配置。4.2 mode 4协商失败联调半天发现是优先级问题mode 4最大的特点是协商。协商不成功链路直接就是down的。常见原因有三个第一交换机端口模式没配对。LACP有active和passive两种角色Linux bond通过lacp_rate参数只能调节报文频率不能直接设置角色。实际上Linux bonding驱动默认会主动发送LACPDU相当于active角色。如果交换机配置成了passive两边还能协商如果交换机设成no或off那就完全没戏。第二系统优先级和端口优先级配置问题。LACP协议在协商时如果两边能聚合的链路数超过最大支持数会通过优先级决定谁被挂起。Linux里的优先级可以通过sysfs调整但一般都保持默认。如果交换机上手动调整过优先级而你没有可能你的某块网卡永远不被选中。第三xmit_hash_policy设置不当。用layer2做哈希在跨交换机堆叠场景下流量根本分布不均。表现为bond0速度显示是20000Mb/s但实际吞吐只有10000Mb/s左右因为负载全压到其中一块网卡上了。这种问题从日志和状态上看不出异常只能通过流量监控发现。解决方法是显式改为layer34。4.3 主备切换之后业务还是断了mode 1的主备切换一般很快但有时候切换后在很短的时间内业务会丢包或断开。排查方向有两个一是ARP缓存问题二是STP收敛。切换后如果新活动网卡的MAC变了而对端交换机或客户端ARP缓存的还是旧MAC流量就会一直发往旧端口直到ARP缓存超时刷新。解决方法是设置fail_over_mac1让bond接口在所有情况下都使用同一个MAC切换时MAC不变化对端感知不到链路切换。STP收敛的问题通常出现在接入交换机上。链路切换导致交换机端口状态变化STP需要重新计算端口会经过listening和learning状态通常需要30到50秒。这段时间内交换机不转发数据TCP自然就断了。这种情况可以在交换机接入端口开启portfast或edge port让端口跳过STP计算过程瞬间进入转发状态。4.4 重启后bond配置丢失CentOS 7时代经常有人遇到这个坑配置完bond一切正常重启服务器后网络起不来bond0消失了。根本原因一般是模块加载顺序或者配置文件归属混乱。bonding模块没有在系统启动时加载导致网络服务启动时bond0网卡根本不存在从属网卡也找不到master。排查方法先确认/etc/modules-load.d/bonding.conf里已经写了bonding并且重启后确实加载成功lsmod | grep bonding再确认ifcfg文件没有被NetworkManager接管后出现冲突。CentOS 7上如果NetworkManager和network服务混用NetworkManager可能会在启动时把eth0自动读成普通网卡而不认为它是bond的slave。彻底的解决方案是禁用NetworkManager只保留network服务systemctl disable NetworkManager systemctl enable network或者反过来在网络服务里禁用只用NetworkManager。两个网络管理框架并存是很多诡异问题的根源。4.5 负载不均看hash策略更要看业务流量模型经常有人问我mode 4配好了速率也是双倍但为什么实际传输速度一直上不去我一般让他先看看是不是单流传输。不管是mode 0还是mode 2、4多链路负载均衡的最小粒度是“流”。一个单独的TCP连接无论哈希策略怎么选最终只会落在一块物理网卡上。也就是说你从服务器下载一个大文件这条单一连接再怎么跑也只能跑到一块网卡的速度上限。想要充分利用多链路带宽必须同时发起多条连接。比如用多线程下载、多个客户端并发访问、或者开启多条TCP会话。这是在规划带宽前必须想清楚的业务模型问题不是调几个参数能解决的。如果你确实需要让单条TCP流突破单网卡带宽那就只能放弃bond考虑把网卡升级到更高带宽10G/25G/40G或者在应用层做链接拆分。这是物理层和协议层的限制不是配置能绕过的。5. mode 4之外的备选方案团队协作和工具链的衔接5.1 从bond到team另一个内核级聚合方案很多人不知道Linux其实还有一套和bond类似的机制叫team。它由用户态的teamd守护进程管理逻辑和bond差不多但更灵活支持更细粒度的链路监测和负载均衡算法。team和bond最大的区别在于管理方式bond是纯内核驱动的傻瓜式聚合配置简单直接适合大多数场景team把控制逻辑搬到用户态支持用JSON格式配置文件描述链路可以做类似LACP的fallback等高级策略。但代价是依赖teamd服务系统维护要多个组件。个人看法是除非你有明确需求比如要在bond链路监控上做额外脚本逻辑否则直接用bond就够了。bond更底层、更稳定踩坑也更容易搜到解决方案。team更像是一个过渡方案在CentOS/RHEL 8以后官方也越来越少主动提到它。5.2 自动化配置bondansible与配置管理当你手下管着几十台服务器手工逐台配bond就不现实了。这时候可以把bond配置写进Ansible、SaltStack或者Puppet的配置清单里批量下发。以Ansible为例最小的一个bond配置任务大概是这样的- name: Configure bond0 ansible.builtin.nmcli: type: bond conn_name: bond0 ifname: bond0 mode: 4 ip4: 192.168.10.20/24 gw4: 192.168.10.1 state: present再配合对从属网卡的配置一套几台主机的bond初始化几分钟就能跑完。而且用配置管理工具还有一个好处环境之间的差异可以通过模板化参数控制比如测试环境用mode 1、生产环境用mode 4只要传不同的变量就行。5.3 监控bond状态的三种姿势bond配好了不代表永远不用管。物理链路老化、交换机端口异常、NIC驱动bug都可能导致bond降级而不自知。这时候需要主动监控。最基础的方法是定时查看/proc/net/bonding/bond0并检查所有从属网卡的MII Status是否都是up。写个简单的脚本丢到crontab里发现问题就告警。更精细的做法是结合SNMP或监控系统比如Zabbix、Prometheus采集每块物理网卡的流量和错误包计数。bond的聚合口虽然有总流量但从属网卡的单卡错误包、丢包率、CRC错误反而是更早期的问题信号。还有一招在网络设备侧监控LACP邻居状态。如果bond里的一块网卡因为某种原因被交换机挂起交换机侧的show lacp neighbor能看到端口状态异常。结合服务器和交换机两侧的视图排查效率会高很多。6. 写在最后的一些经验做Linux网络越久越觉得bond这东西是一门“看起来简单用起来全是学问”的技术。很多人第一次配bond都会问“我该选哪种模式”我给的答案始终是默认选mode 4前提是交换机支持LACP交换机不支持就根据业务流量特征在mode 1和mode 6之间做取舍。如果在mode 1和mode 6之间拿不准还有个更简单的思路如果你根本不在乎带宽只想保证业务不中断mode 1就够了如果你确实有负载均衡的诉求那就别犹豫直接去把交换机聚合打开上mode 4。mode 5和mode 6那些自适应黑魔法就当它们不存在除非你迫不得已且做好了排障的准备。每次配置完成后我还习惯把bond信息在运维文档里记一笔包括模式、hash策略、交换机端口配置、LACP角色、测试时的切换日志。这样出了问题追溯到根因的时间会短很多。技术的坑大多是被提前记录过就不那么可怕的。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →