M-LAG 技术笔记

M-LAG 简介

M-LAG(Multichassis link aggregation,跨设备链路聚合)将两台物理设备在聚合层面虚拟成一台设备来实现跨设备链路聚合,从而提供设备级冗余保护和流量负载分担。

M-LAG 基础概念

如 图1-1 所示,Device A 与 Device B 形成负载分担,共同进行流量转发,当其中一台设备发生故障时,流量可以快速切换到另一台设备,保证业务的正常运行。
图1-1 M-LAG网络模型示意图

  • M-LAG 接口:与外部设备相连的二层聚合接口。与外部设备上相同聚合组相连的 M-LAG 接口属于同一 M-LAG 组。如图1-1所示,Device A上的二层聚合接口 1 和 Device B 上的二层聚合接口 2 属于同一 M-LAG 组。M-LAG 组中的 M-LAG 接口由多条链路聚合组成,且具有相同的 M-LAG 组编号。

  • peer-link 接口:连接对端 M-LAG 邻居设备用于内部控制的接口。每台 M-LAG 设备只有一个 peer-link 接口。peer-link 接口间的链路为 peer-link 链路,M-LAG 设备通过 peer-link 链路交互协议报文及传输数据流量。一个 M-LAG 系统只有一条 peer-link 链路,peer-link 链路通过运行 DRCP协议 来交互信息。

  • Keepalive 链路:检测 M-LAG 邻居状态。关于 Keepalive 机制的详细描述,请参见 Keepalive 机制。

DRCP 协议

M-LAG 通过在 peer-link 链路上运行 DRCP(Distributed Relay Control Protocol,分布式聚合控制协议)来交互分布式聚合的相关信息,以确定两台设备是否可以组成 M-LAG 系统。运行该协议的设备之间通过互发 DRCPDU(Distributed Relay Control Protocol Data Unit,分布式聚合控制协议数据单元)来交互 M-LAG 的相关信息。

DRCPDU的交互

两端 M-LAG 设备通过 peer-link 链路定期交互 DRCP 报文。当本端 M-LAG 设备收到对端 M-LAG 设备的 DRCP 协商报文后,会判断 DRCP 协商报文中的 M-LAG 系统配置是否和本端相同。如果两端的 M-LAG 系统配置相同,则这两台设备可以组成 M-LAG 系统。

DRCP 超时时间

DRCP 超时时间是指 peer-link 接口或者 M-LAG 接口等待接收 DRCPDU 的超时时间。在 DRCP 超时时间之前,如果本端 peer-link 接口或者 M-LAG 接口未收到来自对端 M-LAG 设备的 DRCPDU,则认为对端 M-LAG 设备 peer-link 接口或者 M-LAG 接口已经失效。

DRCP 超时时间同时也决定了对端 M-LAG 设备发送 DRCPDU 的速率。DRCP 超时有短超时(3秒)和长超时(90秒)两种:

  • 若本端 DRCP 超时时间为短超时,则对端 M-LAG 设备将快速发送 DRCPDU(每1秒发送1个DRCPDU)。

  • 若本端 DRCP 超时时间为长超时,则对端 M-LAG 设备将慢速发送 DRCPDU(每30秒发送1个DRCPDU)

Keepalive 机制

M-LAG 设备间通过 Keepalive 链路检测邻居状态,即通过交互 Keepalive 报文来进行 peer-link 链路故障时的双主检测。

如果在指定时间内,本端 M-LAG 设备收到对端 M-LAG 设备发送的 Keepalive 报文:

  • 如果 peer-link 链路状态为 down,则本端和对端 M-LAG 设备根据收到的 Keepalive 报文选举主从设备,保证 M-LAG 系统中仅一台 M-LAG 设备转发流量,避免两台 M-LAG 设备均升级为主设备。

  • 如果 peer-link 链路状态为 up,则 M-LAG 系统正常工作。

如果在指定时间内,本端 M-LAG 设备未收到对端 M-LAG 设备发送的 Keepalive 报文时:

  • 如果 peer-link 链路状态为 down,则认为对端 M-LAG 设备状态为 down:

    • 本端设备为主设备时,如果本端设备上存在处于 up 状态的 M-LAG 接口,则本端仍为主设备;否则,本端设备角色变为 None 角色。

    • 本端设备为从设备时,则升级为主设备。此后,只要本端设备上存在处于 up 状态的 M-LAG 接口,则保持为主设备,否则本端设备角色变为 None 角色。

    • 当设备为 None 角色时,设备不能收发 Keepalive 报文,Keepalive 链路处于 down 状态。

  • 如果 peer-link 链路状态为 up,则认为 Keepalive 链路状态为 down。此时主从设备正常工作,同时设备打印日志信息,提醒用户检查 Keepalive 链路。

