Bonding 技术概述
Bonding 是一种网络技术,用于将多个网络接口绑定在一起,以提高网络性能或冗余性。通过网络接口绑定,多个网络接口可以作为一个虚拟接口工作,从而提高带宽和提供容错能力。Bonding 在服务器上非常常见,特别是在需要高可用性和高吞吐量的环境中。
Bonding 模式
Linux 下的 Bonding 技术支持多种模式,每种模式都有其特定的用途:
mode=0 (balance-rr): 轮询模式,这种模式按照顺序循环使用每个接口发送数据包。
mode=1 (active-backup): 主备模式,只有一个接口处于活动状态,其他接口作为备份。
mode=2 (balance-xor): XOR 模式,根据数据包的 MAC 地址和 IP 地址进行分配。
mode=3 (broadcast): 广播模式,所有数据包通过所有接口发送。
mode=4 (802.3ad): 动态链接聚合,依赖于交换机的配置,提供负载均衡和容错。
mode=5 (balance-tlb): 发送负载均衡,基于流量分布发送负载。
mode=6 (balance-alb): 适应性负载均衡,包括发送和接收负载均衡。
配置步骤和示例
在 Debian 或 Ubuntu 系统上
假设我们有两个网络接口 eth0
和 eth1
,我们希望将它们绑定在一起使用 mode=1
(active-backup)模式。
安装 ifenslave
工具
首先需要确保系统安装了 ifenslave
工具,这是用于配置 bonding 的工具。
sudo apt-get install ifenslave
加载 bonding 模块
加载 bonding
内核模块:
sudo modprobe bonding
为了在每次启动时自动加载 bonding 模块,可以将其添加到 /etc/modules
文件中:
echo "bonding" | sudo tee -a etc/modules
配置网络接口文件
在 Debian 或 Ubuntu 系统上,网络接口配置文件位于 /etc/network/interfaces
。
编辑该文件以添加 bonding 配置:
sudo nano etc/network/interfaces
添加以下内容:
Bonding interfaceauto bond0iface bond0 inet staticaddress 192.168.1.100netmask 255.255.255.0gateway 192.168.1.1bond-mode 1bond-miimon 100bond-slaves eth0 eth1# Ethernet interfacesauto eth0iface eth0 inet manualbond-master bond0auto eth1iface eth1 inet manualbond-master bond0
以上配置说明:
bond0
是我们创建的虚拟 bonding 接口。address
、netmask
和gateway
是网络配置。bond-mode 1
指定 active-backup 模式。bond-miimon 100
设置链路检测间隔为 100 毫秒。bond-slaves eth0 eth1
指定绑定的物理接口。
启动和测试 bonding 接口
重新启动网络服务以应用配置:
sudo ifdown eth0 eth1 bond0sudo ifup bond0
检查 bonding 接口状态:
cat proc/net/bonding/bond0Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)Bonding Mode: fault-tolerance (active-backup)Primary Slave: NoneCurrently Active Slave: eth0MII Status: upMII Polling Interval (ms): 100Up Delay (ms): 0Down Delay (ms): 0Slave Interface: eth0MII Status: upLink Failure Count: 0Permanent HW addr: 00:1e:67:0c:22:4cSlave Interface: eth1MII Status: upLink Failure Count: 0Permanent HW addr: 00:1e:67:0c:22:4d
以上输出表明 bonding 接口 bond0
正在工作,并且 eth0
当前是活动的物理接口。
在 CentOS 7.9
步骤 1:安装必要的工具
在 CentOS 7.9 上,ifenslave
工具已经包含在系统中,无需额外安装。我们需要确保 bonding
模块已加载。
sudo modprobe bonding
为了在每次启动时自动加载 bonding
模块,可以将其添加到 /etc/modules-load.d/bonding.conf
文件中:
echo "bonding" | sudo tee etc/modules-load.d/bonding.conf
步骤 2:配置网络脚本
在 CentOS 7.9 上,网络接口配置文件位于 /etc/sysconfig/network-scripts/
目录下。我们需要为 bond0
和物理接口创建配置文件。
配置 bond0
创建或编辑 /etc/sysconfig/network-scripts/ifcfg-bond0
文件:
sudo nano /etc/sysconfig/network-scripts/ifcfg-bond0
添加以下内容:
DEVICE=bond0NAME=bond0TYPE=BondBONDING_MASTER=yesBOOTPROTO=staticIPADDR=192.168.1.100NETMASK=255.255.255.0GATEWAY=192.168.1.1DNS1=8.8.8.8DNS2=8.8.4.4ONBOOT=yesBONDING_OPTS="mode=1 miimon=100"
配置 eth0
创建或编辑 /etc/sysconfig/network-scripts/ifcfg-eth0
文件:
sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0
添加以下内容:
DEVICE=eth0NAME=eth0TYPE=EthernetBOOTPROTO=noneONBOOT=yesMASTER=bond0SLAVE=yes
配置 eth1
创建或编辑 /etc/sysconfig/network-scripts/ifcfg-eth1
文件:
sudo nano /etc/sysconfig/network-scripts/ifcfg-eth1
添加以下内容:
DEVICE=eth1NAME=eth1TYPE=EthernetBOOTPROTO=noneONBOOT=yesMASTER=bond0SLAVE=yes
步骤 3:重启网络服务
重启网络服务以应用配置:
sudo systemctl restart network
步骤 4:验证配置
检查 bond0
接口的状态:
cat /proc/net/bonding/bond0Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)Bonding Mode: fault-tolerance (active-backup)Primary Slave: NoneCurrently Active Slave: eth0MII Status: upMII Polling Interval (ms): 100Up Delay (ms): 0Down Delay (ms): 0Slave Interface: eth0MII Status: upLink Failure Count: 0Permanent HW addr: 00:1e:67:0c:22:4cSlave Interface: eth1MII Status: upLink Failure Count: 0Permanent HW addr: 00:1e:67:0c:22:4d
Bonding 技术通过将多个网络接口绑定在一起,提高了网络性能和可靠性。上述示例展示了如何在 Linux 系统上配置 bonding
接口,使用 mode=1
(active-backup)模式以实现接口的冗余和故障转移。这种配置对于需要高可用性网络连接的服务器环境非常有用。




