M-LAG(Multichassis Link Aggregation Group)即跨设备链路聚合组,是一种实现跨设备链路聚合的机制。M-LAG主要应用于普通以太网络、VXLAN和IP网络的双归接入,可以起到负载分担或备份保护的作用。相较于另一种常见的可靠性接入技术——堆叠,M-LAG在可靠性、升级等方面有着显著的优势。
1 工作原理
1.1 基本概念
DFS (Dynamic Fabric Service) Group
用于实现M-LAG设备之间的配对,M-LAG设备之间的接口状态、表项等信息同步。
DFS Group的角色区分主备,配对成功后,两台设备经过DFS Group协商,协商出DFS主设备(M-LAG主设备)和DFS备设备。
peer-link
M-LAG设备之间的直连链路,用于传输协议报文、表项同步报文,并转发部分流量。
通常情况下,M-LAG和堆叠一样,都有一种本框进本框出的机制,尽量避免通过peer-link去转发流量。
DAD link
双主检测链路,是一条三层互通链路,用于M-LAG设备之间发送双主检测报文。
正常情况下,双主检测链路不会参与M-LAG的任何转发行为,只在DFS Group配对失败或者peer-link故障场景下,用于检查是否出现双主的情况。
H3C设备中叫keepalive链路
M-LAG成员接口
连接用户侧设备或主机的Eth-trunk接口,从而实现跨设备链路聚合的目的。
孤立端口
未加入任何M-LAG成员口的端口。
保留端口
当peer-link故障时,M-LAG分裂,配对的两台设备无法相互发送协议报文及同步报文,两台设备处于双主状态。为了避免流量转发异常,需要将一端M-LAG设备上的端口置为Error-Down,但在实际组网应用中,某些端口并不希望被置为Error-Down,这类peer-link故障时不被Error-Down的端口被称为保留端口。
缺省情况下,设备上仅管理网口和peer-link接口为保留口,其他端口需手工设置。
1.2 协议交互
❶ DFS Group配对
首先通过peer-link链路发送DFS Group的Hello报文。当设备收到对端的Hello报文后,会判断报文中携带的DFS Group编号是否和本端相同,如果两台设备的DFS Group编号相同,则两台设备DFS Group配对成功。
❷ DFS Group协商主备
配对成功后,两台设备会向对端发送DFS Group的设备信息报文,设备根据报文中携带的DFS Group优先级以及系统MAC地址确定出DFS Group的主备状态。
DFS Group的角色区分为主和备,正常情况下,主设备和备设备同时进行业务流量的转发,转发行为没有区别,仅在故障场景下,主备设备的行为会有差别。
❸ M-LAG成员接口协商主备
通过peer-link链路发送M-LAG设备信息报文,报文中携带了M-LAG成员接口的配置信息。在成员口信息同步完成后,确定M-LAG成员接口的主备状态。
与对端同步成员口信息时,状态由Down先变为Up的M-LAG成员接口成为主M-LAG成员口,对端对应的M-LAG成员口为备,且主备状态默认不回切。
❹ 双主检测
通过双主检测链路发送双主检测报文,在45秒内两台设备均能够收到对端发送的双主检测报文,双活系统即开始正常的工作;若45秒内未收到双主检测报文则心跳超时。一旦设备感知到peer-link故障,设备会快速发送双主检测链路报文,加速检测。
在DFS Group配对失败或者peer-link故障场景下,双主检测链路用于检查是否出现双主的情况。
两台设备在心跳链路Up之后即会按照周期发送双主检测报文。若DFS Group绑定了本端和对端的IP地址,则在二次故障恢复场景下(设备已使能二次故障增强功能),即原DFS主设备或备设备故障恢复且peer-link链路仍然故障时,M-LAG设备根据双主检测报文中携带的DFS信息协商出HB DFS主备状态,触发HB DFS状态为备的设备相应端口Error-Down,从而避免双主场景下的流量异常。
❺ M-LAG同步信息
通过peer-link同步MAC表项、ARP以及STP等,并发送M-LAG成员端口的状态,这样任意一台设备故障都不会影响流量的转发,保证正常的业务不会中断。
1.3 M-LAG防环
单向隔离机制
接入设备或网络侧到达M-LAG配对设备的单播流量,会优先从本地转发出去,peer-link链路一般情况下不用来转发数据流量。当流量通过peer-link链路广播到对端M-LAG设备,在peer-link链路与M-LAG成员口之间设置单方向的流量隔离。即从peer-link口进来的流量不会再从M-LAG口转发出去,所以不会形成环路
。
2 协同工作
2.1 STP
由于peer-link为二层链路,且会允许所有的VLAN通过,因此涉及到生成树的问题,这条线路是M-LAG的生命线,因此不能够被STP阻塞掉。有两种方案解决这个问题
-
手工将M-LAG设备配置为根,并将两台设备的桥ID配置成一致,这样两台设备都认为自己的是根桥,形成逻辑上的一台根桥
-
使用V-STP同步信息,无需让M-LAG交换机变成根桥
V-STP(Virtual Spanning Tree Protocol)
二层拓扑管理特性,核心思想是将两台设备的STP协议虚拟成一台设备的STP协议,对外呈现为一台设备进行STP协议计算。
STP可以感知M-LAG主备协商状态,M-LAG主备设备配置了V-STP,在M-LAG主备协商成功后,两台设备被虚拟化成一台设备进行端口角色计算和快速收敛计算。STP需要同步M-LAG主备的桥MAC信息和实例优先级信息。M-LAG主备协商成功后,M-LAG备设备使用M-LAG主设备同步过来的桥MAC信息和实例优先级信息进行STP计算和收发报文,保证虚拟化成一台设备后的STP计算参数。
当前,V-STP只能用于M-LAG组网,可以解决多级M-LAG互联场景和组成M-LAG的设备作为非根桥场景的需求。
配置V-STP功能时,需要保证组成M-LAG的两台设备上STP/RSTP定时器配置一致,否则可能导致网络拓扑震荡。
在多级M-LAG互联场景中,可以根据需要,将这两种方案结合起来使用。注意手工配置的根交换机建议开启根防护。
2.2 L3网关
当M-LAG的下游设备是二层设备时,M-LAG主备设备需要同时作为三层网关,必须保证M-LAG成员接口对应的VLANIF或VBDIF接口具有相同的IP地址和MAC地址。可以通过如下方式实现:在VLANIF或VBDIF接口上配置相同的IP地址和虚拟MAC地址(双活)。
另外还可以配置VRRP,结果是M-LAG组中的所有交换机都会扮演master的角色。
在M-LAG双归接入VXLAN的场景中,当下行一条链路发生故障时,业务流量需绕行M-LAG设备之间的peer-link链路。因此,在该场景下M-LAG设备之间必须配置静态Bypass VXLAN隧道,将绕行的业务流量引导至peer-link链路上。
2.3 路由协议
当M-LAG的下游设备是三层设备时,通常需要和M-LAG主备设备建立动态路由协议的邻居关系。在这种场景下,M-LAG主备设备要在成员口对应的VLANIF接口或VBDIF接口配置IP地址,M-LAG接口对应的VLANIF/VBDIF接口配置不同的M-LAG IPv4/IPv6 Link-local地址用于OSPF/OSPFv3动态路由协议邻居建立
,使得M-LAG成员设备和DeviceC之间建立OSPF/OSPFv3邻居。
由于M-LAG主备设备使用了相同的IP地址和MAC地址,无法同时和下游设备建立邻居关系,因此需要另外在M-LAG主备设备上配置sub地址来用于动态路由协议的邻居建立。
配置方式如下:
[DeviceB] interface vlanif 100
[DeviceB-Vlanif100] ip address 10.100.0.1 255.255.255.0
[DeviceB-Vlanif100] ospf source sub-address 10.100.0.3
[DeviceB-Vlanif100] m-lag ip address 10.100.0.3 255.255.255.0 # sub地址
[DeviceB-Vlanif100] mac-address 0000-5e00-0101
[DeviceB-Vlanif100] arp proxy enable
[DeviceB-Vlanif100] quit
3 故障恢复
3.1成上行链路故障
这种情况下,会通过peer-link链路进行转发
。M-LAG主设备上行链路故障恢复后,流量也恢复从主设备转发到网络侧。
当故障的上行链路恰好为双主检测链路,此时对于M-LAG正常工作没有影响。一旦peer-link也发生故障,M-LAG出现双主冲突,双主检测又无法进行,则会出现丢包现象。
三层场景下,需要在M-LAG主备设备之间配置逃生链路,否则到达Master设备的上行流量无法通过peer-link链路到达Backup设备。
3.2 下行链路故障
当主M-LAG成员口故障时,所在的链路状态变为Down,此时备M-LAG成员口状态由备升主,双归场景变为单归场景
。在主M-LAG成员口故障的同时,主设备学习到的DeviceA侧MAC不会被清除,直接刷新MAC表的出端口指向peer-link口,实现流量快速切换,避免未知单播泛洪。
在故障M-LAG成员口恢复后,MAC表的出端口从peer-link指向M-LAG成员口,实现流量快速切换,避免未知单播泛洪。同时,为避免主备M-LAG成员口状态切换造成的某些协议振荡,设备支持M-LAG成员口状态不再回切,即由备升主的M-LAG成员口状态仍为主,原主M-LAG成员口在故障恢复后状态为备。
在M-LAG成员口故障,设备双归变单归场景下,默认对于报文出端口为M-LAG成员接口的所有ARP表项、ND表项、静态路由表项和动态路由表项申请备份的FRR资源,使得出接口指向peer-link口并形成主备路径下发,将表项的下一跳由M-LAG成员口切换为peer-link口,从而提升故障场景下的切换性能。
3.3 设备故障
- M-LAG主设备故障,M-LAG备设备将升级为主。原主设备侧M-LAG成员口链路状态变为Down,双归场景变为单归场景。
- M-LAG备设备故障,M-LAG的主备状态不会发生变化,M-LAG备设备侧成员口链路状态变为Down。M-LAG主设备侧成员口链路状态仍为Up,流量转发状态不变,双归场景变为单归场景。
M-LAG设备故障恢复时,peer-link先UP,DFS状态重新协商,M-LAG成员口恢复UP,流量恢复负载分担。M-LAG主设备恢复后设备状态仍然为主,M-LAG备设备恢复后设备状态仍然为备。
3.4 心跳线故障
若心跳链路承载三层网络的业务,心跳故障对设备流量转发会有影响。若心跳链路承载二层业务或不承载三层业务,心跳故障对设备流量转发无影响
3.5 peer-link故障
当peer-link故障但双主检测心跳状态正常时,在双主检测延时时间(缺省值为3s)后,会触发一端M-LAG设备上除逻辑端口、管理网口和peer-link接口以外的其他接口处于Error-Down状态。M-LAG系统按照如下先后顺序判断触发哪一端M-LAG设备的接口Error-Down:
- 是否存在Up状态的上行口:若一端M-LAG设备的上行口全部为Down状态,且另一端存在Up状态的上行口,则对上行口全部为Down状态的M-LAG设备触发端口Error-Down操作。
- peer-link接口所在接口板是否全部故障:若peer-link链路为直连聚合链路,一端M-LAG设备的peer-link接口所在接口板全部故障,且另一端M-LAG设备的peer-link接口所在接口板未全部故障,则对peer-link接口所在接口板全部故障的M-LAG设备触发端口Error-Down操作。
- 带宽通量差值大小:若一端M-LAG设备计算出的带宽通量差值比另一端M-LAG设备的带宽通量差值更大,则对带宽通量差值更大的那一端M-LAG设备触发端口Error-Down操作。
- 其他场景,如图 peer-link故障组网示意图所示,则对M-LAG备设备触发端口Error-Down操作。
DFS配对成功后,M-LAG设备默认每间隔10s统计一次带宽通量;当触发双主检测时,会同时触发M-LAG设备统计此时的带宽通量。
带宽通量差值计算公式:带宽通量差值=上一次统计到的带宽通量-触发双主检测时统计到的带宽通量,且每次统计带宽通量时,不包含peer-link接口。
如果某一端M-LAG设备计算出的带宽通量差值为负值,则该M-LAG设备的带宽通量差值按照0处理。
peer-link故障恢复时,处于Error Down状态的M-LAG成员口默认将在240s后自动恢复为Up状态(为了等待M-LAG主节点将表项同步到备节点),处于Error Down状态的其它接口将立即自动恢复为Up状态,流量恢复实现负载分担。
通过配置peer-link故障但双主检测心跳状态正常时触发Error-Down的端口包括逻辑端口,会触发M-LAG备设备上VLANIF接口、VBDIF接口、LoopBack接口以及M-LAG成员口处于ERROR DOWN状态。当peer-link故障恢复后,为保证大规格ARP同步正常,设备将在DFS Group配对成功后延迟6s恢复VLANIF接口、VBDIF接口、LoopBack接口为Up状态。此时,如果在接口下配置了接口三层协议状态延时Up时间,则VLANIF接口、VBDIF接口、LoopBack接口恢复Up状态的延迟时间为两者之和。