linux bonding三

总结一下,在网关型配置下,来自和发自bond设备的流量将会到网络上的同一个对端MAC地址(网关本身,比如路由器),而不管它的最终目的地是什么。在本地型配置下,流量直接来自或发往最终目的地,这样,每个目的地(Host B,Host C)将会通过它们独立的MAC地址被指定。

网关型和本地型网络配置的差别很重要,是因为很多负载均衡模式使用本地网络源和目的地的MAC地址来做处负载均衡的决定。每种模式的具体行为在下文描述:

12.1.1 单交换机拓扑下的MT Bonding模式选择
-----------------------------------------

这个配置是最容易配置和理解的,尽管你不得不决定哪种bonding模式对于你的需求最适合。每种模式的折衷如下所示:

balance-rr: 该模式可以允许某个单一的TCP/IP连接在多个接口上分割(stripe)流量,而且该模式是唯一支持该功能的模式。因此它也是唯一的允许单个TCP /IP流利用多于一个的接口来提高吞吐量的模式。然而这导致一定的开销,分割通常导致对端系统接收数据时乱序,从而导致TCP/IP拥堵控制机制发生作用,通常通过重发分段。

当然也可以调整TCP/IP的拥塞限制,通过修改sysctl的net.ipv4.tcp_reordering参数即可。通常的缺省值时3,最大可用值为127。对于一个四个接口的balance-rr模式的bond,单个TCP/IP流不应期望使用超过大概2.3个接口来提高吞吐量,即使调整过 tcp_reording的值。

请注意,这里乱序传递只在发送方和接收方都利用多个接口bond时发生。考虑这样的配置,balance-rr模式bond流入单个高容量网络通道(比如,多个100Mb/sec以太网通过具备etherchannel功能的路由器流入一个千兆以太网),这时,来自多个100Mb设备的流量发往连接着千兆设备的目的地时,将意识不到数据包的乱序。然而,来自千兆设备发往多个100Mb设备的流量,可能看到也可能看不到流量乱序,这依赖于交换机的均衡策略。很多交换机不支持分割流量的模式(而是基于IP或MAC级地址来选择一个端口),对于这些设备,从千兆设备流向多个100Mb设备时只会利用一个接口。

如果你想使用TCP/IP以外的协议,比如UDP,而且你的应用能够容忍乱序投递,那么这种模式可以为单个流数据包提供线性性能增长,随着加入到bond里的接口数量。

该模式要求交换机有适当的端口配置为“etherchannel”或“trunking”。

active-backup: 对于active-backup模式,在这种网络拓扑下使用并没有什么特别的好处,因为所有的未激活备份设备都作为primary连接到同样的对端。这种情况下,一种负载均衡模式(利用链路监控)将提供同样的网络可靠性,但增加了可用带宽。此外,active-backup模式不要求交换机的任何配置,因此如果当前硬件不支持任何负载均衡模式时,该模式就很有用了。

balance-xor: 该模式将限定流量,以保证到达特定对端的流量总是从同一个接口上发出。既然目的地是通过MAC地址来决定的,因此该模式在“本地”网络配置(上文曾提及)下可以工作得很好。如果所有流量是通过单个路由器(比如上文提及的“网关”型网络配置),那该模式就不是最好的选择。

和balance-rr一样,交换机端口需要能配置为“etherchannel”或“trunking”。

broadcast: 和active-backup类似,在这种网络拓扑下该模式没有什么特别的优点。

802.3ad: 对于这种网络拓扑,该模式是一个很好的选择。802.3ad模式是IEEE标准,因此所有实现了802.3ad的对端都可以很好的互操作。802.3ad 协议包括聚合的自动配置,因此只需要很少的对交换机的手动配置(要指出的是,只有某些设备才能使用802.3ad)。802.3ad标准也要求帧按顺序(一定程度上)传递,因此通常单个连接不会看到包的乱序。802.3ad也有些缺点:标准要求所有设备在聚合操作时,要在同样的速率和双工模式,而且,和除了balance-rr模式外的其它bonding负载均衡模式一样,任何连接都不能使用多于一个接口的带宽。

此外,linux bonding的802.3ad实现通过对端来分发流量(通过MAC地址的XOR值),因此在“网关”型配置下,所有外出(Outgoing)流量将使用同一个设备。进入(Incoming)的流量也可能在同一个设备上终止,这依赖于对端802.3ad实现里的均衡策略。在“本地”型配置下,路两将通过 bond里的设备进行分发。

