导航:首页 > 解决方法 > bonding链路检测方法

bonding链路检测方法

发布时间:2023-01-13 17:31:06

Ⅰ bonding后交换机怎么配置

一、什么是bonding 多块网卡绑在一起,作为一个网卡用,实现负载均衡和提高带宽,linux双网卡绑定一个IP地址,实质工作就是使用两块网卡虚拟为一块,使用同一个IP地址,是我们能够得到更好的更快的服务。 二、配置过程 配置很简单,一共四个步骤: 实验的操作系统是Redhat Linux Enterprise 3.0 绑定的前提条件:芯片组型号相同,而且网卡应该具备自己独立的BIOS芯片。 1.编辑虚拟网络接口配置文件,指定网卡IP 代码如下: vi /etc/sysconfig/ network-scripts/ ifcfg-bond0 p[[emailprotected] root]# cp /etc/sysconfig/network-scripts/ifcfg-eth0 ifcfg-bond0 将第一行改成 DEVICE=bond0 代码如下: # cat ifcfg-bond0 pDEVICE=bond0 pBOOTPROTO=static pIPADDR=172.31.0.13 pNETMASK=255.255.252.0 pBROADCAST=172.31.3.254 pONBOOT=yes pTYPE=Ethernet 这里要主意,不要指定单个网卡的IP 地址、子网掩码或网卡 ID。将上述信息指定到虚拟适配器(bonding)中即可。 代码如下: [[emailprotected] network-scripts]# cat ifcfg-eth0 pDEVICE=eth0 pONBOOT=yes pBOOTPROTO=dhcp p[[emailprotected] network-scripts]# cat ifcfg-eth1 pDEVICE=eth0 pONBOOT=yes pBOOTPROTO=dhcp 3 # vi /etc/moles.conf 编辑 /etc/moles.conf 文件,加入如下一行内容,以使系统在启动时加载bonding模块,对外虚拟网络接口设备为 bond0 加入下列两行 代码如下: alias bond0 bonding poptions bond0 miimon=100 mode=1 说明:miimon是用来进行链路监测的。 比如:miimon=100,那么系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线路;mode的值表示工作模式,他共有0,1,2,3四种模式,常用的为0,1两种。 mode=0表示load balancing (round-robin)为负载均衡方式,两块网卡都工作。 mode=1表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份. bonding只能提供链路监测,即从主机到交换机的链路是否接通。如果只是交换机对外的链路down掉了,而交换机本身并没有故障,那么bonding会认为链路没有问题而继续使用 4 # vi /etc/rc.d/rc.local 加入两行 代码如下: ifenslave bond0 eth0 eth1 proute add -net 172.31.3.254 netmask 255.255.255.0 bond0 到这时已经配置完毕重新启动机器. 重启会看见以下信息就表示配置成功了 ................ Bringing up interface bond0 OK Bringing up interface eth0 OK Bringing up interface eth1 OK Bonding的工作模式 Linux Bonding默认使用轮转策略。 基本类别是主备模式与负载均衡两种模式: balance-rr (mode=0) 轮转(Round-robin)策略:从头到尾顺序的在每一个slave接口上面发送数据包。本模式提供负载均衡和容错的能力。 active-backup(mode=1) 活动-备份(主备)策略:在绑定中,只有一个slave被激活。当且仅当活动的slave接口失败时才会激活其他slave。为了避免交换机发生混乱此时绑定的MAC地址只有一个外部端口上可见。在bongding的2.6.2及其以后的版本中,主备模式下发生一次故障迁移时,bonding将在新激活的slave上会送一个或者多个gratuitous ARP.bonding的主salve接口上以及配置在接口上的所有VLAN接口都会发送gratuitous ARP,只要这些接口上配置了至少一个IP地址。VLAN接口上发送的的gratuitous ARP将会附上适当的VLAN id。本模式提供容错能力,primary option,documented below会影响本模式的行为。 balance-xor(mode=2) XOR策略:基于所选择的传送hash策略。 本模式提供负载均衡和容错的能力。 broadcast(mode=3) 广播策略:在所有的slave接口上传送所有的报文。本模式提供容错能力。 802.3ad(mode=4) IEEE 802.3ad 动态链路聚合。创建共享相同的速率和双工模式的聚合组。能根据802.3ad规范利用所有的slave来建立聚合链路。Salve的出站选择取决于传输的hash策略,默认策略是简单的XOR策略,而hash策略则可以通xmit_hash_policy选项加以改变。需要注意的是:不是所有的传输策略都与802.3ad兼容,尤其是802.3ad标准的43.2.4章节中关于 packet mis-ordering要求的地方。不同个体的实现往往出现很大的不兼容。 先决条件: 1. 每个slave的基本驱动支持Ehtool获取速率和双工状态。 2.交换机支持IEEE 802.3ad动态链路聚合。大多数的交换机都需要使用某种配置方式来启用802.3ad模式。 balance-tlb(mode=5) 自适应传输负载均衡:信道绑定不需要特殊的交换机支持。出口流量的分布取决于当前每个slave的负载(计算相对速度)。进口流量从当前的slave的接收。如果接收salve出错,其他的slave接管失败的slave的MAC地址继续接收。 先决条件: 每个slave的基本驱动支持Ehtool获取速率状态。 balance-alb(mode=6) 自适应负载均衡:包括balance-tlb(模式5)以及用于IPV4流量的接收负载均衡,并且不需要特殊的交换机支持。接收负载均衡通过ARP协商实现。bonding的驱动拦截本机发出的ARP Replies(ARP回应报文),并且用bond的某一个slave的硬件地址改写ARP报文的源地址,使得本服务器对不同的设备使用不同的硬件地址。本服务器建立的连接的接收流量也是负载均衡的。当本机发送ARP Request时,bonding驱动通过ARP报文复制并保存节点的IP信息。当从其他节点接收到ARP Reply,bonding驱动获取节点的硬件地址并且会回应一个包含绑定好的slave的硬件地址的ARP Reply给发送的节点。用ARP协商的负载均衡的有一个问题是每次用bond的硬件地址广播ARP报文,那么其他节点发送的数据全部集中在一个slave上,处理ARP更新给其他所有节点的时候,每个节点会重新学习硬件地址,导致流量重新分配。当新加入一个slave或者一个非激活的slave重新激活的时候也会导致接收流量重新分配。接收流量负载是串行(轮转)的分配在bond的一组速率最高的slave上。

