Linux网络:聚合链路技术之bond

bond是什么

Linux中的”bond”指的是网络绑定(Network Bonding)技术,也称为“网络聚合”(Network Aggregation)或“链路聚合”(Link Aggregation)。它允许将多个网络接口(通常是以太网接口)组合成一个逻辑接口,从而增加带宽、提高可用性和冗余。这对于需要高带宽和高可用性的服务器环境非常有用,例如数据中心或高性能计算集群。

bond接口常见的类型主要有以下几种:

轮询策略 Mode 0 (balance-rr):此模式将传输负载平均分布在所有成员接口之间。这是最简单的绑定模式,不提供冗余。

主备策略 Mode 1 (active-backup):在这种模式下,只有一个接口处于活动状态,其余接口处于备份状态。如果活动接口失败,备份接口会自动接管。

异或策略 Mode 2 (balance-xor):使用异或操作将传输负载分布在成员接口之间,提供了负载均衡和部分冗余。

广播策略 Mode 3 (broadcast):将数据广播到所有成员接口,适用于某些特殊情况。

动态链接聚合 Mode 4 (802.3ad, LACP):使用IEEE 802.3ad标准的链路聚合控制协议(LACP),协商绑定接口的状态,提供负载均衡和冗余。

输出负载均衡模式 Mode 5 (balance-tlb):负载根据传输负载和接口状态分布,但接收数据仅通过活动接口。

输入/输出负载均衡模式 Mode 6 (balance-alb):类似于balance-tlb,但还可以使用地址映射来分布传输负载。

七种类型中需要交换机配合的有哪几种?

在Linux的网络接口绑定(bonding)中,有三种主要的绑定模式需要配合支持的交换机,以实现负载均衡和故障恢复,这三种模式分别是“balance-rr”、“balance-xor”和“802.3ad”(也称为LACP)。

Mode 0 (balance-rr):这种模式中,需要交换机通过手工模式或者静态模式链路聚合与之对接,传输负载会循环地分配到不同的成员接口上,从而实现负载均衡。但是,为了确保这种负载均衡的效果,交换机需要正常工作并适当地处理从不同成员接口发送的数据包。如果交换机无法正确地处理从多个成员接口发出的数据包,可能会导致数据包的乱序或延迟,从而影响网络性能

Mode 2 (balance-xor):这种模式使用异或(XOR)操作来将数据流量分配到不同的成员接口上。需要交换机通过手工模式或者静态模式链路聚合与之对接,确保数据包在不同的成员接口之间正确地分布,避免数据包的重新排序。交换机的配置和支持可以有助于优化负载均衡的效果。

Mode 4 (802.3ad, LACP):这种模式使用IEEE 802.3ad标准中定义的链路聚合控制协议(LACP)。LACP协议允许网络设备(如交换机)和服务器之间协商并形成一个聚合链路。服务器的多个接口通过LACP与交换机通信,从而实现负载均衡和冗余。在这种模式下,需要交换机支持LACP协议。交换机上需要配置相应的聚合组(也称为端口组、端口通道、聚合通道等),以便与服务器上的bond接口进行匹配。交换机和服务器之间的LACP协商确定哪些链路应处于活动状态,哪些链路处于备用状态,从而实现负载均衡和故障恢复。

常用的有三种

mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。

mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。

mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定。

需要说明的是如果想做成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地址。

bond0配置

相关配置文件

/etc/sysconfig/network-scripts/ifcfg-eth{0,1}
/etc/sysconfig/network-scripts/ifcfg-bond0
/etc/modprobe.d/dist.conf
/etc/rc.local

eth0 eth1添加如下配置

MASTER=bond0
SLAVE=yes

/etc/modprobe.d/dist.conf添加如下配置

alias bond0 bonding
options bond0 miimon=100 mode=0 primary=eth0

alias bond0 bonding,表示系统在启动时加载bonding模块,对外虚拟网络接口设备为 bond0

miimon=100,表示系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线

mode=0,表示绑定模式为0

primary=eth0,系统首先eth0作为bond0接口与外界信息的传输接口

/etc/rc.local添加如下配置

ifenslave bond0 eth0 eth1

加载模块

modprobe bonding

vlan网卡配置

安装VLAN软件包

dnf install vlan

在eth0上创建VLAN ID为100的虚拟接口

vconfig add eth0 100
ifconfig eth0.100 192.168.1.100 netmask 255.255.255.0 up

永久配置 eth0:100网卡配置文件

DEVICE=eth0:100
BOOTPROTO=static
IPADDR=<ip_address>
NETMASK=<subnet_mask>
ONBOOT=yes
VLAN=yes
VLANID=100

只修改网卡配置文件同时进行配置bond和vlan的方法

BONDING_MASTER=yes
BONDING_OPTS="miimon=100 mode=1"
上面两句配置在bond子接口 vlan号1000
VLAN=yes	
VLANID=1000

Linux网络:聚合链路技术之bond
http://www.jcwit.com/article/84/
作者
Carlos
发布于
2023年11月7日
许可协议