MAD 机制

peer-link 链路故障后,为了防止从设备继续转发流量,M-LAG 提供 MAD(Multi-Active Detection,多Active检测)机制,即在 M-LAG 系统分裂时将设备上部分接口置为 M-LAG MAD DOWN 状态,不允许此类接口转发流量,避免流量错误转发,尽量减少对业务影响。

当 peer-link 链路故障恢复后,为了防止丢包,从设备尽可能在延迟恢复时间内完成表项(MAC 地址表、ARP 表等)同步,其后该设备上处于 M-LAG MAD DOWN 状态的接口将恢复为 up 状态。

MAD DOWN 保持功能

当 peer-link 链路故障,Keepalive 链路正常工作时,主设备正常工作,从设备会自动关闭本设备上除 M-LAG 保留接口外的所有接口,将这些接口置为 M-LAG MAD DOWN 状态。如果此时 Keepalive 链路也发生故障,从设备上的接口会解除 M-LAG MAD DOWN 状态,并升级为主设备,使 M-LAG 系统中的两台设备都作为主设备转发流量,引起网络故障。为了避免以上情况,需要开启 M-LAG MAD DOWN 保持功能,使设备上的接口一直处于 M-LAG MAD DOWN 状态,不参与流量转发。

M-LAG 角色计算

图1-2 M-LAG 角色计算流程图

角色计算触发条件

角色计算触发条件包括:

  • M-LAG 设备在系统初始化时(包括新配置 M-LAG 或带 M-LAG 配置重启设备)。
  • peer-link 链路 UP 时,设备角色通过 peer-link 链路计算。
  • peer-link 链路故障,Keepalive 正常工作,设备角色通过 Keepalive 链路计算。
  • peer-link 链路和 Keepalive 链路均故障,根据本端 M-LAG 设备上 M-LAG 接口状态决定设备角色。
角色计算因素

当通过 peer-link 链路或 Keepalive 链路交互报文计算设备角色时,依次比较如下因素:

  • 比较设备所有M-LAG接口的状态,有可工作M-LAG接口的一端为优;

  • 比较计算前角色,若有一端为Primary,另一端为None,则Primary端优;

  • 比较 M-LAG MAD DOWN 状态,若一端存在处于 M-LAG MAD DOWN 状态的接口,另一端不存在处于 M-LAG MAD DOWN 状态的接口,则不存在处于 M-LAG MAD DOWN 状态的接口的一端优;

  • 比较设备健康状况,健康值越小越优,设备无故障运行时,健康值为0;

  • 比较设备角色优先级,越高越优;

  • 比较设备桥MAC,越小越优。

上述因素按顺序比较,结果为优的一端角色计算为Primary,另一端为Secondary。如果设备通过peer-link链路计算角色,则不比较设备所有M-LAG接口的状态。

M-LAG系统建立及工作过程

图1-3 M-LAG建立及工作过程示意图

如 图1-3 所示,Device A 和 Device B 之间 M-LAG 系统建立及工作过程如下:

  1. 当 M-LAG 设备完成 M-LAG 系统参数配置后,两端设备通过 peer-link 链路定期发送 DRCP 报文。当本端收到对端的 DRCP 协商报文后,会判断 DRCP 协商报文中的 M-LAG 接口编号是否和本端相同。如果两端的 M-LAG 接口编号相同,则这两台设备组成 M-LAG 系统。

  2. 配对成功后,两端设备会确定出主从状态。依次比较两端 M-LAG 设备的初始角色、M-LAG MAD DOWN 状态、设备的健康值、角色优先级、设备桥 MAC,比较结果更优的一端为主设备,具体比较原则请参见“M-LAG角色计算”。主从协商后,M-LAG设备间会进行配置一致性检查。有关一致性检查的详细介绍,请参见“配置一致性检查功能”。

  3. 当主从角色确定后,两端设备通过 Keepalive 链路周期性地发送 Keepalive 报文检测邻居状态。

  4. M-LAG 系统开始工作后,两端设备之间会实时同步对端的信息,例如 MAC 地址表项、ARP 表项等,这样任意一台设备故障都不会影响流量的转发,保证正常的业务不会中断。

M-LAG设备工作模式

M-LAG 设备工作模式分为以下两种:

  • M-LAG 系统工作模式:作为 M-LAG 系统成员设备参与报文转发。
  • 独立工作模式:脱离 M-LAG 系统独立工作,独自转发报文。

