网卡 Bond 是一种网络技术,也被称为链路聚合、端口绑定或接口绑定,能将多个物理网络接口组合成一个逻辑接口。
bond模式 | 增加网络带宽 | 提高网络可靠性 | 实现负载均衡 | 适用场景 | 备注 |
---|---|---|---|---|---|
Mode 0 : Balance-RR(轮询模式) | 原理:依次将数据包按顺序分配到各个成员接口发送。例如有三个成员接口,第一个数据包从接口 1 发送,第二个从接口 2 发送,第三个从接口 3 发送,之后循环。
|
原理:按顺序依次在成员接口上发送数据包,均匀分配流量。
|
适用于需要高带宽且对数据包顺序要求不高的环境,例如数据中心内部服务器之间的高速数据传输。 | 需要交换机设置 | |
Mode 1 : Active-Backup(主备模式) | 原理:设置一个主接口和多个备用接口,正常情况下只有主接口工作,当主接口出现故障时,自动切换到备用接口中的一个继续工作。
|
适用于对网络可靠性要求较高,但对带宽需求相对稳定的场景,像关键业务服务器的网络连接。 | |||
Mode 2 : Balance-XOR(基于异或的负载均衡) | 原理:根据数据包的源 MAC 地址、目标 MAC 地址或 IP 地址等信息通过异或算法计算,根据结果选择成员接口发送。
|
原理:依据数据包的相关地址信息计算结果选择接口发送,一定程度上分散流量。
|
适用于对数据包顺序有要求且需要一定负载均衡的场景,如视频流传输。 | 需要交换机设置 | |
Mode 3 : Broadcast(广播模式) | 这种模式使用较少,主要用于一些特殊的测试环境或对网络可靠性要求极高但对带宽利用效率不敏感的场景。 | 需要交换机设置 | |||
Mode 4 : 802.3ad(动态链路聚合) | 原理:需交换机支持 802.3ad 协议,通过链路聚合控制协议(LACP)与交换机协商,动态将流量分配到成员接口。
|
原理:通过 LACP 协议与交换机协商,当某个成员接口出现故障时,协议能自动检测到并将流量重新分配到其他正常的接口上。
|
原理:通过 LACP 协议与交换机动态协商,根据接口状态和带宽使用情况分配流量。
|
适用于需要高带宽和高可靠性的企业网络环境,如数据中心的核心交换机与服务器之间的连接。 | 需要交换机设置 |
Mode 5 : Balance-TLB(传输负载均衡) | 原理:无需交换机特殊支持,根据成员接口当前负载动态分配发送流量,接收流量由单个接口完成。
|
原理:根据成员接口当前负载动态分配发送流量。
|
适用于发送流量较大,但接收流量相对稳定的场景,如文件服务器。 | ||
Mode 6 : Balance-ALB(自适应负载均衡) | 原理:是 balance - tlb 的增强版,不仅能动态分配发送流量,还能通过 ARP 协商动态分配接收流量。
|
原理:在流量分配过程中,当某个成员接口故障时,能自动将流量转移到其他正常接口。
|
原理:在发送和接收方向都能根据接口情况和 ARP 协商动态分配流量。
|
适用于对网络带宽和性能要求极高的场景,如云计算数据中心。 |
常用的有三种:
mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。
mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。
mode=6:平衡负载模式,有自动备援。
1.查看可用网卡:使用ifconfig -a或ip addr show命令查看系统中的可用网卡,确定要绑定的物理网卡,如eth0、eth1。
2.创建或编辑物理网卡配置文件:在/etc/sysconfig/network-scripts/目录下,编辑要绑定的物理网卡的配置文件。例如,对于eth0和eth1,打开对应的ifcfg-eth0和ifcfg-eth1文件。在文件中添加或修改以下内容:
DEVICE=eth0 或 eth1
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no
3.创建或编辑 Bond 接口配置文件:在同一目录下创建或编辑ifcfg-bond0文件,内容如下:
TYPE=Ethernet
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
BONDING_OPTS="miimon=100 mode=0 fail_over_mac=1"
其中BONDING_OPTS中的miimon表示链路监测间隔,其值为 100 表示每 100 毫秒对网络链路的状态进行一次监测;mode指定 Bond 模式,mode=0 表示采用轮询模式;fail_over_mac用于设置故障切换时的 MAC 地址选项,fail_over_mac=1 表示在主备切换时,绑定设备的 MAC 地址会切换为当前活动接口的 MAC 地址。
4.重启服务器:使用reboot重启服务器使配置生效。
使用nmcli device status命令查看系统中的可用网卡,确定要绑定到bond1的物理网卡,比如ens224和ens256。
执行以下命令创建名为bond1的 Bond 接口,并指定模式为balance-rr(轮询模式),你也可以根据需求将模式修改为其他模式,如active-backup等。
nmcli connection add type bond ifname bond1 mode balance-rr
备注:
# 创建bond0
nmcli connection add type bond ifname bond0 mode active-backup
# 创建bond1
nmcli connection add type bond ifname bond1 mode balance-rr
# 创建bond2
nmcli connection add type bond ifname bond2 mode balance-xor
# 创建bond3
nmcli connection add type bond ifname bond3 mode broadcast
# 创建bond4
nmcli connection add type bond ifname bond4 mode 802.3ad
# 创建bond5
nmcli connection add type bond ifname bond5 mode balance-tlb
# 创建bond6
nmcli connection add type bond ifname bond6 mode balance-alb
若要设置静态 IP 地址,可使用以下命令。假设要设置 IP 地址为192.168.10.81,子网掩码为255.255.255.0,网关为192.168.10.251
nmcli connection modify bond-bond1 ipv4.addresses 192.168.10.81/24 ipv4.gateway 192.168.10.251 ipv4.method manual
若要使用 DHCP 获取 IP 地址,则执行:
nmcli connection modify bond-bond1 ipv4.method auto
将ens224和ens256添加到bond1,执行以下命令:
nmcli connection add type bond-slave ifname ens224 master bond-bond1
nmcli connection add type bond-slave ifname ens256 master bond-bond1
nmcli connection reload
nmcli connection up bond-bond1
reboot
使用nmcli connection show bond-bond1命令查看bond1的详细配置信息,使用nmcli device status命令查看设备状态,确保bond1及相关物理网卡已正确配置和启用。配置完成后,还可以使用ping命令等测试网络连接是否正常。
使用 cat /proc/net/bonding/bond1 查看bond1的状态,确认是否配置成功。
Centos系统
#!/bin/bash
# 手动输入 Bond 接口名称
read -p "请输入 Bond 接口名称 (例如 bond0): " BOND_NAME
# 手动输入信息
read -p "请输入 Bond 模式 (例如 0, 1, 2 等): " BOND_MODE
read -p "请输入要绑定的网卡列表,以空格分隔 (例如 eth0 eth1): " input_slave_interfaces
IFS=' ' read -r -a SLAVE_INTERFACES <<< "$input_slave_interfaces"
read -p "请输入 Bond 的 IP 地址: " BOND_IP
read -p "请输入子网掩码: " BOND_NETMASK
read -p "请输入网关: " BOND_GATEWAY
read -p "请输入 DNS 服务器: " BOND_DNS
# 安装 bonding 模块
modprobe bonding
# 创建 Bond 配置文件
cat << EOF > /etc/sysconfig/network-scripts/ifcfg-$BOND_NAME
DEVICE=$BOND_NAME
TYPE=Bond
BONDING_MASTER=yes
ONBOOT=yes
BOOTPROTO=none
IPADDR=$BOND_IP
NETMASK=$BOND_NETMASK
GATEWAY=$BOND_GATEWAY
DNS1=$BOND_DNS
BONDING_OPTS="mode=$BOND_MODE miimon=100"
EOF
# 配置从网卡
for interface in "${SLAVE_INTERFACES[@]}"
do
cat << EOF > /etc/sysconfig/network-scripts/ifcfg-$interface
DEVICE=$interface
TYPE=Ethernet
ONBOOT=yes
MASTER=$BOND_NAME
SLAVE=yes
EOF
done
# 重启网络服务
systemctl restart network