2025年linux 中几种bond模式详解 bonging

linux 中几种bond模式详解 bonging目录 bonding 关于提高服务器的带宽策略 1 一 bonding 的概念 所谓 bonding 就是将多块网卡绑定同一 IP 地址对外提供服务 可以实现网卡的带宽扩容 高可用或者负载均衡 二 bonding 的优势 1 2 3 1 网络负载均衡 2 提高带宽网络传输效率 3 网络冗余与高可用 三

大家好,我是讯享网,很高兴认识大家。

 

目录

bonding---关于提高服务器的带宽策略


 

1

一:bonding的概念

所谓bonding就是将多块网卡绑定同一IP地址对外提供服务,可以实现网卡的带宽扩容、高可用或者负载均衡。

二:bonding的优势

1

2

3

1 网络负载均衡

2 提高带宽网络传输效率

3 网络冗余与高可用

三:bonding的策略(7种策略)

 

1  balance-rr (mode=0)轮询(Round-robin)策略:即:(balance-rr)Round-robin policy(平衡抡循环策略)

从头到尾顺序的在每一个slave接口上面发送数据包。本模式提供负载均衡和容错的能力。

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

2  active-backup(mode=1)主备模式 (active-backup)Active-backup policy(主-备份策略) ,

在绑定中,只有一个slave被激活。当且仅当活动的slave接口失败时才会激活其他slave。为了避免交换机发生混乱此时绑定的MAC地址只有一个外部端口上可见。在bongding的2.6.2及其以后的版本中,主备模式下发生一次故障迁移时,bonding将在新激活的slave上会送一个或者多个gratuitous ARP.bonding的主salve接口上以及配置在接口上的所有VLAN接口都会发送gratuitous ARP,只要这些接口上配置了至少一个IP地址。VLAN接口上发送的的gratuitous ARP将会附上适当的VLAN id。本模式提供容错能力,primary option,documented below会影响本模式的行为。

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

3 balance-xor(mode=2)XOR策略:(balance-xor)XOR policy(平衡策略)

基于所选择的传送hash策略。本模式提供负载均衡和容错的能力。

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

4 broadcast(mode=3)广播策略:

在所有的slave接口上传送所有的报文。本模式提供容错能力。

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

5 802.3ad(mode=4)IEEE 802.3ad 动态链路聚合。即:(802.3ad)IEEE 802.3ad Dynamic link aggregation(IEEE802.3ad 动态链接聚合)

创建共享相同的速率和双工模式的聚合组。能根据802.3ad规范利用所有的slave来建立聚合链路。  Salve的出站选择取决于传输的hash策略,默认策略是简单的XOR策略,而hash策略则可以通xmit_hash_policy选项加以改变。需要注意的是:不是所有  的传输策略都与802.3ad兼容,尤其是802.3ad标准的关于 packet mis-ordering要求的地方。不同个体的实现往往出现很大的不兼容。

先决条件:

    1. 每个slave的基本驱动支持Ehtool获取速率和双工状态。

    2.交换机支持IEEE 802.3ad动态链路聚合。大多数的交换机都需要使用某种配置方式来启用802.3ad模式。

特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。外出流量的slave选举是基于传输hash策略,该策略可以通过xmit_hash_policy选项从缺省的XOR策略改变到其他策略。需要注意的 是,并不是所有的传输策略都是802.3ad适应的,尤其考虑到包乱序问题。不同的实现可能会有不同的适应 性。

6  balance-tlb(mode=5)既(balance-tlb)Adaptive transmit load balancing(适配器传输负载均衡)

  自适应传输负载均衡:信道绑定不需要特殊的交换机支持。出口流量的分布取决于当前每个slave的负载(计算相对速度)。进口流量从当前的slave的接收。如果接收salve出错,其他的slave接管失败的slave的MAC地址继续接收。

先决条件:

    每个slave的基本驱动支持Ehtool获取速率状态。