当 M-LAG 系统分裂时,为了避免 M-LAG 系统中的两台设备都作为主设备转发流量的情况,需要 M-LAG 设备独立工作。在 peer-link 链路和 Keepalive 链路均处于 DOWN 状态时,从设备会立即或经过一段时间切换到独立运行模式。

M-LAG 设备切换到独立运行模式后,聚合接口发送的 LACP 报文中携带的 M-LAG 系统参数还原为聚合接口的 LACP 系统 MAC 地址和 LACP 系统优先级,使同一 M-LAG 组中的两个聚合接口的 LACP 系统 MAC 地址和 LACP 系统优先级不一致。这样只有一边聚合接口的成员端口可以被选中,通过被选中的设备转发业务流量,避免流量转发异常。

配置一致性检查功能

M-LAG 系统建立过程中会进行配置一致性检查,以确保两端 M-LAG 设备配置匹配,不影响 M-LAG 设备转发报文。M-LAG 设备通过交换各自的配置信息,检查配置是否匹配。目前 M-LAG 支持对两种类型的配置一致性检查:

  • Type 1 类型配置:影响 M-LAG 系统转发的配置。如果 Type 1 类型配置不匹配,则将从设备上 M-LAG 接口置为 down 状态。

  • Type 2 类型配置:仅影响业务模块的配置。如果 Type 2 类型配置不匹配,从设备上 M-LAG 接口依然为 up 状态,不影响 M-LAG 系统正常工作。由 Type 2 类型配置对应的业务模块决定是否关闭该业务功能,其他业务模块不受影响。

为了避免设备 M-LAG 接口震荡,设备会在延迟恢复定时器(缺省为30s)一半时间之后进行配置一致性检查。

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

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

相关文章

C语言-指针及变量的概念与使用

1、指针的概念 计算机中所有的数据都必须放在内存中,不同类型的数据占用的字节数不一样,例如 int 占用 4 个字节,char 占 用 1 个字节。为了正确地访问这些数据,必须为每个字节都编上号码,就像门牌号、身份证号一样&a…

tauri开发中,使用node将png图片转成苹果的icns图标格式,解决tauri icon生成的mac图标过大问题

在tauri开发中,我们使用tauri icon生成的图标在windows上是正常的,但是在mac上就显示过大,也可以看tauri的issue:[v2]When using the Tauri Icon to generate icons, it is always larger than other icons in Mac tauri-apps/ta…

【Docker】Mac安装Docker Desktop导致磁盘剩余空间较少问题如何解决?

