注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天马行空

宠辱不惊,闲看庭前花开花落;去留无意,漫观天外云展云舒……

 
 
 

日志

 
 
 
 

linux bond 负载均衡  

2012-01-05 13:26:21|  分类: LINUX |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

第一步:配置设定文件 

1) 建立虚拟网络接口ifcfg-bond0的配置文件。

DEVICE=bond0

ONBOOT=yes

IPADDR=x.x.x.x  #配置IP地址

NETMASK=x.x.x.x # 配置子网掩码

GATEWAY=x.x.x.x # 配置网关

BOOTPROTO=none

USERCTL=no

DNS1=8.8.8.8

DNS2=8.8.4.4

BONDING_OPTS="mode=6 miimon=100"

#BONDING_OPTS="mode=1 arp_interval=60 arp_ip_target=+192.168.110.1"  

#miimon是指定隔多长时间进行链路监测,单位是ms  

#mode是表示绑定口的工作模式,有0-6共7种,常用的是0和1 ,6,  

#mode=0表示是round-robin的方式, 同时工作工作在负载均衡状态   

#mode=2 表示是balance-xor,表示提供负载均衡和和耐故障功能  

#mode=3表示是broadcast,广播策略,耐故障功能。把数据以广播的方式,发给包含在该bond口内的所有网口

#mode=4表示是802.3ad  ,IEEE 802.3ad动态链接集合

#mode=5表示是自动适应传输负载均衡策略。

#mode=6表示是自动适应负载均衡策略


2). 修改/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0  

USERCTL=no  

ONBOOT=yes  

MASTER=bond0#指定master就是bond0  

SLAVE=yes#这个最好是显式的给出  

BOOTPROTO=none #启动时不使用任何的协议  


3). 修改/etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1  
USERCTL=no  
ONBOOT=yes  
MASTER=bond0#指定master就是bond0  
SLAVE=yes#这个最好是显式的给出  
BOOTPROTO=none #启动时不使用任何的协议  


4). 修改/etc/modprobe.conf

加入以下内容

alias bond0 bonding

 第二步:加载bonding模块 

1) 加载模块

modprobe bonding

2)确认模块是否加载成功

linux bond 负载均衡 - 547502462 - 天马行空
 

第三步:确认网络

1. 重启网络

service network restart

2. 查看状态

linux bond 负载均衡 - 547502462 - 天马行空
 

从上图中可以看出 bond0 绑定了两个网卡 eth0 eth1

绑定模式为6 ,自适应负载均衡


引用内容开始

引用自Linux网口绑定 Litvip Linux 爱好者 

如果我们要设置多个bond口,比如物理网口eth0和eth1组成bond0,eth2和eth3组成bond1,
那么网口设置文件的设置方法和上面第1步讲的方法相同,只是/etc/modprobe.d/bonding.conf的设定就不能像下面这样简单的叠加了:

1
2
3
4
alias bond0 bonding
options bonding mode=1 miimon=200
alias bond1 bonding
options bonding mode=1 miimon=200

正确的设置方法有2种:
第一种,你可以看到,这种方式的话,多个bond口的模式就只能设成相同的了:

1
2
3
alias bond0 bonding
alias bond1 bonding
options bonding max_bonds=2 miimon=200 mode=1

第二种,这种方式,不同的bond口的mode可以设成不一样:

1
2
3
alias bond0 bonding
options bond0 miimon=100 mode=1
install bond1 /sbin/modprobe bonding -o bond1 miimon=200 mode=0

仔细看看上面这2种设置方法,现在如果是要设置3个,4个,甚至更多的bond口,你应该也会了吧!

引用结束 


Bonding驱动选项 


Bonding驱动的选项是通过在加载时指定参数来设定的。可以通过insmod或modprobe命令的命令行参数来指定,但通常在/etc /modules.conf或/etc/modprobe.conf配置文件中指定,或其他的配置文件中(下一节将会提及几个具体的细节)


