链路聚合
一、链路聚合技术介绍
以太网链路聚合简称链路聚合,它通过将多条以太网物理链路捆绑在一起成为一条逻辑链路,从而实现增加链路带宽的目的。同时,这些捆绑在一起的链路通过相互间的动态备份,可以有效地提高链路的可靠性。
链路聚合的功能:
1、增加了带宽---将多个链路的容量组合到一个逻辑链路中。
2、自动故障转移/故障恢复---将来自故障链路的通信转移到聚合中的工作链路。
3、负载均衡---传入和外发通信都是根据用户选择的负载均衡策略(如源和目标 MAC 或 IP 地址)进行分配的。
4、改进了管理---所有接口作为一个单元进行管理。
5、减少了网络地址池消耗---可以将一个 IP 地址指定给整个聚合。
将多个以太网接口捆绑在一起所形成的组合称为聚合组,而这些被捆绑在一起的以太网接口就称为该聚合组的成员端口。每个聚合组唯一对应着一个逻辑接口,我们称之为聚合接口。
聚合组内的成员端口具有以下两种状态:
选中状态:此状态下的成员端口可以参与用户数据的转发,处于此状态的成员端口简称为“选中端口”。
非选中状态:此状态下的成员端口不能参与用户数据的转发,处于此状态的成员端口简称为“非选中端口”。
操作Key是在链路聚合时,聚合控制根据端口的配置(即速率、双工模式、up/down状态、基本配置等信息)自动生成的一个配置组合。同一聚合组中所有处于选中状态的端口有相同的操作Key。
基于IEEE802.3ad标准的LACP(Link Aggregation Control Protocol,链路聚合控制协议)协议是一种实现链路动态聚合的协议,运行该协议的设备之间通过互发LACPDU(Link Aggregation Control Protocol Data Unit,链路聚合控制协议数据单元)来交互链路聚合的相关信息。
LACP协议基本功能:利用LACPDU的基本字段可以实现LACP协议的基本功能,基本字段包含以下信息:系统LACP优先级、系统MAC地址、端口聚合优先级、端口编号和操作Key。动态聚合组内的成员端口会自动使能LACP协议,并通过发送LACPDU向对端通告本端的上述信息。当对端收到该LACPDU后,将其中的信息与本端其它成员端口收到的信息进行比较,以选择能够处于选中状态的成员端口,使双方可以对各自接口的选中/非选中状态达成一致,从而决定哪些链路可以加入聚合组以及某链路何时可以加入聚合组。
LACP协议优先级:LACP优先级分为系统LACP优先级和端口聚合优先级两类;
系统LACP优先级:系统LACP 优先级就是为了区分两端优先级的高低而配置的参数;值越小优先级越高,缺省系统LACP 优先级值为32768。
端口聚合优先级:端口优先级是为了区别不同接口被选为活动接口的优先程度。值越小优先级越高。缺省情况下,接口LACP 优先级为32768。
LACP协议工作模式:启动LACP的端口可以有两种工作模式,Passive和Active。(注:必须有一端为Active模式才能正常协商)
Passive:被动模式,该模式下端口不会主动发送LACPDU报文,在接收到对端发送的LACP报文后,该端口进入协议计算状态。
Active:主动模式,该模式下端口会主动向对端发送LACPDU报文,进行LACP协议的计算。
LACP超时时间:LACP超时时间是指成员端口等待接收LACPDU的超时时间。在三倍LACP超时时间之后,如果本端成员端口仍未收到来自对端的LACPDU,则认为对端成员端口已失效。LACP超时时间只有短超时(1秒)和长超时(30秒)两种取值。
LACP报文分析:这里主要分析报文的端口状态,可用来分析聚合失败原因。
LACP_Activity: 端口在链路控制中的主从状态,0表示Passive, 1表示Active。
LACP_Timeout: 超时时间,0表示长超时,1表示短超时
Aggregation: 表示端口的聚合能力。 TRUE(1)表示链路是可聚合的,FALSE(0)表示链路是独立链路,不可聚合
Synchronization: 表示端口当前聚合是否完成。TRUE(1)表示发送的链路处于IN_SYNC状态,即端口已被分配到正确的聚合组中, FALSE(0)表示链路为OUT_OF_SYNC状态,即端口还没有选择正确的聚合组
Collecting: TRUE(1)表示当前链路收包enable, 否则为FALSE(0)
Distributing: TRUE(1)表示当前链路发包enable, 否则为FALSE(0)
Defaulted: TRUE(1)表示Actor使用的Partner信息来自管理员配置的默认值。FALSE(0)表示Actor使用的Partner信息来自接收的LACPDU。
Expired: TRUE(1)表示Actor RX状态机处于超时状态,否则不在超时状态。
网络设备常用的为第三种和第五种模式(WOC现支持第三种和第五种聚合配置)。
聚合口数据报文按包轮询从物理接口转发。
负载均衡---所有链路处于负载均衡状态,轮询方式往每条链路发送报文,基于per packet方式发送。传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1....一直循环下去,直到最后一个传输完毕)。在一个双网卡绑定的机器上ping一个地址,你会发现两个网卡都有流量发出。负载到两条链路上,说明是基于per packet方式进行轮询发送。
容错能力---这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。
性能问题---一个连接或者会话的数据包如果从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降。Bond0在大压力的网络传输下,性能增长的并不是很理想。
聚合口口MAC地址---使用第一个加入聚合的物理口MAC地址。
交换机支持---该模式下,由于绑定的所有网卡的IP都被修改为同一个MAC地址。此时交换机收到发往该MAC地址的数据包时,将不知道从对应的哪个端口转发该数据,为了解决交换机的这个问题,交换机应做端口绑定,将数据发往逻辑聚合端口,之后由聚合端口从多个端口转发数据。
此种模式几乎已被淘汰。
只有Active状态的物理接口才转发数据报文。
容错能力---只有一个slave是激活的(active)。也就是说同一时刻只有一个网卡处于工作状态,其他的slave都处于备份状态,只有在当前激活的slave故障后才有可能会变为激活的(active)。在bonding 2.6.2和以后的版本中,如果在active-backup模式下出现failover【译注:指一个slave发生故障,另一个slave变为激活的设备】,bonding将会在新的slave上发出一个或多个ARP请求,其中一个ARP请求针对bonding master接口及它上面配置的每个VLAN接口,从而保证该接口至少配置了一个IP地址。针对VLAN接口的ARP请求将会被打上相应的VLAN id。
无负载均衡---此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N。
聚合口口MAC地址---使用第一个Active状态的物理接口的MAC地址,且后续active端口DOWN后,backup端口启用,聚合口MAC地址不变。
无需交换机支持--- MAC地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。
此种模式几乎已被淘汰。
聚合口数据报文按源目MAC、源目IP、源目端口(具体元素可配)进行异或HASH运算得到一个index值,根据该index值查找接口转发数据报文(这样可保证所选元素被同一接口所转发)。
负载均衡---基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC
地址) % slave数量。其他的传输策略可以通过xmit_hash_policy(HASH元素)选项指定。
容错能力---这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。
性能问题---该模式将限定流量,以保证到达特定对端的流量总是从同一个接口上发出。既然目的地是通过MAC地址来决定的,因此该模式在“本地”网络配置下可以工作得很好。如果所有流量是通过单个路由器(比如 “网关”型网络配置,只有一个网关时,源和目标mac都固定了,那么这个算法算出的线路就一直是同一条,那么这种模式就没有多少意义了。),那该模式就不是最好的选择。(此问题可由配置解决)
交换机支持---和balance-rr一样,交换机端口需要能配置为“port channel”。这模式是通过源和目标mac做hash因子来做xor算法来选路的。
这种模式的特点是一个报文会复制两份往bond下的两个接口分别发送出去,当有对端交换机失效,我们感觉不到任何downtime,但此法过于浪费资源;不过这种模式有很好的容错机制。此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题。
此种模式不常用。
在动态聚合模式下,聚合组内的成员端口上均启用LACP协议,其端口状态通过该协议自动进行维护。
负载均衡---基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过xmit_hash_policy(HASH元素)选项指定。
容错能力---这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。
交换机支持---交换机需支持LACP协议,并在物理接口使能LACP,且每个物理接口的双工模式和接口速率需协商一致;必须有一端设备LACP模式为active。
对比blance-xor的优点---定期发送LACPDU报文维护链路聚合状态,保证链路质量。
在每个物理 接口上根据当前的负载(根据速度计算)分配外出流量。如果正在接收数据的物理接口口出故障了,另一个物理接口接管该故障物理口的MAC地址。即:eth0与eth1口聚合,设备开始会以eth0口MAC为源MAC地址发送免费ARP报文,对端设备学习后加入arp表;发送报文时根据当前负载情况选择eth0还是eth1口转发,若从eth0口转发,则源MAC为eth0口MAC地址;若从eth1口转发,则源MAC为eth1口MAC地址。由于对端设备学习到的是eth0 口的MAC地址,所以数据报文只可能从eth0口进。
该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡,而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个物理接口的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。
动态聚合连接传输速率:即LACP报文发送速率,动态聚合协商阶段会协商LACP报文发送速率,动态聚合连接建立完成后,两端设备根据协商的速率互发LACP报文,LACP发送速率只有fast(1秒)和slow(30秒)两种取值,woc模式为fast。
MII链路监控频率:指检查聚合组内各物理端口状态的频率,单位ms,0表示禁用MII链路监控频率,woc默认设置为100ms。
延迟禁用端口:系统检测到聚合组内某一端口down了,将其从聚合组删除的延迟时间,该选项只对MII链路监控频率有效,应设置为MII链路监控频率的整数倍,单位ms,woc默认设置为0ms。
丢弃重复帧:是否丢弃重复的帧。
在balance-xor和802.3ad模式下选择不同的hash模式,用来选择报文转发出接口。目前支持的算法有三种:源MAC与目的MAC异或、源MAC目的MAC源IP目的IP异或、源IP目的IP源端口目的端口异或。
此种算法优点:相同元素的报文能固定同一接口转发。(可与MAC跟踪进行测试,目测某种情况下会有问题)
源MAC地址和目的MAC地址(元素可配)共同决定每个数据包的发送物理接口号,由源MAC地址和目的MAC地址进行异或计算,并将异或结果对接口数求余计算。
源MAC+目的MAC算法:用于二层网络环境。 #交换机较常用,二层交换机只能根据mac地址转发。
源目MAC地址+源目IP算法:用于二,三层网络环境。 #用于三层转发情况下,源目mac地址唯一,源目IP地址不同情况。
源目IP+源目端口算法:用于三,四层网络环境。 #可根据源目端口来区分同一源目IP不同连接的数据,做的四层负载分担。
在设备内部,每创建一个聚合组时,底层同时创建对应该聚合组的一个hash表,该表存在于交换芯片上,hash表内容如下:
交换芯片的index数量为硬件特性,一般为256、512、1024。Index值越大,负载均衡效果越好。以1024个index、2个物理接口为例:
Index Interface
0 eth0
1 eth1
2 eth0
3 eth1
4 eth0
. .
. .
1022 eth0
1023 eth1
聚合口负载均衡转发原理:
1、创建聚合口后,首先在底层生成hash表。
2、根据配置的HASH算法,提取相关元素的值。
3、根据特定的HASH运算,得到一个10bits的值。
4、找到底层HASH表项中该值对应的出端口。
5、把报文从这个出端口转发出去。
1、静态聚合/动态聚合+三层物理口
2、静态聚合/动态聚合+二层物理口
3、静态聚合/动态聚合+三层vlan口
4、静态聚合/动态聚合+二层vlan口
环境搭建心得:聚合模式网线连接较多,可先画出拓扑图,标记好各个设备的接口IP以及连线端口号(可先设计好),配置完成后,再根据拓扑图进行连线。
1、思科交换机配置
以下为静态聚合配置,动态聚合与静态聚合在配置上只有如下区别(动态聚合只涉及IEEE标准协议,思科私有协议未考虑):
Switch(config-if-range)#channel-group 40 mode on #模式为“on”,表示静态聚合(即强制捆绑)。
Switch(config-if-range)#channel-group 40 mode active #模式为“active”,表示动态聚合主动模式,在该模式下交换机会主动发送LACP协商报文。
Switch(config-if-range)#channel-group 40 mode passive #模式为“passive”,表示动态聚合被动模式,该模式下交换机不会主动发送LACP协商报文。
思科交换机静态聚合三层物理口模式配置,以下为具体配置命令及注释:
配置思路:创建三层聚合组→配置聚合口IP地址→配置负载分担算法→将物理接口加入聚合组
Password: #输入密码cisco
Switch>
Switch>en #进入特权模式
Password: #输入密码cisco
Switch# #特权模式,可进行系统参数配置,及查看配置。
Switch#configure t #进入全局模式,可进行功能配置
Enter configuration commands, one per line. End with CNTL/Z.
Switch(config)#interface port-channel 40 #配置聚合接口(思科3750X聚合口number为1-48)
Switch(config-if)#no switchport #将聚合口修改为三层口
Switch(config-if)#ip addr 1.1.1.1 255.255.255.0 #配置聚合口IP为1.1.1.1/24
Switch(config-if)#no shutdown #使能接口,真机情况下可以不操作,模拟器必须使能接口,不然接口不能UP
Switch(config-if)#exit #退出聚合口配置模式
Switch(config)#port-channel load-balance dst-ip #配置聚合口负载分担算法为源+目的
dst-ip Dst IP Addr
dst-mac Dst Mac Addr
src-dst-ip Src XOR Dst IP Addr
src-dst-mac Src XOR Dst Mac Addr
src-ip Src IP Addr
src-mac Src Mac Addr
Switch(config)#interface rang GigabitEthernet1/0/23-24 #选取GigabitEthernet1/0/23-24接口进行配置
Switch(config-if-range)#no switchport #交换机默认为二层接口,这里需修改为3层接口
Switch(config-if-range)#channel-group 40 mode on #将接口加入聚合组40,模式为on
到这里交换机聚合口就已经配置完成了。
思科交换机静态聚合三层vlan模式配置:
配置思路:创建vlan→给vlan配置IP地址→配置聚合口→把聚合口加入vlan→把接口加入聚合组
注:cisco交换机接口vlan一般有两种类型,一种是trunk口,一种access口。woc设备需要关注的是trunk口,若对端交换机为trunk口,那么交换机发出来的报文是带vlan tag(2.5层)的。woc设备对该报文进行处理时需要脱tag标记和打tag标记。
配置vlan方式一:
Switch#vlan d #进入vlan数据库
% Warning: It is recommended to configure VLAN from config mode,
as VLAN database mode is being deprecated. Please consult user
documentation for configuring VTP/VLAN in config mode.
Switch(vlan)#vlan 30 #添加vlan30,可使用“vlan 30 name **”给vlan30命名,若不加,则默认vlan0030
VLAN 30 added:
Name: VLAN0030
Switch(vlan)#vlan 40 #添加vlan40
VLAN 30 added:
Name: VLAN0040
配置vlan方式二:
Switch#conf t #进入全局模式
Enter configuration commands, one per line. End with CNTL/Z.
Switch(config)#vlan 30 #添加vlan30
Switch(config-vlan)#name vlan30 #vlan30的名字为vlan30(相当于描述)
Switch(config)#vlan 40
Switch(config-vlan)#name vlan40 Switch(config)#int vlan 30 #进入vlan30接口
Switch(config-if)#ip add 1.1.1.1 255.255.255.0 #配置vlanIP地址
Switch(config-if)#exit
Switch(config)#int vlan 40 #进入vlan40接口
Switch(config-if)#ip add 1.1.2.1 255.255.255.0 #配置vlanIP地址
Switch(config-if)#exit
Switch(config)#int port-channel 15 #创建聚合组15
Switch(config-if)#switchport trunk encapsulation dot1q #封装dot1q帧格式(802.1q),配置trunk口时需要
Switch(config-if)#switchport mode trunk #设置为trunk口(强制) access口命令为:switchport mode access
Switch(config-if)#switchport nonegotiate #禁止协商
Switch(config-if)#switchport trunk allowed vlan 30,40 #设置trunk口允许通过的vlan为vlan30,40 ,access口命令为:switchport access vlan 30
Switch(config-if)#switchport trunk native vlan 1 #设置本地vlan为vlan1 ,配置trunk口时需要
Switch(config-if)#exit
Switch(config)#int rang GigabitEthernet1/0/23-24 #选取GigabitEthernet1/0/23-24接口进行配置
Switch(config-if-range)#switchport trunk encapsulation dot1q #思科交换机物理接口也得配置vlan信息
Switch(config-if-range)#switchport mode trunk
Switch(config-if-range)#switchport trunk allowed vlan 30,40
Switch(config-if-range)#switchport trunk native vlan 1
Switch(config-if-range)#channel-group 15 mode on #将接口加入聚合组15,模式为on
思科交换机静态聚合二层配置:
配置思路:创建聚合组→把接口加入聚合组
Switch(config)#int port-channel 16
Switch(config)#int rang GigabitEthernet1/0/23-24
Switch(config-if-range)#channel-group 15 mode on
聚合测试常用的思科交换机查询命令:
Switch#sh ip int b #查看接口信息
Switch#sh running-config #查看所有配置信息
Switch#sh ip route #查看路由表
Switch#show processes #查看交换机CPU使用情况
Switch#show etherchannel load-balance #查看负载分担算法
Switch#test etherchannel load-balance interface port-channel 40 ip 1.1.1.111 2.2.2.2 #查询1.1.1.111访问2.2.2.2选择聚合组40里面的哪一个物理端口
Switch#show etherchannel port-channel #查看聚合组信息
Switch#show etherchannel summary #查看聚合组信息
Switch#show int etherchannel module 1 #查看聚合组信息
当聚合失败时,可使用上述聚合信息查看命令进行分析,缩小问题范围。
静态聚合失败:可查看接口状态(up/down),双工模式,传输速率等信息。
动态聚合失败:除了查看以上信息之外,动态聚合可抓包查看lacp报文收发情况。并分析报文字段,可了解LACP协商到某一阶段。
注:动态聚合建立成功后会定期(fast/slow)发送LACP报文维护聚合关系。