跳转到内容

链路聚合(Bond) ​

做完这一篇,两块网卡合成一个 bond0:一条网线或一个交换机端口出问题时 NAS 仍然在线,或者多台客户端同时访问时流量被分到两条链路上。先说结论:单个客户端的单个文件传输不会因此变快。

先想清楚要它做什么 ​

目的能不能做到
冗余:一条链路坏了不断网能。active-backup 模式不需要交换机配合,最容易成功
总带宽:多台客户端同时访问能。推荐 LACP(802.3ad),需要支持它的交换机
单个客户端传大文件更快基本不能

Linux 内核的 bonding 文档写明:除 balance-rr 以外的负载均衡模式,「没有单个连接能用到超过一块网卡的带宽」。OMV 官方文档也提醒:LACP 下单个客户端拿不到 2 Gbit,还要受磁盘速度限制。想让单个客户端更快,直接换 2.5G 或 10G 的网卡和交换机更靠谱,见网卡与交换机。SMB 本身的传输优化见 SMB 传输性能调优。

建 Bond 会改动正在使用的网卡

  • 影响范围:成员网卡原来的以太网配置要先删除,才能加入 Bond;应用后 NAS 的 IP 由 bond0 提供。应用瞬间 Web、SSH、SMB 连接会断开;配错了就失联。
  • 前置条件:有本机控制台;至少两块物理以太网口(Wi-Fi 不能做成员);用 LACP 时,交换机端口已配成聚合组;记下现有的地址、网关和 DNS;用 active-backup 以外的模式前,先确认交换机是否需要配合。
  • 回退:点 应用 之前,用黄色提示条上的 撤销;已经应用并失联,用本机控制台的 omv-firstaid 重置网卡,见改坏网络后怎么救。

模式怎么选 ​

界面里的模式用英文名显示,编号 0 到 6。交换机要求来自 Linux 内核文档:

编号模式交换机要求说明
1active-backup(默认)不需要同一时刻只有一块网卡工作,它失效时切到另一块。需要指定 主要(Primary)。新手首选
4802.3ad(LACP)端口必须配成 802.3ad 聚合多客户端并发时分流。成员网卡速率、双工要一致
5balance-tlb不需要发送方向按负载分配,接收只走一块。需要驱动能读出网卡速率
6balance-alb不需要在 tlb 的基础上,对 IPv4 做接收均衡。需要网卡能在运行时改 MAC
0balance-rr需要把端口聚合(etherchannel 或 trunk)轮流发包。是唯一可能让单个连接超过一块网卡速度的模式,但包容易乱序
2balance-xor需要把端口聚合按传输哈希策略选网卡
3broadcast通常需要把端口聚合每个包都从所有网卡发出,只为容错,很少用

没有支持 LACP 的交换机,就选 1;有,并且确实有多台客户端并发访问,再考虑 4。其他模式不建议新手用。

表单字段 ​

网络 → 接口 → 创建 → 汇聚(Network → Interfaces → Create → Bond):

字段默认值说明
设备自动命名创建时不显示,系统自动取 bond0、bond1……;编辑时显示且只读
隶属(Slaves)空成员网卡,只能选以太网口,至少一块(官方界面提示「至少需要一个网卡」)。下拉框里没有的网卡,是因为它还有以太网配置,或已被别的 Bond、桥接、VLAN 占用
模式(Mode)active-backup见上表
传输哈希策略(Transmit Hash Policy)layer2只在模式 2、4、5 可选:layer2、layer2+3、layer3+4、encap2+3、encap3+4
主要(Primary)自动填入第一块成员只在模式 1、5、6 可选且必填,必须是成员之一
MII 监测频率100毫秒,检查链路是否存活的间隔
停用延迟(Down delay)200毫秒,发现故障后等多久才停用该成员
延时(Up delay)200毫秒,链路恢复后等多久才启用。官方中文译名只有「延时」
IPv4、IPv6、高级设置同以太网口见网络接口。Bond 没有 MAC 地址和 WOL 字段

OMV 把这些参数写进 /etc/netplan/40-openmediavault-bond0.yaml(文件名里的 bond0 随设备名变化)。主要网卡恢复后会重新成为活动网卡,这个行为由环境变量 OMV_SYSTEMD_NETWORKD_BOND_PRIMARYRESELECTPOLICY 控制,默认 always。界面没有 LACP 速率、最小链路数等选项,需要时见自定义网络配置。

把现有网卡并入 Bond ​

