英创工控主板双网络冗余方案

 2016-6-15         

  网络冗余是工业网络的一项保障策略,目的是减轻意外中断的风险,当网络中一条通路(物理链路)发生故障断掉了,还可以通过其他通路(物理链路)传递信息。实现网络冗余可以使用Bonding技术,也叫Truncking和Etherchannel技术,把多个网络接口绑定在一起,形成一个逻辑上网络接口,在用户看来就是一个单独的网络接口。Bonding驱动有7种不同工作模式,根据不同的工作模式,可以提供不同的网络负载均衡服务和网络冗余服务。其7种工作模式如下,常用模式为0,1,6,其中1模式是这里用到的主备模式。


  表1 Bonding的7种工作模式:



模式代号模式名称模式方式说明
0balance-rr

Round-robin policy

(循环策略)

按照设备顺序依次传输数据包,第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕。这种模式提供负载均衡和容错能力
1active-backup

Active-backup  policy

(主备策略)

只有一个设备处于活动状态。一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见的。此模式提供了容错能力
2balance-xor

XOR policy

(异或策略)

根据MAC地址异或运算的结果来选择传输设备,提供负载均衡和容错能力
3broadcast

Broadcast policy

(广播策略)

将所有数据包传输给所有接口,通过全部设备来传输所有数据,提供容错能力
4802.3ad

IEEE 802.3ad  Dynamic link aggregation

(动态链路聚合)

创建共享相同速率和双工设置的聚合组,利用所有接口传输。需要交换机支持802.3ad模式
5balance-tlb

Adaptive transmit  load balancing

(自适应传输负载均衡)

可以根据当前的负载把发出的数据分给每一个设备,由当前使用的设备处理收到的数据。本策略的通道联合不需要专用的交换机支持,提供负载均衡和容错能力
6balance-alb

Adaptive load balancing

(自适应负载均衡)

在5的基础上增加接收负载均衡,由ARP协商实现。bonding驱动截获本地发送的ARP应答,用其中一个从设备的MAC替换ARP应答中的源地址,让不同的端具有不通的MAC地址


  英创Linux工控主板支持Bonding技术,能够实现双网络冗余方案。我们将bonding驱动编译成了.ko文件,以EM9287 + Linux-4.1.14为例,讲述双网络冗余方案的配置过程:


  1)加载bonding.ko驱动,执行命令:insmod bonding.ko mode=1 miimon=100。

  mode为表1所述的工作模式,miimon指定MII链路监控频率,单位是毫秒(ms),这将决定驱动检查每个slave链路状态频率。miimon=0表示禁止MII链路监控,100可以作为一个很好的初始参考值。bonding.ko还有很多参数,如downdelay、arp_interval,用户都可以通过这种形式传递给驱动程序,更详细的参数、工作模式、配置方式介绍详见linux源码文档Documentation/networking/bonding.txt。


  2)加载bonding驱动后,默认创建一个虚拟网卡bond0,需要对bond0进行配置:

  设置ip地址:ifconfig bond0 192.168.201.31 netmask 255.255.255.0 up

  添加从设备eth0、eth1:ifenslave bond0 eth0 eth1

  此时,bond0已经正常工作了,可以通过命令:cat /proc/net/bonding/bond0查看其工作状态,如图1所示。此时,bond0工作在模式1,主备策略,激活设备为eth0。此时拔掉eth0的网线,eth1将成为激活设备,继续保持通信。


未标题-1.gif

图1 bond0工作状态


  3)关闭bond0

  执行命令ifconfig bond0 down即可关闭bond0,通信中断。此时,eth0和eth1依然处在SLAVE状态,并不能作为正常网络接口通信。


  4)释放bond0中的eth0和eth1

  释放bond0中eth0和eth1后,关闭bond0时需要释放bond0原来所占用的IP。

  ifenslave -d bond0 eth0 eth1    #从bond0中删除eth0,eth1

  ifconfig bond0 0.0.0.0 down     #关闭bond0,释放ip地址

  如需eth0、eth1重新作为单独网卡工作,使用ifconfig eth0 ipaddress重新设定ip地址。


  用户可以将2)、4)操作写成两个脚本文件:bonding-up.sh、bonding-release.sh。将它们放在和bonding.ko相同目录下,使用bonding时执行./bonding-up.sh;关闭bonding时执行命令ifconfig bond0 down;释放从设备时,调用./bonding-release.sh即可。


  bonding-up.sh内容如下:

  ifconfig bond0 192.168.201.31 up

  ifenslave bond0 eth0 eth1


  bonding-release.sh内容如下:

  ifenslave -d bond0 eth0 eth1#bond0 should be up state

  ifconfig bond0 0.0.0.0 down


  另外,如果用户需要开机直接运行bonding驱动,可以在/mnt/nandflash/user.sh中以绝对路径调用bonding-up.sh文件。


  user.sh示例:

  insmod /mnt/nandflash/bonding.ko mode=1 miimon=100

  /mnt/nandflash/bonding-up.sh