Linux下多网卡绑定bond及模式介绍

摘要:
网卡绑定一般用于网络吞吐量大、对网络稳定性要求高的场景。主要通过将多个物理网卡绑定到一个逻辑网卡,实现了本地网卡的冗余、带宽扩展和负载均衡。Linux下有七种网卡绑定模式来实现上述一个或多个特定功能。当ARP响应从另一端到达时,绑定驱动程序提取其硬件地址,并将ARP响应发送到绑定中的从属设备。

【介绍】

网卡bond一般主要用于网络吞吐量很大,以及对于网络稳定性要求较高的场景。

   

主要是通过将多个物理网卡绑定到一个逻辑网卡上,实现了本地网卡的冗余,带宽扩容以及负载均衡。

   

Linux下一共有七种网卡bond方式,实现以上某个或某几个具体功能。

最常见的三种模式是bond0bond1bond6.

   

bond0

平衡轮循环策略,有自动备援,不过需要"Switch"支援及设定。

balance-rr(Round-robin policy)

   

方式:

传输数据包的顺序是依次传输(即:第一个包走eth0,第二个包就走eth1……,一直到所有的数据包传输完成)。

优点:

提供负载均衡和容错能力。

缺点:

同一个链接或者会话的数据包从不同的接口发出的话,中间会经过不同的链路,在客户端可能会出现数据包无法有序到达的情况,而无序到达的数据包将会被要求重新发送,网络吞吐量反而会下降

   

bond1

主-备份策略

active-backup(Active -backup policy)

方式:

只有一个设备处于活动状态,一个宕掉之后另一个马上切换为主设备。

mac地址为外部可见,从外面看,bond的mac地址是唯一的,switch不会发生混乱。

优点:

提高了网络连接的可靠性。

缺点:

此模式只提供容错能力资源利用性较低,只有一个接口处于active状态,在有N个网络接口bond的状态下,利用率只有1/N。

   

【bond2】

平衡策略

balance-xor(XOR policy)

方式:

基于特性的Hash算法传输数据包。

缺省的策略为:(源MAC地址 XOR 目标MAC地址) % slave数量。 # XRO为异或运算,值不同时结果为1,相同为0

可以通过xmit_hash_policy选项设置传输策略。

特点:

提供负载均衡和容错能力。

   

【bond3】

广播策略

broadcast

方式:

在每个slave接口上传输每一个数据包。

特点:

提供容错能力。

   

【bond4】

IEEE 802.3ad 动态链接聚合

802.3ad( IEEE 802.3ad Dynamic link aggregation)

方式:

创建一个聚合组,共享同样的速率和双工设定

根据802.3ad规范将多个slave工作在同一个激活的聚合体下。外出流量的slave选举基于传输Hash策略,同样,此策略也可以通过xmit_hash_policy选项进行修改。

注意:

并不是所有的传输策略都是802.3ad所适应的

条件:

1. ethtool支持获取每个slave的速率和双工设定。

2. switch支持IEEE 802.3ad Dynamic link aggregation(大多数交换机需要设定才支持)

   

【bond5】

适配器传输负载均衡

balance-tlb(Adaptive transmit load balancing)

   

方式:

在每个slave上根据当前的负载(依据速度)分配外出流量,接收时使用当前轮到的slave。

如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。

条件:

ethtool支持获取每个slave的速率。

特点:

不需要任何特别的switch(交换机)支持的通道bonding。

   

bond6

适配器适应性负载均衡

balance-alb(Adaptive load balancing)

   

方式:

此模式包含了bond5的balance-tlb,同时增加了针对IPV4流量的接收负载均衡。(receive load 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参数必须被设置为某个大于等于switch(交换机)转发延时的值,从而保证发往对端的ARP应答不会被switch(交换机)阻截。

   

条件:

1. ethtool支持获取每个slave的速率

2. 底层驱动支持设置某个设备的硬件地址

特点:

总是有一个slave(curr_active_slave)使用bond的硬件地址,同时每个bond里面的slave都有一个唯一的硬件地址

如果curr_active_slave出了故障,则它的硬件地址会被重新选举产生的slave接管。

与bond0最大的区别在于,bond0的多张网卡里面的流量几乎是相同的,但是bond6里面的流量是先占满eth0,再占满eth1……依次

   

【网卡绑定】

我们假定前条件:

2个物理网口eth0,eth1

绑定后的虚拟口为bond0

服务器IP为10.10.10.1

   

配置文件:

1. vi /etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0

BOOTPROTO=none

ONBOOT=yes

IPADDR=10.10.10.1

NETMASK=255.255.255.0

NETWORK=192.168.0.0

2. vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=none

MASTER=bond0

SLAVE=yes

3. vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

BOOTPROTO=none

MASTER=bond0

SLAVE=yes

   

修改modprobe相关设定文件,并加载bonding模块:

1. vi /etc/modprobe.d/bonding.conf

alias bond0 bonding

options bonding mode=0 miimon=200

2. 加载模块

modprobe bonding

3. 确认是否加载成功

[root@slb ~]# lsmod | grep bonding

bonding 100065 0

4. 重启网络

[root@slb ~]# /etc/init.d/network restart

[root@slb ~]# cat /proc/net/bonding/bond0

Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)

