bonding怎样聚合多个网卡

联启 网络工具 13

本文目录导读:

bonding怎样聚合多个网卡-第1张图片-电脑手机工具软件下载 - 免费实用工具合集 | 联启科技

  1. 核心概念:Bonding 模式(Mode)
  2. 详细配置步骤(以 CentOS/RHEL 7/8/9 及类似系统为例)
  3. 现代方法(使用 NetworkManager / nmcli)
  4. 需要注意的陷阱与检查点

Bonding(也被称作NIC Teaming、链路聚合或Port Trunking)是一种将多个物理网卡(Network Interface Cards)绑定成一个逻辑网卡的技术,其核心目的是提供冗余(高可用性)和/或增加带宽(负载均衡)

在 Linux 系统中,实现 bonding 的常用方法有两种:传统的 Bonding 驱动较新的 Team 驱动(虽然很多现代发行版开始转向 NetworkManager 或 systemd-networkd 直接支持),以下将详细介绍最经典且通用的传统 Bonding 配置方法。

核心概念:Bonding 模式(Mode)

在开始配置前,你需要选择一个模式,这是关键,最常用的几种模式:

  • mode=0 (balance-rr):轮询,数据包依次从每个网卡发出,提供负载均衡和容错。
  • mode=1 (active-backup):主备模式,只有一个网卡活跃,另一个作为备份。主要用于高可用性(容错),不能增加带宽。
  • mode=2 (balance-xor):基于 XOR 哈希算法(源MAC+目的MAC)选择网卡,提供负载均衡和容错。
  • mode=3 (broadcast):广播,所有数据包在所有网卡上发送,提供容错,很浪费带宽。
  • mode=4 (802.3ad)动态链路聚合,需要交换机支持 802.3ad(LACP)协议,这是最常见的增加带宽的模式。
  • mode=5 (balance-tlb):自适应传输负载均衡,数据发送根据当前网卡负载自动分配,接收流量由单卡处理。
  • mode=6 (balance-alb):自适应负载均衡,包含 mode5 的功能,并对接收流量也进行负载均衡,这是最“智能”但消耗CPU的模式。

核心选择建议

  • 只想要容错(万一网线断了,服务不中断):选择 mode=1 (active-backup)
  • 既要容错又要增加带宽(配合交换机):选择 mode=4 (802.3ad)
  • 小网络/无交换机支持/测试环境:选择 mode=6 (balance-alb)

详细配置步骤(以 CentOS/RHEL 7/8/9 及类似系统为例)

假设你有两块物理网卡:eth0eth1,你想把它们绑成逻辑网卡 bond0

步骤 1:加载 Bonding 内核模块

确保系统支持 bonding 模块。

# 手动加载
modprobe bonding
# 设置为开机自动加载
echo "bonding" >> /etc/modules-load.d/bonding.conf

步骤 2:创建 Bonding 接口配置文件

路径:/etc/sysconfig/network-scripts/ifcfg-bond0

TYPE=Bond
DEVICE=bond0
NAME=bond0
BOOTPROTO=static   # 使用静态IP,也可以 dhcp
ONBOOT=yes
BONDING_MASTER=yes
# 绑定模式:1(主备),4(802.3ad),6(ALB)
BONDING_OPTS="mode=1 miimon=100"
# 或者对于 mode=4,可能需要添加:"mode=4 miimon=100 lacp_rate=fast"
# miimon=100 意思是每100毫秒检查一次链路状态
IPADDR=192.168.1.100  # 你的IP
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8

步骤 3:配置从属网卡(Slave)

你需要修改创建 eth0eth1 的配置文件,让它们成为 bond0 的成员。

ifcfg-eth0:

TYPE=Ethernet
BOOTPROTO=none    # 重要:不能设置静态IP或dhcp,让bond主接口接管
DEVICE=eth0
ONBOOT=yes
MASTER=bond0      # 指定主接口
SLAVE=yes         # 声明为从属接口
USERCTL=no

ifcfg-eth1:ifcfg-eth0 完全相同,除了 DEVICE=eth1

TYPE=Ethernet
BOOTPROTO=none
DEVICE=eth1
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no

步骤 4:重启网络服务并验证

# CentOS 7/8/9
systemctl restart network
# 或者对于使用 NetworkManager 的系统(较多现代发行版):
nmcli connection reload
systemctl restart NetworkManager
# 验证状态
cat /proc/net/bonding/bond0
# 你应该能看到 Bonding Mode: fault-tolerance (active-backup)
# 以及 Slave Interface: eth0, eth1 的状态。
# 目前应该是 eth0 是 active,eth1 是 backup(取决于MAC地址顺序)。
# 测试:拔掉 eth0 的网线,再次查看
cat /proc/net/bonding/bond0
# eth0 应该变为 down,eth1 变为 active。
# ping 你的网关,应该不会中断(或中断很短时间)。

现代方法(使用 NetworkManager / nmcli)

如果你是较新的系统(如 RHEL 8/9, Fedora, Ubuntu 20.04+),建议使用 nmcli

创建 Bond 接口:

nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=1,miimon=100"

添加从属接口(Slaves):

nmcli connection add type ethernet slave-type bond con-name bond0-eth1 ifname eth1 master bond0
nmcli connection add type ethernet slave-type bond con-name bond0-eth2 ifname eth2 master bond0

配置 IP 地址:

nmcli connection modify bond0 ipv4.addresses 192.168.1.100/24
nmcli connection modify bond0 ipv4.gateway 192.168.1.1
nmcli connection modify bond0 ipv4.dns 8.8.8.8
nmcli connection modify bond0 ipv4.method manual

激活:

nmcli connection up bond0

需要注意的陷阱与检查点

  1. 物理连接与交换机
    • 如果你使用 mode=4 (802.3ad),交换机端口必须配置为 LACP (Link Aggregation Group, LAG)Port Channel,否则连接可能会不稳定或导致广播风暴。
    • 如果你使用 mode=1(主备),交换机不需要做任何特殊配置(普通的 access/trunk 端口即可)。
  2. 链路检测 (miimon)miimon=100 是必选参数,它决定了 bonding 驱动检测链路故障的频率(毫秒),不设置的话,交换机或网线断了,系统可能需要很长时间才能切换。
  3. MAC 地址冲突:在 mode=1 下,活动的网卡会使用 bond0 的 MAC 地址(通常是第一个被绑定的网卡),当切换时,它会“借用”这个 MAC,这通常没问题,但某些交换机或网络策略(如端口安全)可能会禁止 MAC 地址飘移,如果遇到连接问题,可以尝试在交换机端口上关闭 port-security 或允许 MAC 地址变动。
  4. 防火墙/网络管理器权限:确保没有其他服务(如 irqbalance 或特殊的网络策略)干扰 bond 接口的工作。
  5. 测试与回滚在生产服务器上操作时,一定要先备份原有网络配置文件。 建议先在测试环境演练。
你的需求 推荐模式 交换机要求 备注
高可用性(一根网线断了) mode=1 (active-backup) 无特殊要求 最简单,最可靠
增加总带宽 + 高可用性 mode=4 (802.3ad) 必须支持 LACP 最常用,需两端协商
增加总带宽(无交换机支持) mode=6 (balance-alb) 无特殊要求 消耗更多CPU资源

只要按照上述步骤(特别是选择正确的模式和配置文件格式),在 Linux 上 bond 多个网卡是一个比较成熟可靠的过程。

标签: link aggregation

抱歉,评论功能暂时关闭!