Ⅱ 多网卡同IP和同网卡多IP技术

将多个网卡端口绑定为一个,可以提升网络的性能。在linux系统上有两种技术可以实现,Linux 网络组和bond,通过绑定多个网卡作为一个逻辑网口并配置单个的IP地址,大幅提升服务器的网络吞吐。

目前发布各个Linux版本内核均已包含了此模块,大多数情况下不需要重新编译内核。 Linux 的 bonding 驱动提供了绑定/集成(bond)多个网卡为一个虚拟逻辑网口的功能。 一般来说绑定的网口(bonded)有多种工作模式,主要有热后备(hot standby) 和 负载均衡(load balancing).
1.创建bond0配置文件

vi /etc/sysconfig/network-scripts/ifcfg-bond0 添加配置参数

vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes(设置从属关系)
BOOTPROTO=none
HWADDR=00:15:17:CC:FC:35
eth1的配置文件与之相同,只是device的值改为eth1即可。

编辑/etc/modprobe.conf或者/etc/moles.conf文件,加入如下内容,使系统启动时加载bonding模块驱动
alias bond0 bonding
option bond0 miimon=100 mode=1
说明:
1).miimon=100 用来进行链路监测的。即每100ms监测一次链路状态。bonding只监测主机与交换机之间链路。如果交换机出去的链路出问题而本身没有问题,那么bonding认为链路没有问题而继续使用。
2).mode=1 表示提供冗余功能。除此之外还可以为0、2、3,共四种模式。0表示负载均衡

