1、简介
linux bonding 是一种将多个物理网卡绑定为一个逻辑网卡的技术,它可以实现网络的冗余、负载均衡和带宽扩展等功能。linux bonding 是 linux 内核中提供的一个模块,它支持七种工作模式,不同的模式有不同的特点和适用场景。linux bonding 的配置和管理可以通过一些命令或工具来进行,例如 ifenslave、nmcli、ethtool 等。linux bonding 的状态和参数可以通过 /proc/net/bonding 或 ethtool 命令来查看和修改。
2、bonding模式
bonding技术提供了七种工作模式,在使用的时候需要指定一种,每种有各自的优缺点:
Mode 0(balance-rr):又称为“round-robin”模式。数据包按照轮询的方式依次发送到每个接口,实现负载均衡。这种模式不提供冗余性。(平衡抡循环策略,需要配置交换机静态聚合)
Mode 1(active-backup):又称为“active-passive”模式。只有一个接口处于活动状态,用于传输数据。其他接口处于备用状态,仅在活动接口故障时接管。提供故障切换和冗余性。(主-备份策略)
Mode 2(balance-xor):使用源和目的MAC地址以及传输层协议和端口号来选择要发送的接口。提供负载均衡和冗余性。(平衡策略,需要配置交换机静态聚合)
Mode 3(broadcast):将所有数据包发送到所有接口。实现广播传输,但不提供负载均衡或冗余性。(广播策略,需配置交换机静态聚合)
Mode 4(802.3ad):也称为“LACP”(Link Aggregation Control Protocol)模式。使用LACP协议动态协商绑定接口的工作方式。提供负载均衡和冗余性。(IEEE 802.3ad 动态链接聚合,需要交换机动态聚合)
Mode 5(balance-tlb):使用负载传输平衡(TLB)算法在传输和接收时进行负载均衡。这种模式仅在传输方向上实现负载均衡,接收方向上只使用一个接口。(适配器传输负载均衡)
Mode 6(balance-alb):使用自适应负载平衡(ALB)算法在传输和接收时进行负载均衡。这种模式在传输和接收方向上都实现负载均衡,不需要特殊的交换机支持。(适配器适应性负载均衡)
需要说明的是如果想做成mode 0的负载均衡,仅仅设置这里options bond0 miimon=100 mode=0是不够的,与网卡相连的交换机必须做特殊配置(这两个端口应该采取聚合方式),因为做bonding的这两块网卡是使用同一个MAC地址.从原理分析一下(bond运行在mode 0下):
mode 0下bond所绑定的网卡的IP都被修改成相同的mac地址,如果这些网卡都被接在同一个交换机,那么交换机的arp表里这个mac地址对应的端口就有多 个,那么交换机接受到发往这个mac地址的包应该往哪个端口转发呢?正常情况下mac地址是全球唯一的,一个mac地址对应多个端口肯定使交换机迷惑了。所以 mode0下的bond如果连接到交换机,交换机这几个端口应该采取聚合方式(cisco称为 ethernetchannel,foundry称为portgroup),因为交换机做了聚合后,聚合下的几个端口也被捆绑成一个mac地址.我们的解 决办法是,两个网卡接入不同的交换机即可。
mode6模式下无需配置交换机,因为做bonding的这两块网卡是使用不同的MAC地址。
3、实现双冗余模式步骤
DEVICE=eth0 # ifcfg-eth1 文件对应的位置修改为 eth1
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
然后,在 /etc/sysconfig/network-scripts/ 目录下创建一个文件 ifcfg-bond0 ,将它设置为 bond 的主网卡,并指定 IP 地址、子网掩码、网关等信息。具体的内容如下:
DEVICE=bond0
TYPE=Bond
BOOTPROTO=none
USERCTL=no
IPADDR=192.168.1.100 # 根据你的实际情况修改
NETMASK=255.255.255.0 # 根据你的实际情况修改
GATEWAY=192.168.1.1 # 根据你的实际情况修改
BONDING_OPTS="mode=1 miimon=100" # 指定 bonding 模式为 1 ,监测间隔为 100 毫秒
ONBOOT=yes
BONDING_MASTER=yes