欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CentOS7.x系统双网卡绑定配置详解

程序员文章站 2022-06-03 17:57:04
...

使用bond实现网卡聚合链路脚本:

 

 #!/bin/bash

#创建一个名为bond0的链路接口

IP=192.168.101.1

GATE=192.168.101.254

ETH1=eno1

ETH2=eno2

ETH3=eno3

ETH4=eno4

modprobe bonding

cat <<EOF> /etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0

TYPE=Bond

NAME=bond0

BONDING_MASTER=yes

BOOTPROTO=static

USERCTL=no

ONBOOT=yes

IPADDR=$IP

PREFIX=24

GATEWAY=$GATE

BONDING_OPTS="mode=1 miimon=100"

EOF

cat <<EOF> /etc/sysconfig/network-scripts/ifcfg-bond1

DEVICE=bond1

TYPE=Bond

NAME=bond1

BONDING_MASTER=yes

USERCTL=no

BOOTPROTO=none

ONBOOT=yes

BONDING_OPTS="mode=1 miimon=100"

EOF

cat <<EOF> /etc/sysconfig/network-scripts/ifcfg-$ETH1

TYPE=Ethernet

BOOTPROTO=none

DEVICE=$ETH1

ONBOOT=yes

MASTER=bond0

SLAVE=yes

EOF

cat <<EOF> /etc/sysconfig/network-scripts/ifcfg-$ETH2

TYPE=Ethernet

BOOTPROTO=none

DEVICE=$ETH2

ONBOOT=yes

MASTER=bond0

SLAVE=yes

EOF

cat <<EOF> /etc/sysconfig/network-scripts/ifcfg-$ETH3

TYPE=Ethernet

BOOTPROTO=none

DEVICE=$ETH3

ONBOOT=yes

MASTER=bond1

SLAVE=yes

EOF

cat <<EOF> /etc/sysconfig/network-scripts/ifcfg-$ETH4

TYPE=Ethernet

BOOTPROTO=none

DEVICE=$ETH4

ONBOOT=yes

MASTER=bond1

SLAVE=yes

EOF

systemctl restart network

ping $GATE -c 1

reboot



 

验证:

1.查看bond0状态:

 [[email protected] ~]# 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: eno2 #当前主接口

MII Status: up

MII Polling Interval (ms): 100

Up Delay (ms): 0

Down Delay (ms): 0


Slave Interface: eno2

MII Status: up

Speed: 1000 Mbps

Duplex: full

Link Failure Count: 0

Permanent HW addr: 2c:76:8a:51:d2:09

Slave queue ID: 0


Slave Interface: eno1

MII Status: up

Speed: 1000 Mbps

Duplex: full

Link Failure Count: 0

Permanent HW addr: 2c:76:8a:51:d2:08

Slave queue ID: 0


2.测试,宕掉当前主接口,看是否切换

 

 [[email protected] ~]# ifdown eno2

Device 'eno2' successfully disconnected.

[[email protected] ~]# 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: 2c:76:8a:51:d2:08

Slave queue ID: 0


详细可参考红帽官网

 

 

多网卡的7种bond模式原理  

 

 

Linux 多网卡绑定

网卡绑定mode共有七种(0~6) bond0、bond1、bond2、bond3、bond4、bond5、bond6

常用的有三种

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地址。

七种bond模式说明:

第一种模式:mod=0 ,即:(balance-rr) Round-robin policy(平衡抡循环策略)

特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;但是我们知道如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降

 

第二种模式:mod=1,即: (active-backup) Active-backup policy(主-备份策略)

特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。此模式只提供了容错能力;由此可见此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N

 

第三种模式:mod=2,即:(balance-xor) XOR policy(平衡策略)

特点:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力

 

第四种模式:mod=3,即:broadcast(广播策略)

特点:在每个slave接口上传输每个数据包,此模式提供了容错能力

 

第五种模式:mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 动态链接聚合)

特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个**的聚合体下。

外出流量的slave选举是基于传输hash策略,该策略可以通过xmit_hash_policy选项从缺省的XOR策略改变到其他策略。需要注意的 是,并不是所有的传输策略都是802.3ad适应的,尤其考虑到在802.3ad标准43.2.4章节提及的包乱序问题。不同的实现可能会有不同的适应 性。

必要条件:

条件1:ethtool支持获取每个slave的速率和双工设定

条件2:switch(交换机)支持IEEE 802.3ad Dynamic link aggregation