ifenslave bond0 eth0 eth1
route add -net 192.168.1.254 netmask 255.255.255.0 bond0 #如有需要才加该路由

首先执行命令装载bonding模块:modprobe bonding
重启网络服务,并确认bond0正确启动:service network restart
确认设备已经正确加载:less /proc/net/bonding/bond0
至此,bond 的设置就基本结束了
删除bond
ifconfig bond0 down
rmmod bonding

网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量,网络组不同于旧版中bonding 技术,能提供更好的性能和扩展性,网络组由内核驱动和teamd 守护进程实现.

nmcli connection add type team con-name TEAMname ifname INTname [config JSON]
TEAMname 指定连接名,INname指定接口名,JSON指定runner方式,格式为:'{"runner":{"name":"METHOD"}}'
METHOD 可以是broadcast、roundrobin、activebackup、loadbalance、lacp
(1)创建网络接口组team0
[root@centos7 ~]# nmcli connection add type team con-name team0 ifname team0 config '{"runner":{"name":"loadbalance"}}'
Connection 'team0' (e70483a1-2688-4eb2-9466-8e732360291d) successfully added.
(2)给网路组team0配置IP地址
[root@centos7 ~]# nmcli connection modify team0 ipv4.method manual ipv4.addresses 200.200.200.200/24 gw4 200.200.200.1

既就是生成组TEAM组成员的配置文件,这个配置文件和网卡配置文件是相互独立的。
nmcli connection add type team-slave con-name SLAVEname ifname INname master TEAMname
SLAVEname 指定连接名,INTname指定网络接口名(相当于指定要加入网络组的网卡名),TEAMnmae指定所属网络组。
若连接名不指定,默认为team-slave-IFACE
创建接口组
这里使用ens34、ens38两块网卡
[root@centos7 ~]# nmcli connection add con-name team0-ens34 type team-slave ifname ens34 master team0

[root@centos7 ~]# nmcli connection add con-name team0-ens38 type team-slave ifname ens38 master team0

启用网络组:nmcli connection up team0
启用组成员:nmcli connection up SLAVEname
[root@centos7 ~]# nmcli connection up team0

[root@centos7 ~]# nmcli connection up team0-ens34

[root@centos7 ~]# nmcli connection up team0-ens38

teamdctl TEAMname state
[root@centos7 ~]# teamdctl team0 state

link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
down count: 0
ens38
link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
down count: 0

(1)MASTER配置文件
[root@centos7 ~]# cat /etc/sysconfig/network-scripts/ifcfg-team0

(2)组成员(SLAVE)配置文件
[root@centos7 ~]# cat /etc/sysconfig/network-scripts/ifcfg-team0-ens34

(1)断开连接
[root@centos7 ~]# nmcli connection down team0

再次查看状态
[root@centos7 ~]# teamdctl team0 state

[root@centos7 ~]# nmcli connection show

可以看到已经关闭成功
(2)删除TEAM组成员
[root@centos7 ~]# nmcli connection delete team0-ens34

[root@centos7 ~]# nmcli connection delete team0-ens38

(3)删除TEAM组
[root@centos7 ~]# nmcli connection delete team0

不同的工作环境通常IP地址以及相关网络属性通常是不一样的.如果我们每次都是手动去修改,那将是非常繁琐的.所以我们去修改一些网络配置让网卡去自适应工作环境.在linux系统上配置同一个网卡拥有多个IP的技术也就是为网卡添加多个子网卡,如eth0:0、eth1:1这种网络接口,LINUX最多可以支持255个IP子网卡。
在linux系统上有两种方式添加子网卡。一种是使用网络配置命令,这种方式会立即生效,但不会永久生效,如果重启则会立即丢失。如果想要永久生效则是另一种方式去修改网络配置文件。配置子网卡命令前要卸载或者禁用NetworkManager服务,因为和NetworkManager有冲突。

