RHEL/CentOS-网卡bond
绑定模式和交换机
1 | 1、需要手工模式链路聚合:mode0,mode2; |
Mode0
blance-round-robin
配置手工模式链路聚合,服务器所绑定的网卡被修改成相同的MAC地址,轮询的方式比如第一个包走eth0,第二个包走eth1,需要交换机通过静态链路聚合与之对接。Mode1
active-backup
配置对接接口在同一个VLAN,服务器采用双网卡时,一个处于主状态,一个处于从状态,所有数据都通过主状态的端口传输。当主状态端口对应链路出现故障时,数据通过从状态端口传输。因此交换机对应的两个端口建议配置在同一个VLAN,无需其他配置。Mode2
blance-xor
平衡策略, 配置手工模式链路聚合,服务器的多网卡基于指定的HASH策略传输数据包,需要交换机配置静态链路聚合与之对接。基于HASH算法的负载均衡模式,网卡的分流按照
xmit_hash_policy
的TCP协议层设置来进行HASH计算分流,使各种不同处理来源的访问都尽量在同一个网卡上进行处理。特点:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过
xmit_hash_policy
选项指定,此模式提供负载平衡和容错能力xmit_hash_policy
参数(此参数对mode2、4模式有影响):layer1
- 通过MAC地址进行HASH计算。计算公式:(MACsrc⊕MACdest)% Nslave
layer3+4
- 通过TCP及UDP端口及其IP地址进行HASH计算。计算公式:((portsrc⊕portdest) ⊕ (IPsrc⊕IPdest)) % Nslave
Mode3
broadcast
采用两台交换机对接且配置在不同VLAN,服务器的多网卡对于同一份报文会复制两份分别从两个端口传输,建议使用两台交换机,且配置不同VLAN与之对接,无需其他配置。所有被绑定的网卡都将得到相同的数据,一般用于十分特殊的网络需求,如需要对两个互相没有连接的交换机发送相同的数据。
所有包从所有网络接口发出,这个不均衡,只有冗余机制,但过于浪费资源。此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题。需要和交换机的聚合强制不协商方式配合。
特点:在每个slave接口上传输每个数据包,此模式提供了容错能力
此模式未验证,有两种说法,一种说法是需要交换机静态聚合,一种说法是不需要。
Mode4
802.3ad
即IEEE 802.3ad动态链路聚合,即LACP模式,服务器的多网卡采用LACP模式绑定,对应交换机应采用LACP模式的链路聚合与之对接。表示支持802.3ad协议,和交换机的聚合LACP方式配合(需要
xmit_hash_policy
).标准要求所有设备在聚合操作时,要在同样的速率和双工模式,而且,和除了balance-rr
模式外的其它bonding负载均衡模式一样,任何连接都不能使用多于一个接口的带宽。特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。外出流量的slave选举是基于传输hash策略,该策略可以通过
xmit_hash_policy
选项从缺省的XOR策略改变到其他策略。需要注意的是,并不是所有的传输策略都是802.3ad适应的,尤其考虑到在802.3ad标准43.2.4章节提及的包乱序问题。不同的实现可能会有不同的适应性。必要条件:
- ethtool支持获取每个slave的速率和双工设定
- 交换机支持IEEE802.3ad Dynamic link aggregation
- 大多数交换机需要经过特定配置才能支持802.3ad模式
Mode5
blance-tlb(transmit load balancing)
采用两台交换机对接,服务器的多网卡采用适配器传输负载均衡,交换机上不需进行配置。适配器输出负载均衡模式,输出的数据会通过所有被绑定的网卡输出,接收数据时则只选定其中一块网卡。如果正在用于接收数据的网卡发生故障,则由其他网卡接管,要求所用的网卡及网卡驱动可通过
ethtool
命令得到speed
信息。特点:不需要任何特别的交换机支持的通道
bonding
。在每个slave
上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave
出故障了,另一个slave
接管失败的slave
的MAC
地址。必要条件:
ethtool
支持获取每个slave的速率Mode6
blance-alb(adaptive load balancing)
采用两台交换机对接,服务器的多网卡采用适配器适应性负载均衡,交换机上不需要进行配置。适配器输入/输出负载均衡模式,在
mode5 tlb
的基础上,在接收数据的同时实现负载均衡((接收负载均衡rlb-receiveload balance
),除要求ethtool
命令可得到speed
信息外,还要求支持对网卡MAC
地址的动态修改功能。不需要任何交换机的支持。接收负载均衡是通过
ARP
协商实现的。特点:该模式包含了
balance-tlb
模式,同时加上针对IPV4流量的接收负载均衡(receiveload balance, rlb
),而且不需要任何交换机的支持。接收负载均衡是通过ARP
协商实现的。bonding
驱动截获本机发送的ARP
应答,并把源硬件地址改写为bond
中某个slave
的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。来自服务器端的接收流量也会被均衡。当本机发送ARP
请求时,bonding
驱动把对端的IP
信息从ARP
包中复制并保存下来。当ARP
应答从对端到达时,bonding
驱动把它的硬件地址提取出来,并发起一个ARP
应答给bond
中的某个slave
。使用ARP
协商进行负载均衡的一个问题是:每次广播ARP
请求时都会使用bond
的硬件地址,因此对端学习到这个硬件地址后,接收流量将会全部流向当前的slave
。这个问题可以通过给所有的对端发送更新(ARP应答)来解决,应答中包含他们独一无二的硬件地址,从而导致流量重新分布。当新的slave
加入到bond
中时,或者某个未激活的slave
重新激活时,接收流量也要重新分布。接收的负载被顺序地分布(round robin
)在bond
中最高速的slave
上当某个链路被重新接上,或者一个新的slave
加入到bond
中,接收流量在所有当前激活的slave
中全部重新分配,通过使用指定的MAC
地址给每个client
发起ARP
应答。下面介绍的updelay
参数必须被设置为某个大于等于交换机转发延时的值,从而保证发往对端的ARP
应答不会被交换机阻截。
模式选择建议
如果系统流量不超过单个网卡的带宽,请不要选择使用mode 1
之外的模式,因为负载均衡需要对流量进行计算,这对系统性能会有所损耗。
建议mode 5
、mode 6
只在交换机不支持port channel
的情况下选用。
如果交换机及网卡都确认支持802.3ab
,则实现负载均衡时尽量使用mode 4
以提高系统性能。
bonding模块
1 | lsmod | grep bonding |
加载模块,让系统支持bonding
CentOS7中测试无需以下配置来加载bonding模块,也可能跟在绑定配置文件中指定了相关参数有关,未实际测试。
1 | # 不存在的话,手动创建(也可以放在modprobe.d下面) |
特别注意:如果在配置文件的options
中没有max_bonds
参数,就会出现下面的报错信息:Master 'bond1': Error: handshake with driver failed
.因为在用modprobe
加载bonding
模块时,加上参数指定创建多少个bonding device
,否则默认只会创建一个,就是bond0
。
已测试版本
- RHEL/CentOS 5
- RHEL/CentOS 6
- RHEL/CentOS 7
ifcfg-bond0
1 | [root@rac1 network-scripts]# cat ifcfg-bond0 |
ifcfg-ethx
1 | [root@rac1 network-scripts]# cat ifcfg-eth0 |
查看
1 | cat /proc/net/bonding/bond0 |