目录

为什么会出现M-LAG

M-LAG基本概念

M-LAG建立过程

M-LAG的协议兼容性

M-LAG的防环机制

M-LAG正常工作流量转发

单播流量转发

组播流量转发

广播流量转发

M-LAG故障场景流量转发

上行链路故障

下行链路故障

M-LAG主设备故障

Peer-link故障

M-LAG二次故障(Peer-Link故障+M-LAG设备故障)

V-STP

V-STP方式(推荐方式)

根桥方式

M-LAG技术的应用

M-LAG(Muntichassis Link Aggregation Group)跨设备链路聚合组,将不同设备上的不同端口组成一个聚合组,达到跟普通LAG一样的功能,主要应用场景是“双归接入”场景,即用户侧双归接入到两台设备上

对于下游设备来说,认为上游设备是一台设备


为什么会出现M-LAG

实现双归接入的传统技术有:堆叠、Smart-Link等技术

堆叠的多台设备使用同一个控制面,单点故障可能影响到整个系统

Smart-Link等技术使用的是主备方式接入,链路利用率不搞

M-LAG和堆叠的区别

堆叠是设备级别的多虚一,管理平面共用一个

MC-LAG协议级别的多虚一,管理平面是独立的

什么是协议级别的多虚一

即仅仅是在LACP这个协议上,将多个设备的接口认为是一台设备的接口,只有LACP协议这样认为,除此之外,这两台设备都是独立工作的

M-LAG基本概念

DFS-Group(Dynamic Fabric Service Group)动态交换服务组

通过DFS-Group对部署了M-LAG的设备进行配对,实现多台设备间的链路聚合

动态交换服务组的ID只能为1,绑定M-LAG的ID可以是1~2048

主备设备之间要确保M-LAG的ID是一致的

M-LAG双归设备之间的接口状态、表项等信息的同步需要依赖DFS Group协议进行同步

DFS 主/备设备

部署了M-LAG 并且状态为主/备的设备(也称为M-LAG主/备设备)

通过DFS Group协议协商

此处的主备交换机都会转发数据

正常情况下,主/备设备转发行为没有区别,其主备接口都可以进行负载分担转发

仅在故障场景下,主备设备的行为会有差别

双主检测链路(心跳链路-Keepalive链路)

是一条三层互通链路,用于在M-LAG主备设备之间发送双主检测报文

正常情况下双主检测链路不会参与M-LAG的任何转发行为

只有在故障发生的情况下用于检查是否出现双主的情况

链路配置的两种方式

  1. 可以单独配置配置一条三层链路
  2. 也可以通过现有IP网络互通,互通的链路就作为双主检测链路

HB DFS主/备设备

通过心跳链路报文协商的状态为主/备的设备(在心跳口上发送DFS报文进行主备协商)

正常情况下,对M-LAG的转发行为不会产生影响,仅用于二次故障场景

Peer-link链路

Peer-link链路是部署MC-LAG的两台设备之间必须存在的一条直连二层链路

此链路必须做链路聚合,此链路用于协商报文以及传输部分流量

Peer-link接口

peer-link链路两端直连的接口均为peer-link接口(Peer-Link接口默认放行所有Vlan)

接口配置为peer-link接口后,该接口上不能再配置其它业务。

Peer-Link接口ID只能为1

M-LAG成员口:

DFS主/备设备上连接用户侧的Eth-Trunk接口

M-LAG成员接口也分主备(接口的主备主要在组播场景下的转发行为有区别)

用户侧Switch

可以是交换机,也可以是主机

使用ETH-trunk(标准的LACP协议)接入双活系统,组成双归接入

M-LAG主/备设备同时转发用户侧流量

双活网关

在DFS主备设备上配置网关,作为用户侧的网关

主备设备上的网关配置相同的IP地址和MAC地址,实现双活网关

此双活网关也可以通过VRRP来实现

VRRP用来选举主备,此时需要双网关,为什么还要做VRRP

因为Peer-link默认拒绝放行VRRP的报文

并且对于设备来说,M-LAG的成员接口是一个逻辑接口,从本接口收到的VRRP报文不会再发送出去,即成员口不会将收到的VRRP报文在转发出去

此时主备都互相收不到对方的VRRP报文,不会进行VRRP主备协商

 

当将DFS主备交换机的VRRP的虚拟地址配置为一样时,由于主备之间不会选举主从

即两个都是主,也可以达到双活网关的效果

最早是通过VRRP来做双活的,但是现在更推荐配置相同IP、MAC的方式来实现双活网关的效果


M-LAG建立过程

4步建立M-LAG+1步双主检测

DFS Group Hello报文(设备信息报文)

携带自己的DFS Group ID、协议版本号、系统MAC等信息

DFS Group ID相同的设备配对成功

DFS Group设备信息报文