Bonding Mode: fault-tolerance (active-backup)

Primary Slave: None

Currently Active Slave: eth0

……

[root@slb ~]# ifconfig |grep HWaddr

bond0 Link encap:Ethernet HWaddr 00:16:36:1B:BB:74

eth0 Link encap:Ethernet HWaddr 00:16:36:1B:BB:74

eth1 Link encap:Ethernet HWaddr 00:16:36:1B:BB:74

   

以上信息可以确认:

a. 现在的bonding模式是active-backup

b. 现在Active的网口是eth0

c. bond0, eth1的物理地址和处于active状态下的eth0的物理地址相同,这样是为了避免上位交换机发生混乱。

可以随意拔掉一根网线或者在交换机上shutdown一个网口,查看网络是否依旧联通。

   

5. 系统启动自动绑定并增加默认网关(可选

[root@slb ~]# vi /etc/rc.d/rc.local

ifenslave bond0 eth0 eth1

route add default gw 10.10.10.1

   

【多网卡绑定】

上面只是两个网卡绑定一个bond0的情况,如果我们要设置多个bond口,就不能这样做了。

·/etc/modprobe.d/bonding.conf·的修改可以如下:

1. 多个bond的模式一样的情况

alias bond0 bonding

alias bond1 bonding

options bonding max_bonds=2 miimon=200 mode=1

2. 多个bond的模式不一样的情况

alias bond0 bonding

options bond0 miimon=100 mode=1

install bond1 /sbin/modprobe bonding -o bond1 miimon=200 mode=0
install bond2 /sbin/modprobe bonding -o bond2 miimon=100 mode=1

 

免责声明:文章转载自《Linux下多网卡绑定bond及模式介绍》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ASP.NET中自定义控件的创建和使用(转)UE4_武器1_创建武器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

iPad及BT4下的WEP破解实验与分析 | Network Security

iPad及BT4下的WEP破解实验与分析 一、WEP协议工作原理 1WEP概述 WEP(Wired Equivalent Privacy)叫做有线等效加密,是一种可选的链路层安全机制,用来提供访问控制、数据加密和安全性检验等功能,是无线领域第一个安全协议。WEP的实现在802.11中是可选项,其MPDU格式如下所示: 2密钥派生与分发 WEP的密钥在...

建立高并发模型需要考虑的点

1、能不能通过增加机群(应用机群,服务机群)的方式去解决?好比一台机器能抗200qps, 然后你就40000qps的业务,那你最少需要200台机器,如果考虑到有机器down掉的情况,还要加备用服务器,这个具体加多少台就得去评估了。     防止出现有机器down掉,还得在每台机器上更新列表的情况,我们最好访问服务名(类似于域名),这样的话的好处就是,如果出...

Linux(Ubuntu):搭建Docker-Compose

1. Docker Compose 简介及安装 Docker Compose 是一种用于通过使用单个命令创建和启动 Docker 应用程序的工具。我们可以使用它来配置应用程序的服务。 它是开发,测试和升级环境的利器。 它提供以下命令来管理应用程序的整个生命周期: 启动,停止和重建服务 查看运行服务的状态 流式运行服务的日志输出 在服务上运行一次性命令...

Linux下MySQL所在磁盘,线程,内存的配置

磁盘日志策略 /etc/fstab中可以进行正面的配置(其性能按从上到下的顺序排列) data=writeback 只有元数据写入日志.元数据写入与数据写入并不同步.这是最快的配置,对innodb来说通常是安全的,innodb有自己的事务日志.唯一例外是当系统崩溃.frm文件损坏了. data=ordered 这个选项也只会记录元数据,但是会提供一些一致性...

Linux下搭建iSCSI共享存储的方法 TGT 方式 CentOS6.9系统下

iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的、可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。iSCSI技术是一种新储存技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,使服务器可与使用IP网络的储存装置...

Linux 下的dd命令使用详解(摘录)

一、dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2 参数注释: 1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file > 2. of=文件名:输出文件名,缺省为标准输出。即指...