下面是官方文档的分步做法,每一步结束时都保留一条能访问 Web 界面的路。以双网卡为例,网卡一是正在用的,网卡二是空闲的:

  1. 如果网卡一还是安装时的 DHCP 配置,先在 网络 → 接口 里把它改成静态。地址填它当前分到的那个,通常不需要重新登录。保存,再点 应用。
  2. 创建 → 汇聚:隶属只选网卡二,选好模式;地址填一个同网段、没被占用的新地址,填子网掩码;网关和 DNS 服务器先留空(两块网卡同时带网关,会出现两条默认路由)。保存,再点 应用。
  3. 注销,用 Bond 的新地址重新登录。
  4. 选中网卡一那一行,点 删除(确认框里点 是),再点黄色提示条上的 应用。
  5. 编辑 Bond,隶属里现在可以选网卡一了,把它加进去。保存,再点 应用。
  6. 再编辑 Bond,把地址改成最终想用的地址,补上网关和 DNS 服务器,保存,再点 应用。仪表盘上应该出现 Bond 接口和它的速率。

第 6 步是本文补充的:官方文档只写到仪表盘出现 Bond,但 Bond 在第 2 步没有网关和 DNS,网卡一的配置在第 4 步又被删掉了,最终总得有人补上。

想一步到位,可以在同一批待应用的变更里先删掉成员网卡原来的以太网配置(先别点 应用),再创建 Bond,把两块网卡都选为成员并填原来的地址,最后只应用一次。omv-extras wiki 对桥接就是这样做的;成员网卡的候选列表是按配置数据库计算的,删除操作一做完,这块网卡就会出现在候选里(源码如此)。这种做法只有一次切换,但全有或全无,配错了只能靠控制台。Bond 这样操作没有在 OMV 8 上验证过。

交换机端要做什么 ​

  • active-backup、balance-tlb、balance-alb:交换机不需要特殊配置,插两根线就行。
  • 802.3ad:在交换机上把这两个口配成一个 LACP 聚合组,OMV 里选 802.3ad。两端要配套,只配一端通常不通,或者只有一条链路在工作。
  • balance-rr、balance-xor、broadcast:交换机上要把端口聚合(不同厂商叫 etherchannel、trunk 等)。

具体菜单因交换机型号而异,以厂商文档为准。

检查结果 ​

  1. 网络 → 接口 里出现 bond0,方式和地址正确。选中它点 显示详情,状态正常。

  2. 仪表盘的网络接口小部件里能看到 Bond 的速率。

  3. 在 OMV 的 shell 里查看内核的 Bond 状态:

    sh
    # 在 OMV 的 shell 里执行(root),只读
    ip -br addr                  # bond0 有地址,成员网卡没有地址
    cat /proc/net/bonding/bond0  # 看模式、成员状态、链路状态

    输出里应能看到你选的模式(例如 fault-tolerance (active-backup))和每个成员的 MII Status: up。用 802.3ad 时还有一段 802.3ad 信息,其中 Partner Mac Address 在对端协商成功后会显示成交换机的 MAC;一直是全 0,多半说明交换机那边没有响应 LACP。

  4. active-backup 的故障切换测试:在客户端上持续 ping <NAS 的 IP>,然后拔掉当前工作网卡的网线,通常只会丢几个包。再次 cat /proc/net/bonding/bond0,活动成员应该换了。测完把线插回去。

  5. 想验证总带宽,要用多个客户端同时传输,工具见性能测试。

常见问题 ​

Bond 之后速度没有变成两倍。 这是预期行为。单个连接只会走一条链路;要用多台客户端并发,或者在 balance-rr 下接受乱序的代价。速度还受磁盘限制。

创建时下拉框里没有想要的网卡。 它还有自己的以太网配置,或已被别的 Bond、桥接、VLAN 占用。到 网络 → 接口 删除它原来的以太网配置,再回来选。

保存时提示主要网卡不对。 模式 1、5、6 必须指定 主要,而且必须是 隶属 里的成员之一。

802.3ad 一直不通。 先确认交换机端口已经配成 LACP 聚合组、两个口速率一致,再看 cat /proc/net/bonding/bond0。排除不了时,先改回 active-backup 保证能访问。

拆掉 Bond 之后 NAS 没有 IP 了。 成员网卡在加入 Bond 时已经没有自己的以太网配置,只删 Bond 它们就没有地址。正确的做法是:删除 Bond(先别应用),再给其中一块网卡新建以太网配置,最后一起应用,失败可以用 撤销。这个流程按配置数据库的行为推出,没有在 OMV 8 上实测。

想把 Bond 给虚拟机用。 把 Bond 作为桥接的成员,见网桥:给虚拟机和容器用。

参考资料 ​

OpenMediaVault 非官方中文使用指南,与 openmediavault 项目及其开发者无隶属关系。