




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、配置:roott20b003 # cat /etc/sysconfig/network -scripts/ifcfg -eth1DEVICE=eth1ONBOOT=yesBOOTPROTO=noneMASTER=bond0SLAVE=yesUSERCTL=no roott20b003 # cat /etc/sysconfig/network -scripts/ifcfg -eth2DEVICE=eth2ONBOOT=yesBOOTPROTO=noneMASTER=bond0SLAVE=yesUSERCTL=noroott20b003 # cat /etc/sysconfig/network -
2、scripts/ifcfg -eth3DEVICE=eth3ONBOOT=yesBOOTPROTO=noneMASTER=bond0SLAVE=yesUSERCTL=no-scripts/ifcfg -bond0roott20b003 # cat /etc/sysconfig/networkDEVICE=bond0ONBOOT=yesBOOTPROTO=noneUSERCTL=noIPADDR=116.55.251.4NETMASK=255.255.255.224BONDING_OPTS=mode=6 miimon=100roott20b003 # cat /etc/modprobe.d/bo
3、nding.confalias netdev -bond0 bonding#BONDING_OPTS=mode=6 miimon=100 可以放 ifcfg-bond0 上面roott20b003 # cat /proc/net/bonding/bond0Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)Bonding Mode: adaptive load balancingPrimary Slave: NoneCurrently Active Slave: eth1MII Status: upMII Polling In
4、terval (ms): 100Up Delay (ms): 0Down Delay (ms): 0Slave Interface: eth1MII Status: upSpeed: 1000 MbpsDuplex: fullLink Failure Count: 1Permanent HW addr: f8:bc:12:44:0b:c9Slave queue ID: 0Slave Interface: eth2MII Status: upSpeed: 1000 MbpsDuplex: fullLink Failure Count: 1Permanent HW addr: f8:bc:12:4
5、4:0b:caSlave queue ID: 0Slave Interface: eth3MII Status: upSpeed: 1000 MbpsDuplex: fullLink Failure Count: 1Permanent HW addr: f8:bc:12:44:0b:cbSlave queue ID: 0Bonding 的模式一共有 7 种:#defineBOND_MODE_ROUNDROBIN0 ( balance-rr 模式)网卡的负载均衡模式#defineBOND_MODE_ACTIVEBACKUP 1 模式,只有一块网卡是 active, 另外一块是备的active-b
6、ackup 模式)网卡的容错模式,主备standby,这时如果交换机配的是捆绑,将不能正常工作,因为交换机往两块网卡发包,有一半包是丢弃的。#defineBOND_MODE_XORbroadcast 模式)2 ( balance-xor 模式)需要交换机支持#defineBOND_MODE_BROADCAST#defineBOND_MODE_8023AD4( IEEE 802.3ad 动态链路聚合模式)需要交换机支持#defineBOND_MODE_TLB5自适应传输负载均衡模式#defineBOND_MODE_ALB6网卡虚拟化方式bonding 模块的所有工作模式可以分为两类:多主型工作模
7、式和主备型工作模式, balance-rr 和 broadcast 属于多主型工作模式而 active -backup 属于主备型工作模式。 ( balance-xor、自适 应传输负载均衡模式( balance-tlb )和自适应负载均衡模式( balance-alb)也属于多主型工 作模式, IEEE 802.3ad动态链路聚合模式( 802.3ad)属于主备型工作模式一、网卡的负载均衡模式( mode = BOND_MODE_ROUNDROBIN)1) 建立 bond 虚设备建立一个 ifcfg-bond0 的设备,然后配置如下信息即可。DEVICE=bond0BOOTPROTO=sta
8、ticIPADDR=172.16.64.208NETMASK=255.255.224.0ONBOOT=yesTYPE=Ethernet2) 配置接口文件由于使用一个虚拟的 ip 地址,所以,其他接口设备都不配置 ip 信息。3) 配置 bonding 工作方式打开 /etc/modprobe.conf 文件,将 bonding 的工作模式配置为如下模式。alias bond0bonding optionsbond0 mode=0 arp_interval=500arp_ip_target=172.16.64.864) 启动 bonding 需要添加路由来制定发送规则,这个可以自定义添加。配置完
9、后重启设备即可。ifenslave bond0eth0 eth1route add -net0/0 gw 172.16.64.254bond0 Link encap:Ethernet HWaddr 00:14:10:70:00:25inet addr:172.16.64.208 Bcast:172.16.95.255 Mask:255.255.224.0inet6 addr: fe80:200:ff:fe00:0/64Scope:LinkUP BROADCAST RUNNING MASTERMULTICASTM TU:1500 Metric:1RX packets:39335 errors:0
10、 dropped:0overruns:0 frame:0TX packets:3178 errors:0 dropped:0overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:3020656 (2.8 MiB) TX bytes:269722 (263.4 KiB)eth0 Link encap:Ethernet HWaddr 00:14:10:70:00:25UP BROADCAST RUNNING SLAVEMULTICASMT TU:1500 Metric:1RX packets:18208 errors:0 dropped:0ov
11、erruns:0 frame:0TX packets:5 errors:0 dropped:0overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:1371589 (1.3 MiB) TX bytes:378 (378.0 b)eth1 Link encap:Ethernet HWaddr 00:14:10:70:00:25UP BROADCAST RUNNING SLAVE MULTICASMT TU:1500 Metric:1RX packets:21128 errors:0 dropped:0overruns:0 frame:0
12、TX packets:3174 errors:0 dropped:0overruns:0 carrier:0collisions:0 txqueuelen:100RX bytes:1649127 (1.5 MiB) TX bytes:269498 (263.1 KiB)如上图所示,这种模式下 bonding 模块会将虚接口和所有的 slave 接口的 MAC 地址 设置为一致。通过定时器,每个 slave 接口不断发送 ARP 包来不断更换交换机端口与 MAC 的对应关系。这样使得每个网卡都在进行工作。这个ARP的发送规则是:每 arp_interval ( MS)间隔向 arp_ip_tar
13、get 发送 arp 请求。也可以向多个 arp_ip_target 发送 arp 请求。观察交换机端口上所学习到的 MAC 地址,发现 MAC 会在两个端口上反复切换。在 BOND_MODE_ROUNDROBIN模式下, bonding 对于发送和接收数据的处理逻辑是 不一致的, 对于数据的接收, bonding 基本不做任何处理, 纯粹依靠交换机端口与 MAC 的变 化来实现交替接收数据。 发送的话, 交换机会根据数据的源 MAC 来学习端口和 MAC 之间的 关系,所以 bonding 做到的就是选择不一样的网卡发送。对于数据的发送,static inline voidbond_set_
14、mode_ops(struct net_device *bond_dev, int mode)switch(mode) case BOND_MODE_ROUNDROBIN:bond_dev -hard_start_xmit =bond_xmit_roundrobin;break;bond 的发送函数被注册为 bond_xmit_roundrobin 。通过 bond_xmit_roundrobin 的实 现可以发现static int bond_xmit_roundrobin(structsk_buff *skb, struct net_device *bond_dev)read_lock(&
15、bond -curr_slave_lock);slave = start_at = bond -curr_active_slave; read_unlock(&bond -curr_slave_lock);bond_for_each_slave_from(bond, slave, i,start_at) if(IS_UP(slave-dev) &(slave-link = BOND_LINK_UP) &(slave-state =BOND_STATE_ACTIVE) res =bond_dev_queue_xmit(bond, skb, slave -dev); write_lock(&bon
16、d -curr_slave_lock);bond -curr_active_slave= slave-next; write_unlock(&bond -curr_slave_lock); break;bond_xmit_roundrobin 会通过 curr_active_slave 指针所指向的设备来进行发送, 当然 curr_active_slave 会在调用 bond_dev_queue_xmit 完成实际的发送之后指向下一个 slave 设备。 bond_dev_queue_xmit 实际是调用通用的发送函数 dev_queue_xmit 来进行的,它传递给 dev_queue_xm
17、it 的是一个 skb,在传递之前 skb-dev 就被指定为了当前的 slave 设备,这样 内核就会找到对应的真实网卡设备来进行发送,最后 curr_active_slave 指针的轮询切换,实 现了 bonding 的负载均衡工作模式。从这种模式可以看到, bonding 实现了一个类似网卡驱动的模块,对应的 bond0 设 备是一个纯粹的虚设备, 数据发送虽然说经过了它, 但通过一系列调用, 转了一圈之后才回 到真正的网卡设备那里进行发送,无疑会消耗一定的系统性能。简单用 100Mbps 速率的 UDP 数据包测试了一下 BOND_MODE_ROUNDROBIN模式。测试过程中发现接收
18、端会有较多的乱序包,观察交换机端口情况,端口之间的切换 频率不规则,这个和交换机的配置或者性能应该有很大联系,有必要的话需要进一步研究。 数据的正确性和时序性能否保证需要进一步仔细测试。2、网卡的容错模式( mode =BOND_MODE_ACTIVEBACKU)P 容错模式的配置方法和负载均衡模式基本差不多,只不过修改一/etc/modprobe.conf 即可。alias bond0 bondingoptions bond0 mode=1 miimon=100这里使用的是 mii 链路检测方式,与之前 arp 检测方式不同。当然这两种链路检测 方式在各种 mode 下都是可以使用的,但要注
19、意不能同时使用。介绍一下 bonding 的 mii 检测实现。首先和 arp-monitor 一样, mii 也是定时器触发 if(bond -params.miimon) /* link checkinterval, in milliseconds. */ init_timer(mii_timer);mii_timer -expires = jiffies + 1;mii_timer -data= (unsigned long)bond_dev;mii_timer -function = (void*)&bond_mii_monitor;add_timer(mii_timer);bond_
20、mii_monitor 函数其本质的原理就是检测网卡的链路状态, bonding 定义网卡有4 个链路状态:BOND_LINK_UP:BOND_LINK_FAIL:正常状态 (处于该状态的网卡是是潜在的发送数据包的候 选者)网卡出现故障,向状态 BOND_LINK_DOWN 切换中BOND_LINK_BACK:网卡恢复,向状态 BOND_LINK_UP切换中BOND_LINK_DOWN:失效状态从上到下,表示了网卡链路从正常到失效再到恢复状态。 bond_mii_monitor 函数就 是依次检查网卡的链路状态是否处于这些状态,然后通过标记 do_failover 变量来说明当前 是否需要切换
21、 slave 网卡。代码篇幅较大,但逻辑还是很清晰的,故此处不罗列了。在 BOND_MODE_ACTIVEBACKUP模式下,两块网卡其实有一块是不工作的,被设置 为 IFF_NOARP的状态。同时, bond 虚设备,还有 slave 设备的 MAC 地址均一致,所以这张 网卡不会被外界察觉存在。交换机也不存在想该端口发包的情况。当 bond 的 mii 检测发现 当前的 active 设备失效了之后,会切换到这个备份设备上。在 bond_change_active_slave 函数中if (bond -params.mode =BOND_MODE_ACTIVEBACKUP) if (old
22、_active) bond_set_slave_inactive_flags(old_active);if (new_active) bond_set_slave_active_flags(new_active);这个就是在 BOND_MODE_ACTIVEBACKUP模式下的切换逻辑,很简单,需要注意的是,在 bond_set_slave_inactive_flags(old_active) 中,需要将接口的状态设置为IFF_NOARP,不然交换机就可能会把数据包发送到一个错误的端口上。BOND_MODE_ACTIVEBACKUP 模 式 下 的 数 据 发 送 非 常 简 单 , 可 想 而 知 curr_active_slave 指针始终都指向当前可用的设备,所以直接发送就可以,没有之前 BOND_MODE_ROUNDROBIN模式下 slave 设备切换的过程。3、网卡虚拟化方式( mode = BOND_MODE_ALB)经过考察,许多磁盘阵列设备采用了网卡虚拟化方式进行多网卡应用。实际就是 Linux 的 bonding 技术。它采用了 mod
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 嘀友管车:网约车与租赁公司全业务管理平台解决方案
- 《智能家居系统介绍》课件
- 园林绿化工艺流程
- 大班健康活动《贝贝换牙》教案设计
- 杭州至德清市域铁路工程涉及220kV窑铁2R09线48#-50#迁改工程报告表
- 《下肢康复》课件
- 《儿童推拿教学课件》
- 《社区康复护理改进》课件
- VBSE实训成本会计流程
- 课件物体在重力作用下的运动
- 《支气管镜检查技术》课件
- 育肥猪考试试题及答案
- 肿瘤免疫治疗靶点发现与验证2025年新药研发案例研究报告
- 监考员招聘试题及答案
- 班组长管理培训讲义
- 2025-2030交通信息化产业规划专项研究报告
- 北京民政局离婚协议书
- 2025年反洗钱知识竞赛考试题库及答案(共120题)
- 药品管理的法律法规知识试题及答案
- 广东省广州市2025年中考地理模拟测试卷(含答案)
- 自律赢得人生拼搏铸就辉煌!课件 2024-2025学年高中励志主题班会
评论
0/150
提交评论