条件3:大多数switch(交换机)需要经过特定配置才能支持802.3ad模式

 

第六种模式:mod=5,即:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡)

特点:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。

该模式的必要条件:ethtool支持获取每个slave的速率

 

第七种模式:mod=6,即:(balance-alb) Adaptive load balancing(适配器适应性负载均衡)

特点:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receive load balance, rlb),而且不需要任何switch(交换机)的支持。接收负载均衡是通过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参数必须被设置为某个大于等于switch(交换机)转发延时的值,从而保证发往对端的ARP应答 不会被switch(交换机)阻截。

必要条件:

条件1:ethtool支持获取每个slave的速率;

条件2:底层驱动支持设置某个设备的硬件地址,从而使得总是有个slave(curr_active_slave)使用bond的硬件地址,同时保证每个bond 中的slave都有一个唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址将会被新选出来的 curr_active_slave接管

其实mod=6与mod=0的区别:mod=6,先把eth0流量占满,再占eth1,….ethX;而mod=0的话,会发现2个口的流量都很稳定,基本一样的带宽。而mod=6,会发现第一个口流量很高,第2个口只占了小部分流量

 

 

 

Linux网口绑定 

 

IMPORTANT
In Red Hat Enterprise Linux 6, interface-specificparameters for the bonding kernel
module must bespecified as a space-separated list in the BONDING_OPTS="bonding
parameters" directive in the ifcfg-bondN interface file. Do not specify options
specific to abond in /etc/modprobe.d/bonding.conf, or in the deprecated
/etc/modprobe.conf file.
The max_bonds parameter is not interfacespecific and therefore, if required, should be
specified in /etc/modprobe.d/bonding.conf as follows:
options bonding max_bonds=1
However, the max_bonds parameter should not be set when usingifcfg-bondN files
with the BONDING_OPTS directive as this directivewill cause the network scripts to create
the bondinterfaces as required.
Note that anychanges to /etc/modprobe.d/bonding.confwill not take effect until
the module isnext loaded. A running module must first be unloaded. See Chapter 31,
Working with Kernel Modules for more information on loading and unloading modules.

==========================================================================

To create a channel bonding interface, create a file in the /etc/sysconfig/network-scripts/
directory called ifcfg-bondN, replacing N with the number for the interface, such as 0.
The contents of the file can be identical to whatever type of interface is getting bonded, such as an
Ethernet interface. The only difference is that the DEVICE directive is bondN, replacing N with the
number for the interface. The NM_CONTROLLED directive can be added to prevent NetworkManager
from configuring this device.
Example 11.1. Example ifcfg-bond0 interface configuration file
The following is an example of a channel bonding interface configuration file:
The MAC address of the bond will be taken from the first interface to be enslaved. It can also be
specified using the HWADDR directive if required. If you want NetworkManager to control this
interface, remove the NM_CONTROLLED=no directive, or set it to yes, and add TYPE=Bond and
BONDING_MASTER=yes.
After the channel bonding interface is created, the network interfaces to be bound together must be
configured by adding the MASTER and SLAVE directives to their configuration files. The configuration files
for each of the channel-bonded interfaces can be nearly identical.
Example 11.2. Example ifcfg-ethX bonded interface configuration file
DEVICE=bond0
IPADDR=192.168.1.1
NETMASK=255.255.255.0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
NM_CONTROLLED=no
BONDING_OPTS="bonding parameters separated by spaces"
CHAPTER 11. NETWORK INTERFACES
173
If two Ethernet interfaces are being channel bonded, both eth0 and eth1 can be as follows:
In this example, replace X with the numerical value for the interface.
Once the interfaces have been configured, restart the network service to bring the bond up. As root,
issue the following command:
~]# service network restart
To view the status of a bond, view the /proc/ file by issuing a command in the following format:
cat /proc/net/bonding/bondN
For example:
~]$ cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)
Bonding Mode: load balancing (round-robin)
MII Status: down
MII Polling Interval (ms): 0
Up Delay (ms): 0
Down Delay (ms): 0
For further instructions and advice on configuring the bonding module and to view the list of bonding
parameters, see Section 31.8.1, “Using Channel Bonding”.
Support for bonding was added to NetworkManager in Red Hat Enterprise Linux 6.3. See
Section 11.2.1, “Ethernet Interfaces” for an explanation of NM_CONTROLLED and the
NM_BOND_VLAN_ENABLED directive.
 

 

 

相关标签: network bond