目录 一、背景描述 二、解决办法 三、清理效果 四、理论参考 解决方法 1. 清理未使用的 Docker 镜像、容器和卷 2. 查看 Docker 使用的磁盘空间 3. 调整 Docker 的存储位置 4. 增加磁盘空间 5. 调整 Docker Desktop 配置 6. 使用 Docker 清理工具(例如 D…

微信小程序navigateTo:fail webview count limit exceed

theme: nico 你们好,我是金金金。 场景 uniapp编写微信小程序,使用uni.navigateTo跳转的过程中报错如下: 报错意思也非常明显了:errMsg":"navigateTo:fail webview 数量超出限制 排查 排查之前我先贴一下代码 代码非…

类与对象(2)---类的6个默认成员函数

1.类的6个默认成员函数 任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。 2.构造函数 2.1构造函数特性 构造函数的主要任务是初始化对象。 它有如下特…

[OpenGL]使用OpenGL实现透明效果

一、简介 本文介绍了如何使用OpenGL实现透明效果(transparent),并在最后给出了全部的代码。 在实现透明效果时,使用OpenGL中的混合(Blend)功能,根据纹理贴图的 alpha 分量将各像素(…

【实用技能】ASP.NET Core:在同一个 Razor 视图中使用文档编辑器和查看器

Essential Studio for ASP.NET Core UI控件库是构建应用程序所需的卓越套件,提供支持的 ASP.NET Core 工具包拥有超过 85 个组件,包含构建业务线应用程序所需的一切,包括数据网格、图表、甘特图、图表、电子表格、时间表、数据透视网格等流行…

Android从Drawable资源Id直接生成Bitmap,Kotlin

Android从Drawable资源Id直接生成Bitmap,Kotlin val t1 System.currentTimeMillis()val bmp getBmpFromDrawId(this, R.mipmap.ic_launcher_round)Log.d("fly", "1 ${bmp?.byteCount} h${bmp?.height} w${bmp?.width} cost time${System.currentTimeMillis…

【JavaScript】LeetCode:96-100

文章目录 96 单词拆分97 最长递增子序列98 乘积最大子数组99 分割等和子集100 最长有效括号 96 单词拆分 动态规划完全背包:背包-字符串s,物品-wordDict中的单词,可使用多次。问题转换:s能否被wordDict中的单词组成。dp[i]&#x…

【扩散——BFS】

题目 代码 #include <bits/stdc.h> using namespace std; const int t 2020, off 2020; #define x first #define y second typedef pair<int, int> PII; int dx[] {0, 0, 1, -1}, dy[] {-1, 1, 0, 0}; int dist[6080][6080]; // 0映射到2020&#xff0c;2020…

柯桥生活英语口语学习“面坨了”英语怎么表达?

“面坨了”英语怎么表达&#xff1f; 要想搞清楚这个表达&#xff0c;首先&#xff0c;我们要搞明白“坨”是啥意思&#xff1f; 所谓“坨”就是指&#xff0c;面条在汤里泡太久&#xff0c;从而变涨&#xff0c;黏糊凝固在一起的状态。 有一个词汇&#xff0c;很适合用来表达这…

IOT物联网低代码可视化大屏解决方案汇总

目录 参考来源云服务商阿里云物联网平台产品主页产品文档 开源项目DGIOT | 轻量级工业物联网开源平台项目特点项目地址开源许可 IoTGateway | 基于.NET6的跨平台工业物联网网关项目特点项目地址开源许可 IoTSharp | 基于.Net Core开源的物联网基础平台项目特点项目地址开源许可…

CSP-X2024山东小学组T2:消灭怪兽

题目链接 题目名称 题目描述 怪兽入侵了地球&#xff01; 为了抵抗入侵&#xff0c;人类设计出了按顺序排列好的 n n n 件武器&#xff0c;其中第 i i i 件武器的攻击力为 a i a_i ai​&#xff0c;可以造成 a i a_i ai​ 的伤害。 武器已经排列好了&#xff0c;因此不…

信息收集—JS框架识别泄露提取API接口泄露FUZZ爬虫插件项目

前言 免杀结束了&#xff0c;我们开个新的篇章——信息收集。为什么我一开始先写信息收集的文章呢&#xff0c;是因为现在我才发现我的信息收集能力其实有点弱的&#xff0c;所以呢开始知不足&#xff0c;而后进。 什么是JS JS就是JavaScript的简称&#xff0c;它和Java是没…

性能调优专题(9)之从JDK源码级别解析JVM类加载机制

一、类加载运行全过程 当我们用java命令运行某个类的main函数启动程序时&#xff0c;首先需要通过类加载器把主类加载到JVM。 package com.tuling.jvm;public class Math {public static final int initData 666;public static User user new User();public int compute() {…

Gin 框架入门(GO)-1

解决安装包失败问题&#xff08;*&#xff09; go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct 1 介绍 Gin 是一个 Go (Golang) 编写的轻量级 http web 框架&#xff0c;运行速度非常快&#xff0c;Gin 最擅长的就是 Api 接口的高并发。 2 Gin 环境搭建…

Python如何从HTML提取img标签下的src属性

目录 前提准备步骤1. 解析HTML内容2. 查找所有的img标签3. 提取src属性 完整代码 前提准备 在处理网页数据时&#xff0c;我们经常需要从HTML中提取特定的信息&#xff0c;比如图片的URL。 这通常通过获取img标签的src属性来实现。 在开始之前&#xff0c;你需要确保已经安装…

web——upload-labs——第五关——大小写绕过绕过

先上传一个 先尝试直接上传一个普通的一句话木马 不行 可以看到&#xff0c;.htaccess文件也被过滤了&#xff0c;我们来查看一下源码 第五关的源码没有把字符强制转换为小写的语句&#xff1a; $file_ext strtolower($file_ext); //转换为小写 直接通过Burpsuite抓包修改文…

C#/WinForm拖拽文件上传

一、首先创建一个上传文件的类&#xff0c;继承Control类&#xff0c;如下&#xff1a; public class UploadControl : Control{private Image _image;public UploadControl(){this.SetStyle(ControlStyles.UserPaint | //控件自行绘制&#xff0c;而不使用操作系统的绘制Cont…

oracle查询字段类型长度等字段信息

1.查询oracle数据库的字符集 SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER NLS_CHARACTERSET; 2.查询字段长度类型 SELECT * FROM user_tab_columns WHERE table_name user AND COLUMN_NAME SNAME 请确保将user替换为您想要查询的表名。sname为字段名 这里的字…