最后,802.3ad模式要求使用MII监控,因此,ARP监控在该模式下不可用。

balance-tlb: balance-tlb模式通过对端均衡外出(outgoing)流量。既然它是根据MAC地址进行均衡,在“网关”型配置(如上文所述)下,该模式会通过单个设备来发送所有流量,然而,在“本地”型网络配置下,该模式以相对智能的方式(不是balance-xor或802.3ad模式里提及的XOR方式)来均衡多个本地网络对端,因此那些数字不幸的MAC地址(比如XOR得到同样值)不会聚集到同一个接口上。

不像802.3ad,该模式的接口可以有不同的速率,而且不需要特别的交换机配置。不利的一面在于,该模式下所有进入的(incoming)流量会到达同一个接口;该模式要求slave接口的网络设备驱动有某种ethtool支持;而且ARP监控不可用。

balance-alb: 该模式有着所有balance-tlb有的功能(以及局限性),同时,它还会均衡从本地网络对端进入的(incoming)流量(如上文的Bonding模块选项一节所述)。

该模式唯一额外的不利在于,网络设备驱动必须支持在设备启动时改变硬件地址。

12.1.2 单交换机拓扑下的MT链路监控
---------------------------------

链路监控的选择很大程度上依赖于你选择的bond模式。最先进的负载均衡模式不支持ARP监控,因此就只能使用MII监控(而这不能提供如ARP监控那样的高阶端到端确认)。

12.2 多交换机拓扑下的最大吞吐量
---------------------------------

可能利用多个交换机来优化吞吐量,当它们并行地配置为两个或更多系统中间的一个独立的网络,例如:

                       +-----------+
                       | Host A   | 
                       +-+---+---+-+
                         |   |   |
                +--------+   |   +---------+
                |            |             |
         +------+---+ +-----+----+ +-----+----+
         | Switch A | | Switch B | | Switch C |
         +------+---+ +-----+----+ +-----+----+
                |            |             |
                +--------+   |   +---------+
                         |   |   |
                       +-+---+---+-+
                       | Host B   | 
                       +-----------+

在这种配置情况下,交换机间相互隔离。应用这种拓扑的原因可能是,对于一个有很多主机的独立网络(比如配置为高性能的Cluster系统),使用多个小型交换机可以比使用一个大型交换机要节省费用,比如,在有24个主机的网路里,三个24口交换机会比一个72口交换机的便宜得多。

如果要访问到这个网络外面,可以使用一个独立的主机,它有一个附加的网路设备连接到外部网络,这个主机可以充当一个网关的作用。

12.2.1 多交换机拓扑下的MT Bonding模式选择
-----------------------------------------

实际操作时,典型的应用于这种类型的bonding模式时balance-rr。历史上,在这种网络配置下,通常的关于投递数据包乱序的警告可以通过使用某些网络适配器解决,这些适配器不进行任何包组合(通过使用NAPI,或者因为设备本身只在某些数量的包到达后才产生中断)。当使用这个功能时,balance-rr模式允许两个主机间的独立连接有效地利用多于一个接口的带宽。

12.1.2 多交换机拓扑下的MT链路监控
---------------------------------

同样的,在实际操作中,对于这种配置最常使用MII监控,由于效率相对于可用性更优先。ARP监控在这种拓扑下也可以工作,但由于它的侦测数量随着引入系统的数量而增长(记得网络里的每个主机都需要配置),因此它相对于MII监控的优点就不值一提了。

13. 交换机行为的问题
=================================

13.1 链路建立和故障恢复的延时
---------------------------------

某些交换机会出现不合适的行为,关于交换机报告的链路启动和关闭的时间。

首先,当链路启动时,某些交换机可能指示链路已经启动(载波有效),但在一段时间里并没有把流量从这个接口上通过,这个延迟一般是由于某种类型的自协商或路由协议,但也可能在交换机初始化时发生(比如在交换机失败后恢复时),如果你发现这是个问题,给bonding模块的updelay选项指定一个合适的值,用于指定相关接口的延时值。

其次,某些交换机可能一次或多次“反弹”(bounce)链路状态,当链路改变状态时。这最通常在交换机初始化时发生,同样,一个合适的updelay值可以解决问题。

