基于linux的bond技术

配置linux网卡bond

1. Bond介绍

1.1目的

通过网口绑定(bond)技术,实现网口冗余,从而达到高可用高可靠的目的。

1.2原理

Bond有两种典型的模式:主备,负载均衡。无论哪种模式,Bonding技术都是通过更改Linux的网口驱动,来实现网口故障后平滑切换的,要实现冗余技术采用mode 1模式

1.2.1主备模式
主备模式下,Linux Bonding实现会将Bond的两个slave网口的MAC地址改为BondMAC地址,而BondMAC地址是Bond创建启动后,主用slave网口的MAC地址。

当住用网口故障后,Bond会切换到备用网口,切换过程中,上层的应用是无感知不受影响的,因为Bond在驱动层,会接管上层应用的数据包,缓存起来等备用网卡起来后再通过备用网卡发送出去。当然,前提是切换时间很短,否则缓冲区是会溢出的,溢出后就开始丢包了。

1.2.2负载均衡模式
负载均衡模式下,Linux Bonding实现可以保持两个slave网口的MAC地址不变,BondMAC地址是其中一个网卡的Bond MAC地址的选择是根据Bond自己实现的一个算法来的,具体如何选择还没有研究。

当然,这里要重点说明的是,Bond负载均衡模式下,要求交换机做配置,是的两个slave网口能够互通,否则的话,丢包会很厉害,基本没法使用。这个是因为Bond的负载均衡模式算法,会将包在两个网口之间传输以达到负载均衡。

 

1.3 Bond的七种模式介绍

网卡绑定mode共有七种(0~6) bond0bond1bond2bond3bond4bond5bond6

常用的有三种

mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。

mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。

mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定。

需要说明的是如果想做成mode 0的负载均衡,仅仅设置这里options bond0 miimon=100 mode=0是不够的,与网卡相连的交换机必须做特殊配置(这两个端口应该采取聚合方式),因为做bonding的这两块网卡是使用同一个MAC地址.从原理分析一下(bond运行在mode 0下):

mode 0bond所绑定的网卡的IP都被修改成相同的mac地址,如果这些网卡都被接在同一个交换机,那么交换机的arp表里这个mac地址对应的端口就有多 个,那么交换机接受到发往这个mac地址的包应该往哪个端口转发呢?正常情况下mac地址是全球唯一的,一个mac地址对应多个端口肯定使交换机迷惑了。所以 mode0下的bond如果连接到交换机,交换机这几个端口应该采取聚合方式(cisco称为 ethernetchannelfoundry称为portgroup),因为交换机做了聚合后,聚合下的几个端口也被捆绑成一个mac地址.我们的解 决办法是,两个网卡接入不同的交换机即可。

mode6模式下无需配置交换机,因为做bonding的这两块网卡是使用不同的MAC地址。

七种bond模式说明:

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

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

 

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

特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bondMAC地址是唯一的,以避免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 aggregationIEEE 802.3ad 动态链接聚合)

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

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

必要条件:

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

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

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

 

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

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

该模式的必要条件: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.3配置参数介绍

bonding +[parm] +[parm]....

在配置启动文件时会用到(全英文请大家自己翻译一下)

例如:bonding miimon=100 mode=1 fail_over_mac=1

max_bonds Max number of bonded devices (int)

tx_queues Max number of transmit queues (default = 16) (int)

num_grat_arp  Number of gratuitous ARP packets to send on failover event (int)

num_unsol_na Number of unsolicited IPv6 Neighbor Advertisements packets to send on failover event (int)

miimon Link check interval in milliseconds (int)

updelay Delay before considering link up, in milliseconds (int)

downdelay Delay before considering link down, in milliseconds (int)

use_carrier Use netif_carrier_ok (vs MII ioctls) in miimon; 0 for off, 1 for on (default) (int)

mode Mode of operation; 0 for balance-rr, 1 for active-backup, 2 for balance-xor, 3 for broadcast, 4 for 802.3ad, 5 for balance-tlb, 6 for balance-alb (charp)

primary Primary network device to use (charp)

primary_reselect Reselect primary slave once it comes up; 0 for always (default), 1 for only if speed of primary is better, 2 for only on active slave failure (charp)