7 balance-alb(mode=6)即:(balance-alb)Adaptive load balancing(适配器适应性负载均衡)

自适应负载均衡:包括balance-tlb(模式5)以及用于IPV4流量的接收负载均衡,并且不需要特殊的交换机支持。接收负载均衡通过ARP协商实现。bonding的驱动拦截本机发出的ARP Replies(ARP回应报文),并且用bond的某一个slave的硬件地址改写ARP报文的源地址,使得本服务器对不同的设备使用不同的硬件地址。本服务器建立的连接的接收流量也是负载均衡的。当本机发送ARP Request时,bonding驱动通过ARP报文复制并保存节点的IP信息。当从其他节点接收到ARP Reply,bonding驱动获取节点的硬件地址并且会回应一个包含绑定好的slave的硬件地址的ARP Reply给发送的节点。用ARP协商的负载均衡的有一个问题是每次用bond的硬件地址广播ARP报文,那么其他节点发送的数据全部集中在一个slave上,处理ARP更新给其他所有节点的时候,每个节点会重新学习硬件地址,导致流量重新分配。当新加入一个slave或者一个非激活的slave重新激活的时候也会导致接收流量重新分配。接收流量负载是串行(轮转)的分配在bond的一组速率最高的slave上。

当一个链路重连或者一个新的slave加入的时候,bond会重新初始化ARP Replies给所有的客户端。updelay参数的值必须等于或者大于交换机的forwarding delay,以免ARP Replies被交换机阻塞。

先决条件:

    1.每个slave的基本驱动支持Ehtool获取速率状态。

    2. 基本驱动支持当设备打开时重新设置硬件地址。也要求每一个slave具有唯一的硬件地址。如果curr_active_slave失败,它的硬件地址被新选上的  curr_active_slave硬件地址来替换

另:mode=6他的工作机制是先占满eth0的网络,再占eth1的,,,以此类推,所以除非压力很大否则不会使用另一个 网口;

mode=6的好处就是eth0,eth1的mac地址是不同的,所以可以在同一台交换机上使用;

 

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

 

常用的有三种模式
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地址.(实测中mode0可以通过mac地址欺骗的方式在交换机不设置的情况下不太均衡地进行接收。)
 

mode5和mode6不需要交换机端的设置,网卡能自动聚合,因为做bonding的这两块网卡是使用不同的MAC地址。mode4需要支持802.3ad。mode0,mode2和mode3理论上需要静态聚合方式。

 

     1、查看bond模块:

         modprobe -l bond*        或者     modinfo bonding

     2、查看所有网卡:

       [master@uni-cloud ~]$ lspci | grep net 
       00:19.0 Ethernet controller: Intel Corporation 82579LM Gigabit Network Connection (rev 05) 
       05:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection 

 

   建议关闭NetworkManager:

    $chkconfig NetworkManager off

    $service NetworkManager stop

四 bonding的相关配置(生产环境mode=6的方式)

1 首先进入网卡文件配置目录  cd /etc/sysconfig/network-scripts/  

2 备份网卡配置文件cp ifcfg-eth0  ifcfg副本-eth0

3 拷贝cp ifcfg-eth0  ifcfg-bond0   

4 配置 bonding

1

2

3

4

5

6

7

8

9

10

#cat <<EOF >>ifcfg-bond0

DEVICE=bond0

BONDING_OPTS='miimon=100 mode=6'

BOOTPROTO=none

ONBOOT=yes

IPADDR=192.168.1.61

NETMASK=255.255.255.0

GATEWAY=192.168.1.1

USERCTL=no

EOF

配置网卡eth0、eth1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

#cat << EOF >>ifcfg-eth0

DEVICE=eth0

HWADDR=D0:50:99:C1:0E:83

TYPE=Ethernet

UUID=5eefe89c-0cbf-426c-987e-1b6ee1c54024

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=none


讯享网

MASTER=bond0