使用ifconfig命令管理子网卡:
ifconfig device[label] [address] [up|down]
ifconfig eth0:0 192.168.1.100/24 up(添加并启用eth0:0子网卡)
ifconfig eth0:0 down(禁用eth0:0子网卡)
使用ip命令管理子网卡:
ip addr add [address] device [label]
ip addr add 172.16.1.2/16 dev eth0(为eth0网卡添加一个IP)
ip addr add 172.16.1.1/16 dev eth0 label eth0:0(为eth0网卡添加一个IP并且指定label)
ip addr del 172.16.1.1/16 dev eth0 label eth0:0(删除eth0上172.16.1.1/16这条IP)
ip addr flush dev eth0 label eth0:0(刷新)
把相关配置写入文件
将上边的命令ifconfig加入到rc.local中去(永久生效)

所有网卡的配置文件都保存在/etc/sysconfig/network-scripts目录中,一个网卡对应一个配置文件
手工添加IP地址的
以下是网卡配置文件的部分信息说明,其他类似信息默认即可:

配置完成重启网卡即可:service network restart

Ⅲ Linux系统下多网卡绑定操作方法

在Linux系统中,通常会将多个网卡绑定为一个逻辑网卡,这样可以提高网络的稳定性,那么要如何将多个网络绑定为一个呢?下面小编就给大家介绍下Linux下多网卡绑定的bond模式原理。
将多个Linux网络端口绑定为一个,可以提升网络的性能,比如对于备份服务器,需要在一个晚上备份几个T的数据,如果使用单个的千兆网口将会是很严
重的瓶颈。其它的应用,比如ftp服务器,高负载的下载网站,
都有类似的问题。因此使用Linux
teaming或bond来绑定多个网卡作为一个逻辑网口,配置单个的IP地址,会大幅提升服务器的网络吞吐(I/O)。
Linux的多网卡绑定功能使用的是内核中的“bonding”模块,关于此模块可以参考Linux
Ethernet
Bonding
Driver文档,
但是目前发布各个Linux版本内核均已包含了此模块,大多数情况下不需要重新编译内核。
Linux

bonding
驱动提供了绑定/集成(bond)多个网卡为一个虚拟逻辑网口的功能。并请注意绑定的网口(bonded)有多种工作模式;
一般来说,分为
热后备(hot
standby)

负载均衡(load
balancing)。
在Redhat/Fedora和其它类Redhat
Linux中是比较容易配置的。
1.创建bond0配置文件
vi
/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
--物理设备名字
IPADDR=192.168.1.2
--IP地址
NETMASK=255.255.255.0
--子网掩码
GATEWAY=192.168.1.1
--网关
DNS=8.8.8.8
--DNS
ONBOOT=yes
--随机启动
NAME=bond0
BOOTPROTO=none
USERCTL=no
--是否允许非root用户控制该设备
2.修改被绑定的eth0和eth1的配置文件
vi
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=“eth0”
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
HWADDR=00:15:17:CC:FC:35
eth1的配置文件与之相同,只是device的值改为eth1即可。
3.装在bond模块驱动
编辑/etc/modprobe.conf或者/etc/moles.conf文件,加入如下内容,使系统启动时加载bonding模块驱动
alias
bond0
bonding
option
bond0
miimon=100
mode=1
说明:
1).miimon=100
用来进行链路监测的。即每100ms监测一次链路状态。bonding只监测主机与交换机之间链路。如果交换机出去的链路出问题而本身没有问题,那么bonding认为链路没有问题而继续使用。
2).mode=1
表示提供冗余功能。除此之外还可以为0、2、3,共四种模式。0表示负载均衡
4.在/etc/rc.d/rc.local文件中加入如下语句,使得系统启动自动运行
ifenslave
bond0
eth0
eth1
route
add
-net
192.168.1.254
netmask
255.255.255.0
bond0
#如有需要才加该路由
5.检测、验证配置
首先执行命令装载bonding模块:modprobe
bonding
重启网络服务,并确认bond0正确启动:service
network
restart
确认设备已经正确加载:less
/proc/net/bonding/bond0
列出所有网口:ifconfig