携带DFS Group优先级(优先级默认为100)、系统MAC等信息

确定DFS主、备设备

M-LAG设备信息报文

携带了M-LAG成员接口的配置信息

确定M-LAG成员接口的主备状态

M-LAG同步报文

同步的信息包括设备名、系统MAC、软件版本、M-LAG成员端口状态、STP BPDU信息、MAC表项、ARP表项、IGMP表项等

保证任意一台设备故障都不影响流量的转发,保证正常的业务不中断

注意事项

同步的MAC地址表和ARP表等其它表项时不是直接将表项同步过去,而是将生成表项的报文传递给对端(将生成表项的源报文封装在M-LAG的同步报文中传递给对方,对方根据源报文生成表项)

例如:

主/备设备通过端口收到的ARP生成表项后,将此ARP报文封装在DFS-Group同步报文通过Peer-link链路传递给备/主设备

备/主设备解封装DFSS-Group同步报文,得到ARP报文信息,根据此ARP报文信息再生成表项

此做法更容易实现版本之间的兼容性(即传递的是因)

双主检测

正常情况1s发送一次DAD报文进行检测

一旦感知故障100ms发送3次DAD报文进行检测(加速检测)

除了DAD报文,其余报文都在二层的Peer-Link链路上传输


M-LAG的协议兼容性

前提须知

M-LAG协议报文携带的DATA部分是按照TLV格式封装的,方便扩展

协议不兼容问题

M-LAG升级一般都是逐台升级(保证业务不中断)

在设备进行M-LAG升级过程中必然会出现版本不一致的情况

在设备升级过程中,备用设备升级到了新版,主设备还在旧版

如何解决兼容性问题,使其尽少丢包

解决的工作原理

如图所示,SWA和SWB组成一个M-LAG系统。

版本均为V1R5C10,现在要将两台设备升级为V2R1C00版本。

假设V2R1C00版本新增了一个同步LACP SystemID的功能

在V1R5C10版本,两端设备LACP System ID必须手动配置为一致

而在V2R1C00版本中,主设备会将自己的LACP SystemID封装在同步报文中,备设备收到后,会使用该System ID替换自己的SystemID,防止了手动配置错误的情况发生

那么升级过程如下:

1.SWB换包重启,M-LAG由双归变成单归,SWA独立承担报文转发

2.SWB升级完成后,以V2R1C00版本启动,发送HELLO报文重新配对

由于新增了一个功能,SWB发送的HELLO报文中新增了TLV(这里以新增TLV为例,实际新增功能并不一定会在HELLO报文中新增TLV)

3.SWA收到SWB的报文后,只处理可以识别的TLV,并向SWB发送Hello报文

4.SWB收到SWA发送的HELLO报文后,发现HELLO报文中携带的版本号比自己低

于是不会校验是否有该新增的TLV,两者可以正常协商(新增的TLV功能暂时不生效)

5.协商完成后,SWB开始发送LACP System ID的同步报文,这是一个新增的报文类型

SWA是仍然是老版本,不会处理,直接忽略

6.SWB接收不到SWA发送的同步LACP SystemID的报文,也不会有任何处理。

两设备继续保持手动配置System ID状态,LACP功能也就继续保持以前的工作状态

7.开始升级SWA,同之前类似,双归切换为单归,SWB独立承担报文转发

8.SWA升级完,最终两边版本一致

此时两台设备可以交互LACP System ID的同步报文

此时可以将之前手工配置的System ID删除,全部切换完自动协商形式


M-LAG的防环机制

对于广播流量

对广播泛洪流量进行单向隔离(类似堆叠的单向隔离机制)

单向隔离机制生效的前提

当协商出主备后,通过M-LAG同步报文来判断接入设备是否已经双活接入

如果设备已经双活接入,则M-LAG两台设备下发对应M-LAG成员口的单向隔离配置

如果成员端口已经断了一边,变为单归接入,此时就不用去下发单向隔离配置了

M-LAG同步报文是如何具体判断出接入设备是双活接入的呢?

M-LAG同步报文携带了成员端口状态,通过Peer-Link互发M-LAG报文

当感受到同一个M-LAG的成员口在不同的设备上Up起来了

M-LAG设备就知道这个M-LAG组是双活接入

注意事项

单向隔离机制主备都会隔离(看广播流量从那边上来,从备用上来,主就会隔离,从主上来,备就会隔离)

上图是广播流量从主设备上来,备设备被单向隔离了

单向隔离机制实现原理

检测到双活接入后,会下发全局ACL配置(配置如下)

允许通过 源端口为Peer-link接口,目的端口为M-LAG成员口的三层单播报文

拒绝通过 源端口为Peer-link接口,目的端口为M-LAG成员口的所有报文

即:通过匹配ACL规则,隔离由Peer-Link接口发往M-LAG成员口的广播等泛洪流量