要注意的是:当bonding接口没有激活的链路,驱动会立刻重用第一个链路,即使指定了updelay参数(这时updelay被忽略),如果有 slave接口等待updelay超时,第一个进入该状态的接口会立刻被重用,这可以减少网络的断线时间,如果updelay值被设得过大,而且由于这只在没有连接时发生,就算忽略updelay也没有任何问题。

其它的关于交换机时间的考虑在于,如果交换机需要很长时间进入备份模式,在一个链路断开后不要立刻激活备份接口可能更合适。错误恢复可以通过指定bonding模块的downdelay选项来指定延时。

13.2 Incoming包重复
---------------------------------

有时你会发现在bonding设备第一次使用时,或在它休眠了一段时间后,会发生短暂的重复数据包爆发。这很容易通过"ping"网络中的其它主机来发现,可以发现ping的输出中有重复标记(通常每个slave重复一个)。

比如,一个在active-backup模式下的bond,有五个slave都连接到同一个交换机,输出可能如下:

# ping -n 10.0.4.2
PING 10.0.4.2 (10.0.4.2) from 10.0.3.10 : 56(84) bytes of data.
64 bytes from 10.0.4.2: icmp_seq=1 ttl=64 time=13.7 ms
64 bytes from 10.0.4.2: icmp_seq=1 ttl=64 time=13.8 ms (DUP!)
64 bytes from 10.0.4.2: icmp_seq=1 ttl=64 time=13.8 ms (DUP!)
64 bytes from 10.0.4.2: icmp_seq=1 ttl=64 time=13.8 ms (DUP!)
64 bytes from 10.0.4.2: icmp_seq=1 ttl=64 time=13.8 ms (DUP!)
64 bytes from 10.0.4.2: icmp_seq=2 ttl=64 time=0.216 ms
64 bytes from 10.0.4.2: icmp_seq=3 ttl=64 time=0.267 ms
64 bytes from 10.0.4.2: icmp_seq=4 ttl=64 time=0.222 ms

这不是由于bonding驱动的错误,这是很多交换机在更新它们的MAC转发表的一个副作用。开始的时候,交换机没有关联包里的MAC地址到一个特定的交换机端口,因此它可能把这个包发送给所有的端口,直到MAC转发表被更新。既然bond绑定的接口可能占有一个交换机上的多个端口,当交换机(临时地)给所有端口发送流量时,bond设备就会收到同一个包的多份复制(每个slave设备一份)。

重复包行为是由交换机决定的,某些交换机有这个问题,而有些没有。如果交换机有这个问题,你可能清楚MAC转发表来发现它(在大多数Cisco交换机上,特权指令“clear mac address-table dynamic”可以清楚)。

14. 硬件相关的考量
=================================

本节包含一些额外的信息,用于配置特定硬件平台上的bonding,或者针对特别的交换机或其它设备的bonding配置。

14.1 IBM刀片服务器(BladeCenter)
---------------------------------

适用于JS20和类似的系统。

在JS20刀片服务器上,bonding驱动只支持balance-rr,active-backup,balance-tlb和balance-alb模式,这主要是由于刀片服务器内部的网络拓扑所决定的,如下文所述。

JS20网络适配器信息
---------------------------------

所有的JS20系列有两个Broadcom千兆以太网卡集成在planar(IBM这么称呼“主板”)上。在刀片的底盘(chassis)上,所有 JS20刀片的eth0端口被硬连接到#1 I/O模块,类似的,所有eth1端口被连接到#2 I/O模块。一个附加的Broadcom daughter卡可以被安装到JS20上来提供两个或更多千兆以太网卡,这些端口,也就是eth2/eth3等等,相应地被连接到#3和#4 I/O模块。

每个I/O模块可能包含一个交换机后者一个passthrough模块(它可以让端口直连到外部的交换机)。某些bonding模式要求特定的刀片内部网络拓扑以正常工作,如下文。

更多的刀片相关的网络信息可以在IBM红宝书上找到(www.ibm.com/redbooks):

"IBM eServer BladeCenter Networking Options"
"IBM eServer BladeCenter Layer 2-7 Network Switching"

刀片网络配置
---------------------------------