上面就是Linux下多网卡绑定bond模式原理的介绍了,bond模式原来一般有7种,这里只介绍了其中的一种,希望对你有所帮助。

Ⅳ linux如何配置bond

1、编辑虚拟网络接口配置文件,指定网卡IP:
#
vi
/etc/sysconfig/network-scripts/ifcfg-bond0
或者下面命令
#
cp
/etc/sysconfig/network-scripts/ifcfg-eth0
ifcfg-bond02、#vi
ifcfg-bond0
将第一行改成
DEVICE=bond0:
#
cat
ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.61.72
NETMASK=255.255.255.240
#BROADCAST=192.168.61.79
#GATEWAY=192.168.61.77
这里要注意,不要指定单个网卡的IP
地址、子网掩码或网卡
ID。将上述信息指定到虚拟适配器(bonding)中即可。
#
cat
ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
HWADDR=00:15:17:CC:FC:35
MASTER=bond0
SLAVE=yes
#
cat
ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
HWADDR=00:15:17:CC:FC:34
MASTER=bond0
SLAVE=yes3、
#
vi
/etc/moles.conf
编辑
/etc/modprobe.conf或者/etc/moles.conf文件,加入如下两行内容,以使系统在启动时加载bonding模块,对外虚拟网络接口设备为
bond0.加入下列两行:
alias
bond0
bonding
options
bond0
miimon=100
mode=1
说明:miimon是用来进行链路监测的。
比如:miimon=100,那么系统每100ms监测一次路连接状态,如果有一条线路不通就转入另一条线路;mode的值表示工作模式,他共有0,1,2,3四种模式,常用的为0,1两种。
mode=0表示load
balancing
(round-robin)为负载均衡方式,两块网卡都工作。
mode=1表示fault-tolerance
(active-backup)提供冗余功能,工作方式是主备的工作方式,也就是说默认情况下只有一块网卡作,另一块做备份.
bonding只能提供链路监测,即从主机到交换机的链路是否接通。如果只是交换机对外的链路down掉了,而交换机本身并没有故障,那么bonding会认为链路没有问题而继续使用4、
#
vi
/etc/rc.d/rc.local
加入两行,加在启动自运行文件里面ifenslave
bond0
eth0
eth1
route
add
-net
172.31.3.254
netmask
255.255.255.0
bond0
#如果需要的话加路由,不需要不用加到这时已经配置完毕重新启动机器.
重启会看见以下信息就表示配置成功了Bringing
up
interface
bond0
OK
Bringing
up
interface
eth0
OK
Bringing
up
interface
eth1
OK

Ⅳ linux bonding 怎么做到fast failover (技术)

Linux网卡bonding

随着科学技术的日益革新,数据的安全性已经逐渐体现出了它的重要意义。可以设想,当一个人所有的个人资料都不负存在,那是多么可怕的事情。网络技术的深入使用,数据的网络化传输已经成为了重要,甚至主要的传输方式。所以数据服务器能够正常提供网络服务是所有供应商都需要考虑的问题。
在这个背景下,单网卡的应用已经捉襟见肘,设备冗余技术的普及已是枝繁叶茂。本文之后就引用Linux操作系统下的多网卡bonding技术来阐述这一容错概念。

负载均衡功能也是网卡bonding的另一个功能,它可以实现多网卡同时工作,提高系统网络处理的吞吐能力。

一、网卡的负载均衡模式(mode = BOND_MODE_ROUNDROBIN)
1)建立bond虚设备

建立一个ifcfg-bond0的设备,然后配置如下信息即可。
DEVICE=bond0
BOOTPROTO=static
IPADDR=172.16.64.208
NETMASK=255.255.224.0
ONBOOT=yes
TYPE=Ethernet