当检测到为单归时,会撤销ACL全局配置


M-LAG正常工作流量转发

单播流量转发

自用户侧发往网络侧的已知单播流量由M-LAG主备设备形成逐流负载分担,共同进行流量的转发;自网络侧发往用户侧的已知单播流量同样由M-LAG主备设备形成逐流负载分担,共同进行流量的转发。

在用户侧通过Eth-Trunk负载分担算法将流量分到DFS主、备设备,实现负载分担

组播流量转发

组播接入二层网络——通过单向隔离机制来防止接收重复的组播流量

接入二层网络故障,单向隔离机制就会取消掉

 

 

组播接入三层网络——通过PIM协议来获取组播流量

三层网络中,对于组播接收者,要保证组播接收者只能收到一份组播流量(同组播源、组播组的流量只能是一份)

如何解决组播组成员收到重复流量的问题

按照以下规则由M-LAG主备设备在本地查找组播表后将流量负载分担给组播组成员

若组播组地址最后一位为奇数(例如225.1.1.1或FF1E::B),则由M-LAG成员端口状态为主的设备转发至组播组成员

若组播组地址最后一位为偶数(例如225.1.1.2或FF1E::A),则由M-LAG成员端口状态为备的设备转发至组播组成员

注意事项:

M-LAG主备设备不会发送剪枝报文,对于组播流量主备设备都收的到,只是转发给组成员是会进行筛选

一般主设备的成员端口状态也为主,但是不一定一直为主(正常情况下是主,发生障后就不一定为主了)

 

 

组播三层组网中,当上行链路故障,一部分组播成员收不到组播流量,如何解决

通过在主备之间加入三层链路,运行PIM,可以避免单上行

独立三层PIM链路的其它作用

当DFS主设备(端口状态为主)上行链路故障后,当下发奇数组播流量时,DFS主设备是收不到的

DFS备设备收到了此奇数组播流量,但是由于其端口状态为备,不转发奇数组播流量

此时就需要通过PIM独立三层口将奇数组播流量转发给DFS主,然后再由其下发给组播组成员

所以对于组播三层网络,建议加上独立的三层PIM链路,增强其可靠性

广播流量转发

网络上的的广播流量,单向隔离


M-LAG故障场景流量转发

M-LAG作为一种跨设备链路聚合的技术,把链路可靠性从单板级提高到了设备级。如果出现故障(不管是链路故障、设备故障还是peer-link故障),M-LAG都能够保证正常的业务不受影响

上行链路故障

若主/备上行链路故障,不会影响双主检测(双主检测还是1s一次)

主备设备能够正常转发数据

只不过下游通过主/备设备的流量均经过Peer-Link链路进行转发

下行链路故障

M-LAG主备状态不会发生变化,不会引发双主检测,但是成员端口状态可能会发生变化

如果M-LAG成员端口状态为主的链路出现故障

发生故障的M-LAG成员口所在的链路状态变为Down,双归场景变为单归场景

故障M-LAG成员口的MAC地址指向peer-link接口(将成员端口的MAC表项复制到Peer-Link口),将流量通过Peer-Link引到M-LAG备用设备

成员端口状态为备端口其状态转为主,流量切换到该链路上进行转发

对于组播源在网络侧,组播成员在接入侧的组播流量

当M-LAG主设备的M-LAG成员口故障时

通过M-LAG同步报文通知对端设备进行组播表项刷新

M-LAG主备设备不再按照组播地址奇偶进行负载分担

而是所有组播流量都由端口状态Up的M-LAG备设备进行转发,反之亦然

在故障M-LAG成员口恢复后

M-LAG成员口状态不再回切

由备升主的M-LAG成员口状态仍为主

原主M-LAG成员口在故障恢复后状态为备

M-LAG主设备故障

如果是M-LAG主设备故障

M-LAG主设备侧Eth-Trunk链路状态变为Down,M-LAG的主备状态会发生变化

M-LAG备设备将升级为主,其设备侧Eth-Trunk链路状态仍为Up,流量转发状态不变,继续转发流量,双归场景变为单归场景。

 

如果是M-LAG备设备发生故障

M-LAG备设备侧Eth-Trunk链路状态变为Down,M-LAG的主备状态不会发生变化

M-LAG主设备侧Eth-Trunk链路状态仍为Up,流量转发状态不变,继续转发流量,双归场景变为单归场景。

 

当M-LAG设备故障恢复时

peer-link先UP,DFS状态重新协商,M-LAG成员口恢复UP,流量恢复负载分担

M-LAG主设备恢复后设备状态仍然为主,M-LAG备设备恢复后设备状态仍然为备。

Peer-link故障

peer-link故障会引发双主现象

双归设备一旦感知peer-link口down,即立刻发起一次双主检测过程(100ms发3次DAD)

M-LAG应用在普通以太网络、VXLAN网络或IP网络的双归接入

