华为DCN技术:M-LAG

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阻塞掉。有两种方案解决这个问题

  1. 手工将M-LAG设备配置为根,并将两台设备的桥ID配置成一致,这样两台设备都认为自己的是根桥,形成逻辑上的一台根桥

  2. 使用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:

  1. 是否存在Up状态的上行口:若一端M-LAG设备的上行口全部为Down状态,且另一端存在Up状态的上行口,则对上行口全部为Down状态的M-LAG设备触发端口Error-Down操作。
  2. peer-link接口所在接口板是否全部故障:若peer-link链路为直连聚合链路,一端M-LAG设备的peer-link接口所在接口板全部故障,且另一端M-LAG设备的peer-link接口所在接口板未全部故障,则对peer-link接口所在接口板全部故障的M-LAG设备触发端口Error-Down操作。
  3. 带宽通量差值大小:若一端M-LAG设备计算出的带宽通量差值比另一端M-LAG设备的带宽通量差值更大,则对带宽通量差值更大的那一端M-LAG设备触发端口Error-Down操作。
  4. 其他场景,如图 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状态的延迟时间为两者之和。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/731894.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[C++][数据结构][B-树][下]详细讲解

目录 1.B-树的实现1.B-树的结点设计2.插入key的过程3.B-树的插入实现4.B-树的简单验证5.B-树的性能分析6.B树的删除 2.B树3.B*树4.B-树总结5.B-树的应用0.B树可以在内存中做内查找吗?1.索引2.MYSQL索引简介1.MyISAM2.InnoDB 3.B树做主键索引相比B树的优势 1.B-树的实…

10.2 JavaEE——Spring MVC入门程序

要求在浏览器发起请求,由Spring MVC接收请求并响应,具体实现步骤如下。 一、创建项目 在IDEA中,创建一个名称为chapter10的Maven Web项目。 (一)手动设置webapp文件夹 1、单击IDEA工具栏中的File→“Project Structu…

如何用GO语言实现冒泡排序算法?

本章教程,介绍一下如何用GO语言实现基础排序算法中的冒泡排序。 一、程序代码 package mainimport ("fmt""math/rand""time" )// bubbleSort 函数实现冒泡排序算法 func bubbleSort(arr []int) {n

电脑文件夹怎么加密?文件夹加密的5种方法

在数字化时代,信息安全显得尤为重要。对于个人电脑用户来说,文件夹加密是一种有效保护隐私和数据安全的方法。本文将介绍五种文件夹加密的方法,帮助您更好地保护自己的重要文件。 如何设置文件夹密码方法一:利用Windows系统自带的…

不懂就问,开通小程序地理位置接口有那么难吗?

小程序地理位置接口有什么功能? 若提审后被驳回,理由是“当前提审小程序代码包中地理位置相关接口( chooseAddress、getLocation )暂未开通,建议完成接口开通后或移除接口相关内容后再进行后续版本提审”,那么遇到这种情况&#x…

使用Rsbuild构建基于Vue3+Vant4开发h5应用

目录 一、介绍 1.1 Vant介绍 1.2 Rsbuild介绍 1.3 Vue介绍 二、构建应用 1.第一步 2.第二步 3.第三步 4.第四步 5.第五步 6.在项目中使用 Vant4 组件 7.移动端适配Rem 8. 执行 cnpm run dev 启动项目 一、介绍 1.1 Vant介绍 Vant 是一个轻量、可定制的移动端组…

Python连接Redis(简单连接、连接池连接、存取数据示例)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

C语言王国——深入自定义类型(联合体、枚举)

目录 一、引言 二、联合体 2.1 联合体类型的声明 2.2 联合体大小的计算 2.3 联合体的实践运用 2.4 用联合体测试大小端字节序 三、枚举 3.1 枚举类型的声明 3.2 枚举类型的特点 四、总结 一、引言 我们刚学完了结构体,相信大家对自定义类型也有了些许了解&…

