Linux下多网卡绑定模式详解

在我们日常Linux使用中,一般对于生产网都会使用双网卡或多网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可谓好处多多。而一般我们都会使用Linux操作系统下自带的网卡绑定模式。这一点不像Windows2008,操作系统没有网卡绑定功能,需要网卡产商针对windows操作系统定制网卡管理软件来做网卡绑定(windows2012操作系统中加入了网卡绑定功能)。
下面,我们来详细了解一下Linux网卡绑定的相关内容。
一、 网卡绑定的基本原理
Linux下多网卡绑定模式详解_第1张图片多网卡绑定一方面能够提高网络吞吐量,另一方面也可以增强网络高可用。
从软件的角度来看,多网卡绑定实际上只需要提供一个额外的bond驱动程序即可,通过该虚拟网卡驱动程序可以将实际多块网卡屏蔽,对TCP/IP协议层而言只存在一个Bond网卡。
二、 Linux网卡绑定七种模式详解

Linux网卡绑定共七种模式,分别是如下模式:

  • mode=0 round-robin轮询策略(Round-robin policy)

  • mode=1 active-backup主备策略(Active-backup policy)

  • mode=2 load balancing (xor)异或策略(XOR policy)

  • mode=3 fault-tolerance (broadcast)广播策略(Broadcast policy)

  • mode=4 lacp IEEE 802.3ad 动态链路聚合(IEEE 802.3ad Dynamic link aggregation)

  • mode=5 transmit load balancing适配器传输负载均衡(Adaptive transmit load balancing)

  • mode=6 adaptive load balancing适配器负载均衡(Adaptive load balancing)

接下来,我们一一来看每种模式的含义。

  1. round-robin轮询策略

cat /proc/net/bonding/bond0
Bonding Mode: load balancing (round-robin)
该模式下,链路处于负载均衡状态,数据以轮询方式向每条链路发送报文,基于per packet方式发送。即每条链路各一个数据包。这模式好处在于增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。该模式下,交换机端需要配置聚合口,在cisco交换机上叫port channel
Linux下多网卡绑定模式详解_第2张图片
2.active-backup主备策略

该模式拓扑图与上图相同
cat /proc/net/bonding/bond0
Bonding Mode: fault-tolerance (active-backup)
在该模式下,一个端口处于主状态,一个处于备状态,所有流量都在主链路上发出和接收,备链路不会有任何流量。当主端口down掉时,备端口接管主状态。同时可以设置primary网卡,若primary网卡出现故障,切换至备网卡,primary网卡回复后,流量自动回切。这种模式接入不需要交换机端支持。

3.load balancing (xor)异或策略

该模式拓扑图与上图相同
cat /proc/net/bonding/bond0
Bonding Mode: load balancing (xor)
在该模式下,通过源和目标mac做hash因子来做xor算法来选择链路,这样就使得到达特定对端的流量总是从同一个接口上发出。和balance-rr一样,交换机端口需要能配置为“port channel”。
值得注意的是,若选择这种模式,如果所有流量源和目标mac都固定了,例如使用“网关模式”,即所有对外的数据传输均固定走一个网关,那么根据该模式的描述,分发算法算出的线路就一直是同一条,另外一条链路不会有任何数据流,那么这种模式就没有多少意义了。

4.fault-tolerance (broadcast)广播策略

cat /proc/net/bonding/bond0
Bonding Mode: fault-tolerance (broadcast)
这种模式的特点是一个报文会复制两份往bond下的两个接口分别发送出去。当有对端交换机失效,我们感觉不到任何丢包。这个模式也需要交换机配置聚合口。
拓扑图如下所示:
Linux下多网卡绑定模式详解_第3张图片
当一条链路出现故障是不会影响服务器另一条链路正常工作的。而且故障过程是0丢包。下面展示了这种模式下ping信息:
Linux下多网卡绑定模式详解_第4张图片
从这个ping信息可以看到,这种模式的特点是,同一个报文服务器会复制两份分别往两条线路发送,导致回复两份重复报文,虽然这种模式不能起到增加网络带宽的效果,反而给网络增加负担,但对于一些需要高可用的环境下,例如RAC的心跳网络,还是有一定价值的。

5.lacp IEEE 802.3ad 动态链路聚合

该模式拓扑结构与主备模式相同
cat /proc/net/bonding/bond0
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
该模式是基于IEEE 802.3ad Dynamic link aggregation(动态链接聚合)协议,针对该协议的介绍,在公众号之前的文章中有所涉及。
在该模式下,操作系统和交换机都会创建一个聚合组,在同一聚合组下的网口共享同样的速率和双工设定。操作系统根据802.3ad 协议将多个slave 网卡绑定在一个聚合组下。聚合组向外发送数据选择哪一块儿网卡是基于传输hash 策略,该策略可以通过xmit_hash_policy 选项从缺省的XOR 策略改变到其他策略。
该模式的必要条件:

  • ethtool 支持获取每个slave 的速率和双工设定;
  • 交换机支持IEEE 802.3ad Dynamic link aggregation。
    大多数交换机需要经过特定配置才能支持802.3ad 模式。

6.transmit load balancing适配器传输负载均衡

cat /proc/net/bonding/bond0
Bonding Mode: transmit load balancing
这种模式相较load balancing (xor)异或策略及LACP模式的hash策略相对智能,会主动根据对端的MAC地址上的流量,智能的分配流量从哪个网卡发出。但不足之处在于,仍使用一块网卡接收数据。存在的问题与load balancing (xor)也是一样的一样,如果对端MAC地址是唯一的,那么策略就会失效。这个模式下bond成员使用各自的mac,而不是上面几种模式是使用bond0接口的mac。无需交换机支持
该模式拓扑图如下:
Linux下多网卡绑定模式详解_第5张图片
7.adaptive load balancing适配器负载均衡

该模式拓扑结构与上图一致。
cat /proc/net/bonding/bond0
Bonding Mode: adaptive load balancing
该模式除了balance-tlb适配器传输负载均衡模式的功能外,同时加上针对IPV4流量接收的负载均衡。接收负载均衡是通过ARP协商实现的。在进行ARP协商的过程中,bond模块将对端和本地的mac地址进行绑定,这样从同一端发出的数据,在本地也会一直使用同一块网卡来接收。若是网络上发出的广播包,则由不同网卡轮询的方式来进行接收。通过这种方式实现了接收的负载均衡。该模式同样无需交换机支持。
三、小结

在网卡绑定的七种模式下,其中mode=0、2、3、4需要交换机支持,mode=1、5、6不需要交换机配置支持。

你可能感兴趣的:(Linux下多网卡绑定模式详解)