下面列出可用的bonding驱动参数。如果参数没有指定,驱动会使用缺省参数。刚开始配置bond的时候,建议在一个终端窗口中运行"tail -f /var/log/messages"来观察bonding驱动的错误信息【译注:/var/log/messages一般会打印内核中的调试信息】。


有些参数必须要正确的设定,比如miimon、arp_interval和arp_ip_target,否则在链接故障时会导致严重的网络性能退化。很少的设备不支持miimon,因此没有任何理由不使用它们。


有些选项不仅支持文本值的设定,出于兼容性的考虑,也支持数值的设定,比如,"mode=802.3ad"和"mode=4"效果是一样的。


具体的参数列表:


arp_interval


指定ARP链路监控频率,单位是毫秒(ms)。如果APR监控工作于以太兼容模式(模式0和模式2)下,需要把switch(交换机)配置为在所有链路上均匀的分发网络包。如果switch(交换机)被配置为以XOR方式分发网络包,所有来自ARP目标的应答将会被同一个链路上的其他设备收到,这将会导致其他设备的失败。ARP监控不应该和miimon同时使用。设定为0将禁止ARP监控。缺省值为0。


arp_ip_target


指定一组IP地址用于ARP监控的目标,它只在arp_interval > 0时有效。这些IP地址是ARP请求发送的目标,用于判定到目标地址的链路是否工作正常。该设定值为ddd.ddd.ddd.ddd格式。多个IP地址通过逗号分隔。至少指定一个IP地址。最多可以指定16个IP地址。缺省值是没有IP地址。


downdelay


指定一个时间,用于在发现链路故障后,等待一段时间然后禁止一个slave,单位是毫秒(ms)。该选项只对miimon监控有效。downdelay值应该是miimon值的整数倍,否则它将会被取整到最接近的整数倍。缺省值为0。


lacp_rate


指定在802.3ad模式下,我们希望的链接对端传输LACPDU包的速率。可能的选项:


slow 或者 0

请求对端每30s传输LACPDU


fast 或者 1

请求对端每1s传输LACPDU,缺省值是slow


max_bonds


为bonding驱动指定创建bonding设备的数量。比如,如果max_bonds为3,而且bonding驱动还没有加载,那么bond0,bond1,bond2将会被创建。缺省值为1。


miimon


指定MII链路监控频率,单位是毫秒(ms)。这将决定驱动检查每个slave链路状态频率。0表示禁止MII链路监控。100可以作为一个很好的初始参考值。下面的use_carrier选项将会影响如果检测链路状态。更多的信息可以参考“高可靠性”章节。缺省值为0。


mode


指定bonding的策略。缺省是balance-rr (round robin,循环赛)。可选的mode包括:


balance-rr 或者 0


Round-robin(循环赛)策略:按顺序传输数据包,从第一个可用的slave到最后一个可用的slave。该模式提供了负载均衡和容错机制。


active-backup 或者 1


Active-backup(激活-备份)策略:只有一个slave是激活的(active)。其他的slave只有在当前激活的slave故障后才会变为激活的(active)。从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。


在bonding 2.6.2和以后的版本中,如果在active-backup模式下出现failover【译注:指一个slave发生故障,另一个slave变为激活的设备】,bonding将会在新的slave上发出一个或多个ARP请求,其中一个ARP请求针对bonding master接口及它上面配置的每个VLAN接口,从而保证该接口至少配置了一个IP地址。针对VLAN接口的ARP请求将会被打上相应的VLAN id。


----------------------------------------------------------------------------------------

        In bonding version 2.6.2 or later, when a failover

        occurs in active-backup mode, bonding will issue one

        or more gratuitous ARPs on the newly active slave.

        One gratuitous ARP is issued for the bonding master

        interface and each VLAN interfaces configured above

        it, provided that the interface has at least one IP

        address configured. Gratuitous ARPs issued for VLAN

        interfaces are tagged with the appropriate VLAN id.

----------------------------------------------------------------------------------------