lacp_rate:LACPDU tx rate to request from 802.3ad partner; 0 for slow, 1 for fast (charp)

ad_select 803.ad aggregation selection logic; 0 for stable (default), 1 for bandwidth, 2 for count (charp)

xmit_hash_policy balance-xor and 802.3ad hashing method; 0 for layer 2 (default), 1 for layer 3+4, 2 for layer 2+3 (charp)

arp_interval arp interval in milliseconds (int)

arp_ip_target arp targets in n.n.n.n form (array of charp)

arp_validate validate src/dst of ARP probes; 0 for none (default), 1 for active, 2 for backup, 3 for all (charp)

fail_over_mac For active-backup, do not set all slaves to the same MAC; 0 for none (default), 1 for active, 2 for follow (charp)

all_slaves_active Keep all frames received on an interfaceby setting active flag for all slaves; 0 for never (default), 1 for always. (int)

resend_igmp Number of IGMP membership reports to send on link failure (int)


 

 

 

2. 环境说明

操作系统:CentOS 6.5

bond版本:version:   3.6.0

安装bond的网卡:eth1,eth2

绑定后的虚拟口是:bond0

bond0的IP:1.1.1.8

采用 mode 1 模式配置bond

 

3. 操作步骤

3.1.1. 备份原有IP的配置文件

cd /etc/sysconfig/network-scripts/

mv ifcfg-eth1  bak_ifcfg-eth1

mv ifcfg-eth2  bak_ifcfg-eth2

 

3.1.2. 配置网卡(bond0,eth1,eth2

配置eth1vi ifcfg-eth1

cd /etc/sysconfig/network-scripts/

vi ifcfg-eth1

DEVICE=eth1

BOOTPROTO=none

MASTER=bond0

SLAVE=yes

 

 

配置eth2

vi ifcfg-eth2

DEVICE=eth2

BOOTPROTO=none

MASTER=bond0

SLAVE=yes

 

配置bond0

vi ifcfg-bond0

DEVICE=bond0

ONBOOT=yes

IPADDR=1.1.1.8

NETMASK=255.0.0.0

USERCTL=no

BOOTPROTO=none

IPV6INIT=no

      

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

3.1.3.1. 在bond配置文件中增加启动命令及参数

vi /etc/modprobe.d/bonding.conf

#追加

alias bond0 bonding

options bonding miimon=100 mode=1 fail_over_mac=1

 

bond的配置模式及参数介绍见本章节末

3.1.3.2. 加载模块

注:(重启系统后就不用手动再加载了)

modprobe bonding

确认模块是否加载成功:

lsmod | grep bonding

bonding 100065 0

 

3.1.3.3. 重启一下网络,确认配置状况

/etc/init.d/network restart

cat /proc/net/bonding/bond0

查看到的信息如下:

Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: fault-tolerance (active-backup) (fail_over_mac active)

Primary Slave: None

Currently Active Slave: eth2

MII Status: up

MII Polling Interval (ms): 100

Up Delay (ms): 0

Down Delay (ms): 0

 

Slave Interface: eth2

MII Status: up

Speed: 1000 Mbps

Duplex: full

Link Failure Count: 0

Permanent HW addr: 00:0c:29:84:05:ad

Slave queue ID: 0

 

Slave Interface: eth1

MII Status: up

Speed: 1000 Mbps

Duplex: full

Link Failure Count: 0

Permanent HW addr: 00:0c:29:84:05:a3

Slave queue ID: 0

 

查看网卡设备ifconfig | grep HWaddr

bond0     Link encap:Ethernet  HWaddr 00:0C:29:84:05:AD  

eth0      Link encap:Ethernet  HWaddr 00:0C:29:84:05:99  

eth1      Link encap:Ethernet  HWaddr 00:0C:29:84:05:A3  

eth2      Link encap:Ethernet  HWaddr 00:0C:29:84:05:AD  

 

从上面的确认信息中,我们可以看到3个重要信息:

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

2.现在Active状态的网口是eth2

3.bond0MACeth2相同,且eth1eth2MAC不同(如果三个网卡的MAC都相同则说明配置3.1.2.1配置的模式或参数没设置正确)

 

4. 环境测试

任意拔掉一根网线,然后再访问你的服务器,看网络是否还是通的。

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值