文章转载自:

1. bond介绍

以太网通道绑定(Ethernet Channel Bonding)是一种网络技术,用于将多个物理网络接口(通常是以太网网卡)组合成一个逻辑接口。这样做的目的是增加网络带宽、提高可靠性和提供冗余备份。

在以太网通道绑定中,多个物理接口被绑定在一起形成一个虚拟的接口,称为 Bond 接口。该 Bond 接口有自己的 IP 地址和 MAC 地址,它看起来就像是单个网络接口一样,但实际上是由多个物理接口组成的。Bond 接口上的数据包可以通过任何一个物理接口进行传输,并且可以根据配置的策略在多个物理接口之间分配。

以太网通道绑定有许多优点,包括:

  • 增加带宽:通过将多个物理接口绑定在一起,可以增加可用的带宽。如果每个物理接口的带宽是相同的,则总带宽将成倍增加。

  • 提高可靠性:当一个物理接口发生故障时,其他接口仍然可以继续工作,从而提高了网络的可靠性。这种冗余设计可以防止单点故障。

  • 提供负载均衡:通过合理配置,可以将网络流量均匀地分布到各个物理接口上,从而实现负载均衡。这有助于最大程度地利用可用带宽,并防止某些接口过载。

  • 故障自动恢复:一旦一个物理接口失效,系统可以自动将流量切换到其他可用的接口,从而实现快速的故障恢复。

以太网通道绑定在服务器环境中特别常见,用于连接到交换机或路由器的网络连接。它可以通过多种配置模式来适应不同的网络需求,例如负载均衡、冗余备份、动态链接聚合等。

2. bond模式说明

bonding技术提供了七种工作模式,在使用的时候需要指定一种,每种有各自的优缺点.

  • balance-rr (mode=0) 默认, 有高可用 (容错) 和负载均衡的功能, 需要交换机的配置,每块网卡轮询发包 (流量分发比较均衡).

  • active-backup (mode=1) 只有高可用 (容错) 功能, 不需要交换机配置, 这种模式只有一块网卡工作, 对外只有一个mac地址。缺点是端口利用率比较低

  • balance-xor (mode=2) 不常用

  • broadcast (mode=3) 不常用

  • 802.3ad (mode=4) IEEE 802.3ad 动态链路聚合,需要交换机配置

  • balance-tlb (mode=5) 不常用

  • balance-alb (mode=6) 有高可用 ( 容错 )和负载均衡的功能,不需要交换机配置 (流量分发到每个接口不是特别均衡)。

3. bond配置

1) 配置信息(如果要更换模式的话,只需要在ifcfg-bind0网卡文件中修改对应模式,并配置好对应交换机模式即可)

系统: Centos7.8
网卡: ifcfg-eno1、ifcfg-eno2
bond0:172.16.3.94
负载模式: mode1(主备)

2) 关闭和停止NetworkManager服务(一定要关闭,不关会对做bonding有干扰)

systemctl stop NetworkManager.service     # 停止NetworkManager服务
systemctl disable NetworkManager.service  # 禁止开机启动NetworkManager服务

3) 加载bonding模块(没有提示说明加载成功)

modprobe bonding

4) 查看bonding模块是否被加载

[root@localhost ~]# lsmod | grep bonding
bonding               152979  0 

5) 配置内容

#网卡eno1配置
[root@localhost network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-eno1 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eno1
UUID=6a9a57ce-eff1-4630-a871-c090e4eed147
DEVICE=eno1
ONBOOT=yes
MASTER=bond0  #新增
SLAVE=yes

#网卡eno2配置
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno2 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eno2
UUID=08b2e589-a9e1-4045-8c3f-68608bfffea1
DEVICE=eno2
ONBOOT=yes
MASTER=bond0  #新增
SLAVE=yes

#bond0配置(新创建文件ifcfg-bond0,并添加下边内容)
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0 
DEVICE=bond0
NAME=bond0
TYPE=Bond
BONDING_MASTER=yes
IPADDR=172.16.3.94
PREFIX=22
GATEWAY=172.16.0.1
DNS1=114.114.114.114
ONBOOT=yes
BOOTPROTO=static
BONDING_OPTS="mode=1 miimon=100"

6) 重启网卡

systemctl restart network

7) 查看bond0网卡状态

[root@localhost ~]# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eno1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eno1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 3c:ec:ef:0e:29:0e
Slave queue ID: 0

Slave Interface: eno2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 3c:ec:ef:0e:29:0f
Slave queue ID: 0

8) 查看网卡信息ifconfig

[root@localhost ~]# ifconfig
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST>  mtu 1500
        inet 172.16.3.94  netmask 255.255.252.0  broadcast 172.16.3.255
        inet6 fe80::3eec:efff:fe0e:290e  prefixlen 64  scopeid 0x20<link>
        ether 3c:ec:ef:0e:29:0e  txqueuelen 1000  (Ethernet)
        RX packets 44110  bytes 2694349 (2.5 MiB)
        RX errors 0  dropped 745  overruns 0  frame 0
        TX packets 542  bytes 49817 (48.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:6c:de:c4:73  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno1: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 3c:ec:ef:0e:29:0e  txqueuelen 1000  (Ethernet)
        RX packets 22250  bytes 1372167 (1.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 542  bytes 49817 (48.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno2: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 3c:ec:ef:0e:29:0e  txqueuelen 1000  (Ethernet)
        RX packets 21860  bytes 1322182 (1.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 3166622  bytes 771384383 (735.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3166622  bytes 771384383 (735.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0



[参看]