2)配置接口文件

由于使用一个虚拟的ip地址,所以,其他接口设备都不配置ip信息。

3)配置bonding工作方式

打开/etc/modprobe.conf文件,将bonding的工作模式配置为如下模式。

alias bond0 bonding
options bond0 mode=0 arp_interval=500 arp_ip_target=172.16.64.86

4)启动bonding

需要添加路由来制定发送规则,这个可以自定义添加。配置完后重启设备即可。
ifenslave bond0 eth0 eth1
route add -net 0/0 gw 172.16.64.254

bond0 Link encap:Ethernet HWaddr 00:14:10:70:00:25
inet addr:172.16.64.208 Bcast:172.16.95.255 Mask:255.255.224.0
inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:39335 errors:0 dropped:0 overruns:0 frame:0
TX packets:3178 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3020656 (2.8 MiB) TX bytes:269722 (263.4 KiB)

eth0 Link encap:Ethernet HWaddr 00:14:10:70:00:25
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:18208 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1371589 (1.3 MiB) TX bytes:378 (378.0 b)

eth1 Link encap:Ethernet HWaddr 00:14:10:70:00:25
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:21128 errors:0 dropped:0 overruns:0 frame:0
TX packets:3174 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:1649127 (1.5 MiB) TX bytes:269498 (263.1 KiB)

如上图所示,这种模式下bonding模块会将虚接口和所有的slave接口的MAC地址设置为一致。通过定时器,每个slave接口不断发送ARP包来不断更换交换机端口与MAC的对应关系。
这样使得每个网卡都在进行工作。这个ARP的发送规则是:
每arp_interval(MS)间隔向arp_ip_target发送arp请求。也可以向多个arp_ip_target发送arp请求。
观察交换机端口上所学习到的MAC地址,发现MAC会在两个端口上反复切换。
在BOND_MODE_ROUNDROBIN模式下,bonding对于发送和接收数据的处理逻辑是不一致的,对于数据的接收,bonding基本不做任何处理,纯粹依靠交换机端口与MAC的变化来实现交替接收数据。发送的话,交换机会根据数据的源MAC来学习端口和MAC之间的关系,所以bonding做到的就是选择不一样的网卡发送。