该模式提供了容错机制。下面的primary选项将会影响该工作模式的行为。


balance-xor 或者 2


XOR策略:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过xmit_hash_policy选项指定,下文将会对之介绍。该模式提供了负载均衡和容错机制。


broadcast 或者 3


Broadcase(广播)策略:在每个slave接口上传输每个数据包。该模式提供了容错机制。


802.3ad 或者 4


IEEE 802.3ad Dynamic link aggregation(动态链接聚合)。创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。


外出流量的slave选举是基于传输hash策略,该策略可以通过xmit_hash_policy选项从缺省的XOR策略改变到其他策略。需要注意的是,并不是所有的传输策略都是802.3ad适应的。不同的实现可能会有不同的适应性。


必要条件:


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


2. switch(交换机)支持IEEE 802.3ad Dynamic link aggregation。

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


balance-tlb 或者 5 

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

必要条件:


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


balance-alb 或者 6


自适应均衡负载:该模式包含了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接管。


primary


指定哪个slave成为主设备(primary device),取值为字符串,如eth0,eth1等。只要指定的设备可用,它将一直是激活的slave。只有在主设备(primary device)断线时才会切换设备。这在希望某个slave设备优先使用的情形下很有用,比如,某个slave设备有更高的吞吐率。


primary选项只对active-backup模式有效。


updelay


指定当发现一个链路恢复时,在激活该链路之前的等待时间,以毫秒计算。该选项只对miimon链路侦听有效。updelay应该是miimon值的整数倍,如果不是,它将会被向下取整到最近的整数。缺省值为0。


use_carrier


指定miimon是否需要使用MII或者ETHTOOL ioctls还是netif_carrier_ok()来判定链路状态。MII或ETHTOOL ioctls更低效一些,而且使用了内核里废弃的旧调用序列;而netif_carrier_ok()依赖于设备驱动来维护状态(判断载波),在本文写作时,大多数但不是全部设备驱动支持这个特性。


如果bonding总是认为链路是通的,但实际上是断的,这有可能是由于你的网络设备驱动不支持netif_carrier_on/off。因为 netif_carrier的缺省状态是"carrier on",因此如果驱动不支持netif_carrier,则会显示链路永远正常。在这种情况下,把use_carrier设为0,从而让bonding使用MII/ETHTOOL ictl来判定链路状态。


该选项设为1会使用netif_carrier_ok(),而设为0则会使用废弃的MII/ETHTOOL ioctls,缺省值是1。


xmit_hash_policy


在balance-xor和802.3ad模式下选择不同的hash模式,以用于slave选举。可能的取值有:


layer2


使用硬件MAC地址的XOR来生成hash。公式为:

(源MAC地址 XOR 目的MAC地址)% slave数目


该算法会将某个网络对(network peer)上所有的流量全部分配到同一个slave上。


layer3+4


该策略在可能的时候使用上层协议的信息来生成hash。这将允许特定网络对(network peer)的流量分摊到多个slave上,尽管同一个连接(connection)不会分摊到多个slave上。


针对未分片的TCP和UDP包的计算公式为:


((源端口 XOR 目的端口) XOR ((源IP XOR 目的IP) AND 0xFFFF) % slave数目


对于已分片TCP或UDP包,以及其他的IP包,源端口和目的端口的信息被忽略了;对于非IP流量,采用和layer2一样的hash策略。


该策略期望模仿某些交换机的行为,比如带PFC2的Cisco交换机,以及某些Foundry和IBM的产品。


该算法不完全适应802.3ad,一个单一的TCP或UDP会话同时包含有分片和未分片的包将会导致包在两个接口上传递,这将会导致投递乱序。大多数流量不会满足这种条件,正如TCP很少分片,而大多数UDP流量不会在长期的会话中存在。其他的802.3ad实现有可能不能容忍这样的不适应性。


缺省设置是layer2。该选项在bonding 2.6.3加入,在早期版本中,该参数不存在,只只是layer2策略。

  评论这张
 
阅读(1347)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018