因为刀片可以有非常多的方法进行配置,这里的讨论将主要针对最基本的一些配置情况。

通常,在1和2 I/O模块会里使用以太交换模块(Ethernet Switch Modules,ESM),这时,JS20的eth0和eth1端口将会连接到不同的内部交换机上(在对应的I/O模块上)。

passthrough模块(OPM或CPM,指Optical Passthrough Modules或Copper Passthrough Modules)直接连接I/O模块到外部的交换机,通过使用#1和#2 I/O模块里的passthrough模块,JS20的eth0和eth1接口可以被重定向到外部的网络,并连接到一个外部的交换机上。

依赖于ESM和PM的混合,展现给bonding的网络可能是一个单交换机拓扑(所有都是PM),或者是一个多交换机拓扑(一个或多个ESM,0个或多个PM),也可能把ESM连在一起,产生一个更像上文“多Switch下的高可靠性”一节描述的例子的配置。

特定模式的需求
---------------------------------

balance-rr模式要求对bond中的设备使用PM,所有设备都连接到外部交换机上,那些交换机在对应的端口必须被配置为“etherchannel”或“trunking”,正如balance-rr通常使用时的要求一样。

balance-alb和balance-tlb模式可以和ESM或PM(或者混合)一起工作,唯一的要求是:对这些模式,所有的网络接口必须能够到达所有通过bonding设备的流量所对应的目的地址(也就是,网络必须会聚到刀片外部的一点)。

active-backup模式没有特别的需求。

链路监控的问题
---------------------------------

当使用ESM时,只有ARP监控能可靠地监测到到外部交换机的链路断开,这一点也不出乎意料,但刀片cabinet考试建议“外部的”网络端口是系统的以太端口,如果这样的话,在这些“外部的”端口和JS20系统的设备间应该存在一个交换机。MII监控只能监测ESM和JS20系统间的链路异常。

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

When an Ethernet Switch Module is in place, only the ARP
monitor will reliably detect link loss to an external switch. This is
nothing unusual, but examination of the BladeCenter cabinet would
suggest that the "external" network ports are the ethernet ports for
the system, when it fact there is a switch between these "external"
ports and the devices on the JS20 system itself. The MII monitor is
only able to detect link failures between the ESM and the JS20 system.

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

当使用PM时,MII监控可以监控到“外部”端口的异常,因为这些“外部”端口是直连到JS20系统的。

其它考虑
---------------------------------

Serial Over LAN(SoL,局域网上的串口连接)链路只能通过主以太(eth0)建立,因此如果eth0链路断开将会导致SoL连接的断开,它不会被通过其它网络流量来恢复,因此SoL系统超出了bonding驱动的控制范围。

在使用bonding时,有可能需要关闭交换机(内部ESM,或外部交换机)的生成树功能,来避免错误恢复的延迟问题。

15. 常见问题(FAQ)
=================================

1. 它是否是SMP(对称多处理器)安全?

是的,老的2.0.xx版本的bonding补丁不是SMP安全的,但新的驱动从一开始就被设计为SMP安全的。

2. 它需要哪种类型的网卡?

任何ethernet类型的网卡都可以(你甚至可以使用混合的网卡:比如一块Intel EtherExpress PRO/100和一块3com 3c905b)。对大多数模式而言,设备并不需要有同样的速度。

3. 我可以创建多少个bonding设备?

没有限制。

4. 一个bonding设备最多有多少个slave设备?

这只受限于Linux支持的网络接口的数量和/或系统中可安插的网卡数量。

5. 当slave连接断开时会发生什么?

如果链路监控被启用,断开的设备将会被禁用,active-backup模式会切换到一个备份的链路,其他模式会忽略掉断开的链路。但这个链路依然会被监控以发现它是否恢复,当链路恢复时它会重新加入bond(不管哪种工作模式),参见“高可靠性”一节以及每种工作模式的文档以获得更多信息。

链路监控可以通过miimon或者arp_interval参数启用(在上文的模块参数一节中有描述)。通常,miimon通过监控底层网络驱动获得的载波状态来判定网络状态,而arp监控(arp_interval)通过判断本地网络里相邻主机的连通性来判定。

如果链路监控没有启用,bonding驱动不会监测到链路故障,它会假定链路一直是可用的,这有可能会导致丢包,而且会导致性能的下降,确切的性能下降依赖于bonding的模式和网络的配置。

