快速业务通道

链路层的网卡聚合-基于Linux bonding

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-05
是事情又不是那么严重,ip只是依照本地的mtu进行分段,而tcp是端到端的,它可以使用诸如mss以及mtu发现之类的机制配合滑动窗口机制最大限度减少ip分段,因此layer3 4策略,很OK!
miimon和arp:使用miimon仅能检测链路层的状态,也就是链路层的端到端连接(即交换机某个口和与之直连的本地网卡口),然而交换机的上行口如果down掉了还是无法检测到,因此必然需要网络层的状态检测,最简单也是最直接的方式就是arp了,可以直接arp网关,如果定时器到期网关还没有回复arp reply,则认为链路不通了.
四、我该如何配置呢
1.,传统的方式肯定不妥,内核文档上写的有,大家参考便是,记住,要装一个ifenslave
2.最新的sysfs配置方式
确认你的系统上有sys这个目录,并且mount于它的文件系统是sysfs类型的.然后就是下面的步骤了,很简单:
第零步:加载模块
root@zyxx:modprobe bonding
第一步:进入相应目录
root@zyxx:cd /sys/class/net/
第二步:查看一下文件,熟悉一下地形(该步骤可省略)
root@zyxx:/sys/class/net# ls
bond0 bonding_masters eth0 eth1 eth2 eth3 eth4 eth5 lo
第三步:看看当前有哪些bond设备
root@zyxx:/sys/class/net# cat bonding_masters
bond0
第四步:从一个bond设备添加或者删除一个以太网卡设备
root@zyxx:/sys/class/net# echo (-)X > bonding_masters
#注释:上一条命令中的 号表示添加设备,而-号表示删除设备, X中的X表示任意一个你喜欢的名字,-X中的X表示bonding_masters中已经存在的一个名字
第五步:进入新创建的bondMy,并且尽情配置吧
root@zyxx:/sys/class/net/bondMy/bonding# ls
active_slave ad_num_ports ad_select arp_validate lacp_rate mode primary use_carrier
ad_actor_key ad_partner_key arp_interval downdelay miimon num_grat_arp slaves xmit_hash_policy
ad_aggregator ad_partner_mac arp_ip_target fail_over_mac mii_status num_unsol_na updelay
1.增加eth2到bondMy
root@zyxx:/sys/class/net/bondMy/bonding# echo eth2 > slaves
2.设置链路监控间隔
root@zyxx:/sys/class/net/bondMy/bonding# echo 100 > miimon
3.设置mode为热备
root@zyxx:/sys/class/net/bondMy/bonding# echo 1 > mode
...
第七步:感慨
整个配置步骤很简单,模块只需要加载一次,以后动态配置就一切OK了.
五、bonding驱动的实现
在看了精彩的配置并且实际上已经配置出一个很好用的网络后,我肯定会急切的看一下源代码的实现,这也是我喜欢linux的原因,它可以让你随意patch.实际上bonding的驱动非常简单,和tap一样的,基本就是三大部分:
第一部分:初始化
这部分很简单,就是初始化一个net_device,然后注册进去,这就不多说了
第二部分:实现用户配置接口
该接口有两种,第一种就是传统的基于ioctl的方式配置,就是实现一个ioctl即可,另一种就是通过sysfs实现,也很简单,实现一些attitude的store/show方法即可,不管采用哪种方式,最终都要调用一个函数,那就是netdev_set_master,该函数中最重要的事就一个,那就是将物理网卡的master设置成我们在第一部分初始化的那个bond设备:
slave->master = master;
第三部分:初始化传输和接收接口
对于传输接口,很简单,和多端口网桥类似.bond设备在初始化时将start_xmit初始化成bond_start_xmit,在bond_start_xmit中有一个switch-case,switch什么呢?当然是bonding的mode了,比如在mode0,也就是轮转负载的mode下,bond_start_xmit调用如下代码段:
switch-case:bond_xmit_roundrobin...
bond_for_each_slave_from(bond, slave, i, start_at) {
if (IS_UP(slave-

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号