peer-link故障但双主检测心跳状态正常时

会触发M-LAG备设备上除逻辑端口、管理网口、peer-link接口和堆叠口以外的其他接口处于Error-Down状态。

M-LAG应用在TRILL网络的双归接入

peer-link故障但双主检测心跳状态正常时,会触发M-LAG备设备上的M-LAG接口处于Error-Down状态。

Peer-Link故障恢复时

处于Error Down状态的其它接口将立即自动恢复为Up状态。

处于Error Down状态的M-LAG接口默认将在240s后自动恢复为Up状态

M-LAG二次故障(Peer-Link故障+M-LAG设备故障)

当Peer-link链路故障后,如果M-LAG备设备再次发生故障,此时不会对流量转发行为产生影响,仍由DFS状态为主的设备进行流量转发。

当Peer-link链路故障后,如果M-LAG主设备再次发生故障,将导致系统无法转发流量

 

 

此时需要通过二次故障增强功能来解决

若M-LAG已使能二次故障增强功能

则DFS状态为备的设备会借助M-LAG双主检测机制感知到DFS主设备故障(在一定周期内接收不到任何的M-LAG双主检测心跳报文会认为主故障)

此时DFS备设备将升级为DFS主设备并恢复设备上处于ERROR DOWN状态的端口为Up状态,继续转发流量。

 

 

若原DFS状态为主的设备故障恢复后但peer-link故障仍故障

若配了置LACP M-LAG的系统ID在一定时间内切换为本设备的LACP系统ID

则在LACP协商时接入侧仅选择上行链路中的一条链路为活动链路,实际流量转发正常。

若配置的LACP M-LAG的系统ID为缺省情况,即系统ID不回切

M-LAG两台设备均使用同一系统ID来与接入侧设备协商,链路均能被选中成为活动链路。

该场景下,由于peer-link链路仍然故障,M-LAG两端无法同步对端的优先级、系统MAC等信息,形成M-LAG两台设备双主的情况,可能导致流量异常。

 

此时,可以借助心跳链路报文中携带必要的DFS Group协商主备的必要信息(如DFS Group优先级、系统MAC等)来协商M-LAG两台设备的HB DFS主备信息

触发HB DFS状态为备的设备上某些端口处于ERROR DOWN状态,HB DFS状态为主的设备继续工作。


V-STP

V-STP方式(推荐方式)

V-STP(Virtua Spannning Tree Protocol)是二层拓扑管理特性,可以将两台设备的STP虚拟成一台设备的STP协议,对外呈现为一台设备进行STP协议计算

为什么要使用V-STP

需要给下游交换机营造出是一台设备的感觉,如果DFS主备设备都发各自的BPDU

下游交换机就会从一个逻辑接口上收到两份不同的BPDU,会认为自己连接了两台设备

正常情况下,一个物理接口收到的BPDU就是上游设备的那一个BPDU

V-STP具体实现原理

M-LAG主备设备配置了V-STP使能之后,在M-LAG主备协商成功后

STP同步M-LAG主备的桥MAC信息和实例优先级信息

M-LAG备设备使用M-LAG主设备同步过来的桥MAC信息和实例优先级信息进行STP计算和收发报文,保证虚拟化成一台设备后的STP计算参数。

主要应用场景

V-STP只能用于M-LAG组网

可以解决多级M-LAG互联场景和组成M-LAG的设备作为非根桥场景的需求。

注意事项

配置V-STP功能时,需要保证组成M-LAG的两台设备上STP/RSTP定时器配置一致

否则可能导致网络拓扑震荡。

根桥方式

通过配置根桥(V-STP出现之前使用此种方式)的方式也可以实现V-STP的功能

根桥方式如何具体实现

M-LAG主设备和备设备均作为STP网络中的根桥且配置相同的桥ID

将两台设备模拟成同一个根桥,M-LAG主备设备在二层网络中不受其他组网变化的影响,保证正常的工作(保证了主备交换机的端口不被阻塞)

注意事项

如果M-LAG设备是在接入层的,我们一般不会把接入层设备设置为根桥

如果上层网络是纯三层网络,此时把主备交换机是否设置为根桥意义也不大

以上两种情况我们会使用V-STP方式,现网中也是推荐使用V-STP方式

 

例如:现在Vxlan追求的是纯三层网络,使用V-STP效果更好


M-LAG技术的应用

N-LAG双归接入二层网络

 

M-LAG双归接入Vxlan网络

在DFS主备设备上配置Vxlan隧道(通过Eth-Trunk子接口配置)

 

多级M-LAG

在网络规模较大场景下, 可以通过配置多级M-LAG来保证链路可靠性

多级M-LAG应用场景,不能使用手动配置根桥的方式来进行STP破环,需要通过VSTP协议来同步M-LAG双归设备的STP协议状态信息。