【Mac】FxFactory 8 Pro for Mac(视觉特效处理包)及同类型软件介绍

软件介绍 FxFactory Pro 是一款功能强大的插件管理和创作工具,专为视频编辑器和特效艺术家设计,适用于 macOS 系统。它集成了大量的视频特效插件,并与多种主流视频编辑软件无缝兼容,如 Final Cut Pro、Premiere Pro、After Effec…

第二十七篇——通信趋势:5G和IOT的商机在哪里?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 借势的重要性,但是要做到借势,得先看到&#xff0…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《含氢综合能源系统多目标最优折中分布鲁棒低碳调度》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

vue3爷孙组件通信——provide和inject

父组件中提供数据&#xff0c;并在子组件中注入这些数据&#xff0c;从而实现了组件之间的数据传递。可用于兄弟组件通信&#xff0c;爷孙组件通信&#xff0c;父子通信。 provide( ‘注入名’, 注入值" ) 和 inject(‘注入名’) 第一代组件&#xff1a; <template>…

节能减排如何替电子行业巨头降低成本

尖端科技与环境之间的矛盾&#xff0c;已经不再是科幻小说家笔下的虚构。 先进芯片制造从熔化硅开始&#xff0c;到使用大功率激光进行光刻&#xff0c;再到创造和维护真空状态&#xff0c;以及持续清洁工作&#xff0c;每一个环节都需要大量的电力支持。据统计&#xff0c;半…

高精度乘法的实现

这是C算法基础-基础算法专栏的第九篇文章&#xff0c;专栏详情请见此处。 引入 上次我们学习了高精度加法的实现&#xff0c;这次我们要学习高精度减法的实现。 高精度乘法与高精度加法的定义、前置过程都是大致相同的&#xff0c;如果想了解具体内容&#xff0c;可以移步至我的…

IKVM.net调用Jar包实现SM4解密

近期&#xff0c;我深入学习了如何使用IKVM.net来调用Jar包&#xff0c;这次的学习经历让我对Java与.NET之间的互操作性有了更深刻的理解。IKVM.net作为一款强大的工具&#xff0c;为我们打通了Java与.NET之间的桥梁&#xff0c;使得在.NET环境中调用Java库变得简单而高效。 在…

VB.net实战(VSTO):VSTOwpf体验框架打包教程

如果是考虑到Wps用户较多&#xff0c;就不建议采用侧边栏的形式 只是个体验框架&#xff0c;界面未作美化&#xff0c;office的用户可以用任意一种窗体&#xff0c;喜欢那个界面就写那个界面&#xff0c;wps的侧边栏只能弹出一部分&#xff0c;每次需要的手动拖动。 打包了案例…

Spring Bean 生命周期详解

Spring Bean 生命周期详解 在 Spring 框架中&#xff0c;Bean 的生命周期由 Spring 容器全权管理。了解和掌握 Bean 的生命周期对于使用 Spring 开发稳定且高效的应用程序至关重要。本文将详细介绍 Spring Bean 生命周期的五个主要阶段&#xff1a;实例化、属性注入、初始化、…

如何基于Redis实现分布式锁?

分布式锁介绍 对于单机多线程来说&#xff0c;在 Java 中&#xff0c;我们通常使用 ReetrantLock 类、synchronized 关键字这类 JDK 自带的 本地锁 来控制一个 JVM 进程内的多个线程对本地共享资源的访问。 下面是我对本地锁画的一张示意图。 本地锁 从图中可以看出&#xf…

NetSuite Non-Inventory Item 公司内外采购总账影响

上篇文章提到&#xff0c;Non-Inventory Item的科目维护会根据各个企业的实际情况而有所不同&#xff0c;通常情况下都涉及外部交易&#xff0c;即对外采购与销售&#xff1b;另外也涉及到公司内部的相关交易&#xff0c;本篇以采购为例&#xff0c;来看看公司内外采购交易所对…

【分布式系列】分布式锁timeout了怎么办?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…