你们好,我的网工朋友。
今天给你说说M-LAG技术。
总有人把M-LAG技术和IRF堆叠技术放在一起做对比,说这是可以取代堆叠的技术。
那M-LAG和堆叠到底有没有关系?
其实关系并不是很大,M-LAG可以理解为IRF和链路聚合的结合体。
那为什么这么说?M-LAG到底是啥技术?接着往下看就对了
今日文章阅读福利:《M-LAG最佳实践【华为官方出品】》
分享一份华为官方的M-LAG最佳实践手册给你。私信发送暗号“M-LAG”,即可限时获取资料哈。
M-LAG又叫做跨设备链路聚合技术,其实从名字来看,你就能发现M-LAG肯定和链路聚合有一定的关系。
所以我们先来将普通的链路聚合和M-LAG做一个对比。
我们都知道链路聚合有很多的优点,比如可以提高链路的带宽,增加链路的可靠性,提供流量的负载分担能力等。
但是对于链路聚合来说,存在一个很明显的缺点,那就是对参与聚合的设备有一定的要求。
这句话的含义并不是说对设备的型号有要求,而是对链路所连接的设备的要求,那就是要求参与聚合的这些链路都连接在同一台设备上。
就比如S5通过2条链路连接到S6,此时S5就可以配置链路聚合来连接到S6,当然S6也是要配置链路聚合的。
如图:普通的链路聚合(不区分动态还是静态)
这儿可能有细心的小伙伴就注意到了:
虽然链路聚合提高了链路的可靠性,提供了链路级冗余保护的能力;
但是如果S5故障了,那么是不是也就意味着,不管S5上有几条链路参与聚合并且聚合成功,这些链路都不能转发数据了。
所以链路聚合的缺点就在这,无法提供设备级别的冗余保护能力。
那到这儿可能有学过IRF的同学就提出了一个拓扑:
你可以看到这个拓扑中,S5和S6通过XGE1/0/50接口配置IRF,形成IRF系统,那么从控制层面来看S5和S6就相当于一台设备了。
那么此时是不是也就符合了链路聚合的要求:
一台设备通过多条链路连接到另一台设备,所以S5和S6对接S7是不是也可以配置链路聚合了。
这么做当然是没问题的,而且这种方式也是风靡一时,只不过这种架构也会存在一定的问题。
就拿IRF来说,对于IRF,你应该不陌生,你在学习IRF的时候,老师会这么说,将两台框式设备进行IRF,形成一台更大的框式设备,其中原先的两台框式设备的主控板,只有master设备的主用主控板上的CPU能够承担CPU的功能,对于其他的主控板均作为备用主控板来使用。
这也就是IRF的单主控的问题,也就是说如果IRF系统收到了一个报文,此时该报文要上送CPU处理,则该报文会上送主用主控板的CPU,而不是其他的备用主控板,这样来看,CPU的性能受到影响。
另一个IRF的问题就是升级的问题。
对于IRF系统来讲,普通情况下,想要进行IRF升级,必须同时对IRF系统中的所有设备进行升级,因为IRF的要求就是只有同型号同版本的设备才能完成堆叠,这一点其实是很不友好的。
因为我们更希望的是,我对其中一台设备升级,另一台设备先正常工作,互不影响,但是IRF之后变为一台设备,就决定了很难做到这一点。
但是你要说完全做不到也是不对的,因为在IRF升级的时候是有一定的方法解决这一点的,不过该方法相对较为复杂,但是可以极大的减少网络中断的时间。今天就不在详细阐述了。
所以针对于这些问题:
1.链路聚合要求问题,2.IRF的单主控问题。
就出现了M-LAG技术。
首先从名字来看,跨设备链路聚合,我们就知道它肯定解决了链路聚合要求必须是同一台设备的问题,其次,M-LAG系统中的设备是不同的设备,也就解决了IRF单主控的问题。
M-LAG系统是由两台独立的设备组成的,其实在官网上说的是对这两台设备的版本、型号等是没有要求的,但是为了避免出现各种问题,推荐在做M-LAG的时候,参与组成M-LAG系统的两台设备还是要保持同型号同版本。
在M-LAG系统中,我们只能有两台设备,一台是primary角色,也就是M-LAG的主设备,另一台是secondary角色,也就是M-LAG的备设备。
除了这俩种角色之外,还有一种角色是none角色,这是在一种比较特殊的情况下才会出现的角色。
这两种角色是通过选举原则选举出来的,选举原则如下:
M-LAG设备通过角色计算,可能出现三种设备角色,分别是primary、secondary和none角色。
而且并不是只有在M-LAG系统形成的时候才会进行角色计算,在以下四种情况下都会进行角色的计算:
第一种是M-LAG系统形成的时候;
第二种是peer-link链路down,但是keepalive链路up的时候,触发的双主检测;
第三种是peer-link链路重新恢复up的时候;
第四种是peer-link链路和keepalive链路都down的时候,此时会通过设备上M-LAG接口的状态来设置角色。
比较设备所有M-LAG接口的状态,有可工作M-LAG接口的一端为优;
比较计算前角色,primary端为优;
比较M-LAG MAD DOWN状态,不存在处于M-LAG MAD DOWN状态的接口的一端为优;
比较设备健康状况,健康值越小越优;
比较设备角色优先级,越高越优;
比较设备的桥mac地址,越小越优;
如果通过peer-link链路进行角色选择,则不比较设备的所有M-LAG接口的状态。
那好,我们继续回到M-LAG系统的组成介绍中来,刚才介绍了设备的角色,那么在M-LAG中除了设备之外还有链路。
这些链路分别是peer-link链路和keepalive链路以及M-LAG接口,在此先给你说peer-link链路和keepalive链路。
其实对于这两种链路来说,我们有一个很好的对比案例。
那就是将IRF的堆叠线缆和多活检测线缆和peer-link链路以及keepalive链路做对比,堆叠线缆就类似于peer-link链路,多活检测线缆就类似于keepalive链路。
所以peer-link链路的作用就是:
1.传递DRCP协议的报文DRCPDU,用来判断两个设备能否形成M-LAG系统;
2.跨设备流量需要经过peer-link链路传递。
对于peer-link链路而言,是M-LAG系统中最重要的一条链路,所以自然对peer-link链路的要求就格外的高。
也就是说并不是所有的接口都可以指定为peer-link链路的接口,必须是二层聚合接口才可以指定为peer-link链路接口,但是如果是在EVPN+VXLAN+M-LAG的组网中,peer-link链路也可以选择vxlan的tunnel接口作为peer-link链路的接口。
除此之外,peer-link链路的另一个要求就是对一个M-LAG系统来说,只能存在一条peer-link链路,可以通过创建二层聚合组,然后在聚合组中添加多条物理链路,将聚合组指定为peer-link链路接口的方式,来保证peer-link链路的可靠性。
这些是peer-link链路的作用以及你需要注意的内容。
对于在peer-link链路上传递的DRCPDU来说,因为其关系到M-LAG系统的形成,所以也是需要你重点关注的内容。
即然要判断能否形成M-LAG系统,那也就类似于IRF中两台设备能否堆叠到一起。
也就是说,肯定会协商相应的参数来判断M-LAG系统能否形成,这些参数包括系统的M-LAG系统编号、M-LAG系统优先级、M-LAG系统mac地址。
接下来我们单独对这三个进行解释:
M-LAG系统编号,这个你可以类比IRF中的成员编号来看,在IRF系统中,不同设备的成员编号是不同的,所以在M-LAG系统中也是同样的,M-LAG系统编号也不能相同。
第二个参数是M-LAG系统优先级,这一个参数就不能类比IRF中的irf成员优先级了,这个参数的作用是用来指定在LACPDU中的system-id字段的设备的优先级。
那不用想,另一个M-LAG的MAC地址肯定是LACPDU中的system-id字段的设备的mac地址了。
那这儿会有一个小问题,就是两台设备的M-LAG系统优先级和M-LAG系统mac地址要不要配置为相同的呢?
答案是肯定的。
因为要在LACPDU中携带system-id字段,如果不配置为相同的,当你和对方配置跨设备链路聚合的时候,而且是使用动态聚合的模式;
此时对端设备从一个接口收到的LACPDU中system-id字段假设是32768.1-1-1,另一个接口收到的LACPDU中的system-id字段假设是32768.2-2-2;
此时对于该设备而言,就很容易能判断出这两个接口是连接了两个不同的设备来配置的动态链路聚合,肯定会有一个接口聚合失败。
所以从这一点来看,两台设备的M-LAG系统优先级和M-LAG系统mac地址肯定是要配置成为一样的,但是M-LAG系统成员编号却不能一样。
那可能有的小伙伴会问了,在角色选举中有一个优先级越大越优,这个优先级是什么呢?
这个优先级是M-LAG的role priority,也就是角色优先级,配置命令是M-LAG role priority,默认是32768。
除此之外,为了能够形成跨设备的链路聚合组,能够将在不同设备上的两个接口加入到同一个M-LAG组(类似于聚合组)中,必须保证这些接口添加到的M-LAG组相同。
上述就是peer-link链路的基本内容。
对于该链路,它的作用其实就是进行双主检测的,也就是在peer-link链路down之后,来检测双主的,但是在M-LAG中我们对此进行了细分,分为以下几种情况。
第一种情况:
keepalive链路up,也就是可以在定时器超时时间内收到对方发来的keepalive报文,如果此时peer-link链路也up,此时M-LAG系统正常,定期检测即可,不做任何处理
第二种情况:
keepalive链路up,但是peer-link链路down掉,那么此时就类似于堆叠线缆down了,但是多活检测线缆正常,也就是触发了M-LAG的双主检测机制,此时为了避免双主,会在keepalive hold timeout时间之后进行MAD机制,在keepalive hold timeout时间内收集故障原因。
第三种情况:
keepalive链路down掉,但是peer-link链路是up的,那么此时M-LAG系统是完整的,只不过多活检测线缆故障,所以此时设备只会打印日志,提醒M-LAG的keepalive链路故障。
第四种情况:
keepalive链路先down掉,之后peer-link链路又down了,那么此时因为keepalive链路先down,造成多活检测失效,此后peer-link链路down之后,就无法进行多活检测,此时设备就会进入primary角色,并且如果本设备存在up的M-LAG接口,那么设备会保持primary角色,如果不存在,在会进入none角色。
这是keepalive链路的作用和几种不同的机制,对于keepalive链路来说,只需要保证keepalive链路同网段可以互通即可,没有特别的要求。
对于MAD机制的处理、M-LAG MAD DOWN状态的保持、延迟恢复时间以及配置一致性检查等内容,以后俱乐部会继续给你介绍,先关注一波啊。
整理:老杨丨10年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部