SLAVE=yes

USERCTL=no

EOF

 

#cat << EOF >>ifcfg-eth01

DEVICE=eth1

HWADDR=D0:50:99:C1:0E:81

TYPE=Ethernet

UUID=a71f51f5-c05b-4bcd-a618-bb09813be60e

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=none

MASTER=bond0

SLAVE=yes

USERCTL=no

EOF 

五: 加载bonding模块配置文件声明

1

2

3

#加载配置<br># cat /etc/modprobe.d/bond.conf

alias bond0 bonding<br># 修改bond模式的两种方式<br>1.cat /etc/modprobe.d/dist.conf

 options bond0 miimon=100 mode=6   <br>2 还有一种修改方式在ifcfg-bond0网卡配置文件追加<br>  BONDING_OPTS="mode=1 miimon=100"

1 #modprobe bonding      加载bonding配置

  service network restart 重启网卡

2 查看bond0 是否生效

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#cat /proc/net/bonding/bond0

Bonding Mode: adaptive load balancing

Primary Slave: None

Currently Active Slave: eth1

MII Status: up

MII Polling Interval (ms): 100

Up Delay (ms): 0

Down Delay (ms): 0

 

 

Slave Interface: eth0

MII Status: up

Speed: 1000 Mbps

Duplex: full

Link Failure Count: 1

Permanent HW addr: d0:50:99:c1:0e:83

Slave queue ID: 0

 

 

Slave Interface: eth1

MII Status: up

Speed: 1000 Mbps

Duplex: full

Link Failure Count: 0

Permanent HW addr: d0:50:99:c1:0e:81

Slave queue ID: 0 

3 开机自启脚本配置声明

1

2

3

4

cat /etc/rc.local

#!/bin/bash

touch /var/lock/subsys/local

ifenslave  bond1 eth1 eth2  

注意:在重启network服务时需关闭NetworkManager

#systemctl stop NetworkManager.service     # 停止NetworkManager服务

#systemctl disable NetworkManager.service  # 禁止开机启动NetworkManager服务

#systemctl isdisable NetworkManager.service  #查看NetworkManager服务是否关闭 

1

2

3

4

5

原因:

在CentOS系统上,目前有NetworkManager和network两种网络管理工具。如果两种都配置

会引起冲突,而且NetworkManager在网络断开的时候,会清理路由,如果一些自定义的路

由,没有加入到NetworkManager的配置文件中,路由就被清理掉,网络连接后需要自定义添

加上去。

五 测试:

1 在测试高可用时:

拔掉一根网线看是否还能ping通bond0

2 在测试流量带宽时 

如果两张网卡为千兆带宽时,我们应同时准备两台同等带宽的服务器同时测试

准备: 

软件:iperf3 参考博客:https://www.cnblogs.com/yingsong/p/5682080.html

命令 服务端:  iperf –s -u –p 12345 –i 1

   客户端: iperf -c server-ip -p server-port -i 1 -t 10 -b(两台客户端服务器同时执行)

结果:如果服务端的带宽大于1000M且拔掉一根网线还能成功,证明bonding配置成功

 

Bonding Mode: adaptive load balancingPrimary Slave: NoneCurrently Active Slave: eth1MII Status: upMII Polling Interval (ms): 100Up Delay (ms): 0Down Delay (ms): 0

Slave Interface: eth0MII Status: upSpeed: 1000 MbpsDuplex: fullLink Failure Count: 1Permanent HW addr: d0:50:99:c1:0e:83Slave queue ID: 0

Slave Interface: eth1MII Status: upSpeed: 1000 MbpsDuplex: fullLink Failure Count: 0Permanent HW addr: d0:50:99:c1:0e:81Slave queue ID: 0

 

注:文章摘自网络汇总,如有雷同,纯属巧合。

小讯
上一篇 2025-01-19 22:33
下一篇 2025-03-11 21:32

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/129990.html