6. bonding可以被用于"高可用性"(High Availability)吗?

是的,参看"高可用性"(High Availability)一节。

7. 它可以和哪种交换机/系统一起工作?

确切的答案依赖于工作的特定模式。

在基本的balance模式(balance-rr或者balance-xor)下,bonding可以在任何支持etherchannel(也称为trunking)的系统运行。大多数目前的可管理交换机都有支持,很多不可管理的交换机也有支持。

高级balance模式(balance-tlb和balance-alb)没有特别的交换机需求,但需要设备驱动支持特定功能(在上文的模块参数一节里有描述)。

在802.3ad模式,bonding可以和支持IEEE 802.3ad动态连接聚合(Dynamic Link Aggregation)的系统一起工作,大多数可管理交换机和很多不可管理交换机都支持802.3ad。

active-backup模式可以和任何二层(Layer-II)交换机一起工作。

8. bonding设备从什么地方获取它的MAC地址?

如果没有显式的配置(通过ifconfig或ip link),bonding设备的MAC地址来自它的第一个slave设备,这个MAC地址会被其后的所有slave设备使用,并一直保留(即使第一个slave被移除),除非bonding设备断开或者重新配置。

如果你想修改MAC地址,可以通过ifconfig或者ip link命令:

# ifconfig bond0 hw ether 00:11:22:33:44:55

# ip link set bond0 address 66:77:88:99:aa:bb

MAC地址也可以这样修改:首先断开设备,然后修改slave的MAC地址(或者它们的顺序):

# ifconfig bond0 down ; modprobe -r bonding
# ifconfig bond0 .... up
# ifenslave bond0 eth...

这个方法会自动选用增加的下一个slave的地址。

为了恢复你的slave的MAC地址,你需要从bond上解除该slave(`ifenslave -d bond0 eth0'),bonding设备会恢复被从属前的MAC地址。

16. 资源和链接
=================================

最近版本的bonding驱动可以在最新的linux内核里找到,网站在http://kernel.org

本文的最新版本可以在最新版的内核源码中找到(名为:Documentation/networking/bonding.txt),或者在bonding的sorceforge网站:

http://www.sourceforge.net/projects/bonding

关于bonding驱动的讨论可以在bonding-devel的mail list找到,该mail list位于sourceforge.net。如果你有任何问题或疑问,直接给该mail list发送邮件,地址为:

bonding-devel@lists.sourceforge.net

订阅或解除订阅的方法可以在下面的地址找到:

https://lists.sourceforge.net/lists/listinfo/bonding-devel

Donald Becker的Ethernet驱动和拨号程序可以在这边找到:
http://www.scyld.com/network/

你也可以在www.scyld.com找到很多关于Ethernet、NWay、MII等的很多信息。


modprobe bonding
ifconfig eth0 down
ifconfig eth1 down
#ifconfig bond0 ipaddress
ifconfig bond0 ip地址 netmask <子网掩码> broadcast <广播地址>
ifenslave bond0 eth0
ifenslave bond0 eth1
现在两块网卡已经象一块一样工作了.这样可以提高集群节点间的数据传输.
其中,可以指定绑定的模式,比如:
modprobe bonding mode=balance-rr miimon=100
其中,mode=balance-rr为负载均衡;mode=active-backup为互备份模式,如果还要使用互备模式,需要加上参数primary=ethx,比如:
modprobe bonding mode=active-backup miimon=100 primary=eth0
   其中eth0,eth1是两块物理网卡。
停止bonding

ifenslave -d bond0 eth0
ifenslave -d bond0 eth1
ifconfig bond0 down
modprobe -r bonding

绑定多个bonding
如果系统存在多块网卡,eth0,eth1,eth2,eth3,我们现在希望估两两做备份,如果以前的方法加载bonding模块,这样在系统就可以配置
多个bonding了,需要在加载bonding的时候加载一个参数,max_bonds,比如:

modprobe bonding max_bonds=2

在SUSE中,可以将bonding模块做个别名设置多个bond设备,编辑/etc/modprobe.conf.local文件,加入如下内容:

alias bond0 bonding
options bonding mod=blance-rr miimon=100 max_bonds=2

alias bond1 bonding
options bonding mod=active-backup miimon=100 primary=eth2 max_bonds=2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值