如果你有两个或更多的网络接口卡(NICs),并且你想知道是否可以将它们一起使用以提高速度或使你的网络连接更可靠,那么你来对地方了。
本指南解释了以太网通道绑定(也称为网络接口卡聚合或接口绑定)—— 如何设置、如何工作,以及它如何帮助您平衡流量或防止网络停机。
以太网通道绑定是什么?
简单来说,以太网通道绑定允许你将多个物理网卡合并成一个单一的虚拟网卡(bond0
),这是一个处理网络流量并在背后与物理接口(如eth1
和eth2
)通信的虚拟接口。
你从中得到的是:
- 冗余:如果一个网络接口卡失效(被拔掉或故障),您的服务器仍可以使用另一个网络接口卡继续运行。
- 负载均衡:流量在两个网络接口卡之间共享,这在某些情况下可以提高性能。
- 单个IP: 即使您有两个网卡,您只需要一个IP地址用于绑定接口。
这种设置通常用于服务器、生产系统或网络设备,哪里正常运行时间和性能至关重要。
结合模式概述
在Linux中大约有6种绑定模式,但现在我们只会看最常见和实用的两种:
模式0 - 负载均衡(轮询)
- 通过所有可用接口(
eth1
、eth2
等)按顺序发送数据包。 - 为您提供冗余和性能提升。
- 适合平衡的外发流量。
- 注意: 你的交换机必须支持此功能(如 LACP 或静态链路聚合)。
模式 1 - 主动备份
- 一次只激活一个网络接口卡。
- 如果活动的网络接口卡失败,另一个将接管。
- 为您提供高可用性(冗余),而不是速度。
- 无需特别的开关配置。
先决条件
在我们开始之前,请确保:
- 您正在使用基于红帽的系统(如RHEL、Alma Linux、Rocky Linux)。
- 您具有根访问权限或sudo特权。
- 您有两个网络接口卡:
eth1
和eth2
. - 您的系统正在使用 network-scripts 或 NetworkManager。
(如果您使用的是Ubuntu/Debian - 绑定是通过Netplan完成的。
步骤 1:加载绑定内核模块
在Linux可以合并两个或多个网络卡(NIC)之前,它需要加载一个名为绑定内核模块的特殊软件。
默认情况下,大多数Linux系统都可以使用此绑定模块,但除非您告诉它加载,否则不会自动加载。
sudo modprobe bonding
为了确保每次系统启动时都能使用绑定功能,您需要将其注册为自动加载。
echo "bonding" | sudo tee /etc/modules-load.d/bonding.conf
要检查模块是否成功加载,请使用:
lsmod | grep bonding
步骤2:配置eth1和eth2进行绑定
在这一步中,我们正在准备每个物理网络接口(eth1
和 eth2
)以加入聚合组。可以把 bond0
想象成一个团队领导者,而这两个接口是它的团队成员(从属设备)。它们将不再独立工作 - 它们将只通过 bond0
进行通信。
我们通过为每个接口创建或编辑配置文件来实现这一点。
- /etc/sysconfig/network-scripts/ifcfg-eth1
- /etc/sysconfig/network-scripts/ifcfg-eth2
现在打开并编辑 ifcfg-eth1
文件,使用以下配置。
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
对 ifcfg-eth2
做同样的操作。
DEVICE=eth2
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
没有这个配置,内核将不知道 eth1
和 eth2
应该一起工作。此外, 不要给 eth1
或 eth2
分配IP地址。只有 bond0
应该有IP。否则,操作系统在尝试路由流量时会感到困惑。
步骤3:创建Bond接口(bond0)
好的,到目前为止,你已经告诉Linux eth1
和 eth2
应该作为从属设备,但从属设备需要一个主设备,对吧?那个主设备就是我们在这里创建的:一个名为 bond0
的绑定接口。
对于负载均衡(mode 0
) - 创建一个配置文件ifcfg-bond0
。
vi /etc/sysconfig/network-scripts/ifcfg-bond0
添加以下配置。
DEVICE=bond0
TYPE=Bond
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
BONDING_OPTS="mode=0 miimon=100"
对于 Active-Backup (模式 1
) - 只需更改绑定选项:
BONDING_OPTS="mode=1 miimon=100"
根据您的系统:
sudo systemctl restart NetworkManager
或者,如果您使用的是旧版网络服务:
sudo systemctl restart network
步骤4:验证连接状态
一旦您配置了绑定设置并重新启动了网络服务,您需要验证绑定是否正常工作。
watch -n 1 cat /proc/net/bonding/bond0
模式0(轮询)的示例输出:
Bonding Mode: load balancing (round-robin)
Slave Interface: eth1
Slave Interface: eth2
MII Status: up
模式1(主动备份)的示例输出:
Bonding Mode: fault-tolerance (active-backup)
Currently Active Slave: eth1
Slave Interface: eth2
这显示了哪一个网络接口卡是活动的,以及两个链接是否都已连接.
可选:测试故障转移(主动-备份模式)
想测试当一个网卡故障时会发生什么吗?
sudo ifconfig eth1 down
eth2 should automatically become active
watch -n 1 cat /proc/net/bonding/bond0
把它拿回来:
sudo ifconfig eth1 up
您将看到Linux无缝地自动切换接口——这就是绑定的美妙之处!
故障排除提示
- 如果
bond0
没有出现,请仔细检查您的配置文件,确保所有接口都已启动。 - 确保加载了绑定模块(
lsmod | grep bonding
)。 - 对于
模式 0
,某些交换机需要在其端进行链路聚合设置。 - 在较新系统上使用
ip addr
代替 ifconfig.
如何移除以太网通道绑定
有时您可能希望取消绑定,单独使用您的网络接口卡(NIC),这可能是出于测试、故障排除或由于重新配置服务器的原因。
sudo systemctl stop NetworkManager
sudo ip link set bond0 down
sudo modprobe -r bonding
现在,去删除设置绑定的配置文件:
sudo rm /etc/sysconfig/network-scripts/ifcfg-bond0
此外,编辑 eth1
和 eth2
的配置文件,以删除 MASTER
和 SLAVE
行,并将它们恢复为独立接口。
以下是独立的 ifcfg-eth1
文件应有的样子:
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=dhcp
或者使用静态IP:
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.101
NETMASK=255.255.255.0
对eth2
做同样的事情。
一切清理干净后,重启网络管理器以重新启动接口。
sudo systemctl start NetworkManager
您可以确认:
ip addr
您现在应该可以看到 eth1
和 eth2
正常工作,而 bond0
应该已经消失。
结论
以太网通道绑定是一个有用且简单的工具,可以提高您Linux系统的网络性能和可靠性。无论您是需要在多个网络接口之间平衡流量,还是确保在网卡故障时的冗余,绑定都可以让您充分利用硬件的性能。
通过遵循本指南中的步骤,您现在应该能够轻松地使用两个网卡配置绑定,并根据您的需要选择负载均衡或主动-备份模式。