对于数据的发送,
static inline void bond_set_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(struct sk_buff *skb, struct net_device *bond_dev)
{
read_lock(&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(&bond->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_xmit的是一个skb,在传递之前skb->dev就被指定为了当前的slave设备,这样内核就会找到对应的真实网卡设备来进行发送,最后curr_active_slave指针的轮询切换,实现了bonding的负载均衡工作模式。
从这种模式可以看到,bonding实现了一个类似网卡驱动的模块,对应的bond0设备是一个纯粹的虚设备,数据发送虽然说经过了它,但通过一系列调用,转了一圈之后才回到真正的网卡设备那里进行发送,无疑会消耗一定的系统性能。
简单用100Mbps速率的UDP数据包测试了一下BOND_MODE_ROUNDROBIN模式。
测试过程中发现接收端会有较多的乱序包,观察交换机端口情况,端口之间的切换频率不规则,这个和交换机的配置或者性能应该有很大联系,有必要的话需要进一步研究。数据的正确性和时序性能否保证需要进一步仔细测试。

2、网卡的容错模式(mode = BOND_MODE_ACTIVEBACKUP)
容错模式的配置方法和负载均衡模式基本差不多,只不过修改一下/etc/modprobe.conf即可。

alias bond0 bonding
options bond0 mode=1 miimon=100
这里使用的是mii链路检测方式,与之前arp检测方式不同。当然这两种链路检测方式在各种mode下都是可以使用的,但要注意不能同时使用。
介绍一下bonding的mii检测实现。首先和arp-monitor一样,mii也是定时器触发
if (bond->params.miimon) { /* link check interval, 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_mii_monitor函数其本质的原理就是检测网卡的链路状态,bonding定义网卡有4个链路状态:
BOND_LINK_UP: 正常状态(处于该状态的网卡是是潜在的发送数据包的候选者)
BOND_LINK_FAIL: 网卡出现故障,向状态BOND_LINK_DOWN 切换中
BOND_LINK_DOWN: 失效状态
BOND_LINK_BACK: 网卡恢复,向状态BOND_LINK_UP切换中

从上到下,表示了网卡链路从正常到失效再到恢复状态。bond_mii_monitor函数就是依次检查网卡的链路状态是否处于这些状态,然后通过标记do_failover变量来说明当前是否需要切换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_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技术。它采用了mode = BOND_MODE_ALB的方式。
BOND_MODE_ALB的实现方式比较复杂,还有一些不理解的地方,就不做深入分析了。其核心思想可以用下图解释:

从这个图中可以看到,客户端A与服务器的传输使用的是MAC A;而客户端B与服务器传输使用的是MAC B,但对于IP层来说,客户端A与B都与服务器X.X.X.X 的IP地址进行通讯,并不感知底层传输接口的变化。这样,服务器对于客户端整体上的工作模式就处于负载均衡的状态。当然,这个过程的控制就是bonding模块所完成的。
通过测试发现两台客户端展现的arp表是一致的,如下(服务器端地址为172.16.64.208,服务器端首选接口的MAC为00-14-10-70-00-25)

CLIENT A
172.16.64.208 00-14-10-70-00-25 dynamic
CLIENT B
172.16.64.208 00-14-10-70-00-25 dynamic

通过抓包可以看到,两次回复的ARP应答的源MAC地址是不一样的,分别为
00-14-10-70-00-25和
00-14-10-70-00-26。

所以说,能够实现这种处理方法的原因就是bonding修改了ARP应答的源地址导致,使得外界并不感知服务器存在多网卡的状态,在网络上确定了IP和MAC的唯一对应关系,保证了上层业务传输的逻辑一致性。同时内部的处理又交给不同的网卡,实现了负载均衡。
另外,也给了我们一定的容错性,当一个接口失效后,bonding会迅速将另外一块网卡设置为首选slave设备,并修改其MAC地址。由于外界学习到的服务器MAC地址始终是不变的,所以链路的状态不会受很大影响。
Bonding的模式一共有7种:
#define BOND_MODE_ROUNDROBIN 0
#define BOND_MODE_ACTIVEBACKUP 1
#define BOND_MODE_XOR 2
#define BOND_MODE_BROADCAST 3
#define BOND_MODE_8023AD 4
#define BOND_MODE_TLB 5
#define BOND_MODE_ALB 6

每种方式都有它的特点,有些需要交换机支持,比如 BOND_MODE_8023AD和BOND_MODE_XOR。本文就介绍了3种方式,可以在无需交换机支持或者简单配置交换机的情况下运行。

阅读全文

与bonding链路检测方法相关的资料

热点内容
窗帘幔子怎么安装方法 浏览:847
简述利润表阅读与分析的方法 浏览:979
猪群最佳引种方法 浏览:57
电脑组装方法步骤图片 浏览:471
花生多效唑的使用方法及注意事项 浏览:444
如何学会吹笛子的方法 浏览:561
环己酮的检测方法 浏览:478
四米八锻炼身体的方法 浏览:784
第八代五粮液酒鉴别真伪的方法2021年 浏览:545
玉石的鉴别方法用手电照 浏览:618
常见的案例研究方法有哪些 浏览:452
100个计算方法视频 浏览:341
膨胀挂钩安装方法 浏览:684
老式全站仪坐标计算方法 浏览:605
支原体的治疗方法 浏览:436
标枪训练方法的应用 浏览:287
快速消耗儿童体力的方法 浏览:667
纸质退单正确书写方法 浏览:94
马云手机创业方法 浏览:567
仔猪的脚疼怎么治疗方法 浏览:974