Network 数据中心 M-LAG What, How & Why

  1. 为什么需要M-LAG(为什么出现这门技术 why)
  2. 如何实现M-LAG组网
  3. M-LAG是如何工作的(How)
  4. 如何应用M-LAG技术

为什么需要M-LAG

近几年来,M-LAG作为一项横向虚拟化技术被广泛使用,然而M-LAG技术的发展并非一蹴而就。

众所周知,传统的数据中心网络采用设备和链路冗余保证高可靠性。因其链路利用率低和网络维护成本高,数据中心交换机又提出了堆叠技术,将多台交换机虚拟成一台交换机,达到简化网络部署和降低网络维护的目的。

为了满足业务量增大和对网络更高可靠性的要求,于是出现了M-LAG虚拟化技术,通过多台设备间的链路聚合将链路的可靠性从单板级提高到设备级。

STP+VRRP技术

传统的数据中心网络采用STP+VRRP协议来保障链路冗余,满足了基本的可靠性需求。

堆叠和M-LAG虚拟化技术

堆叠和M-LAG实现跨设备链路聚合提高二层链路利用率,M-LAG的双活网关技术提高了三层链路利用率,且服务器可以通过链路聚合实现双活接入设备。

堆叠和M-LAG虚拟化技术示意图

M-LAG和堆叠都可以解决传统数据中心网络的问题,但从业务稳定性考虑,通常选择M-LAG。

堆叠和M-LAG作为广泛运用于数据中心网络接入层的两种横向虚拟化技术,他们都可实现终端的冗余接入,实现链路冗余备份,提高数据中心网络的可靠性和可扩展性。然而,与堆叠技术相比,M-LAG存在更高的可靠性和独立升级的优势。M-LAG不仅解决了传统聚合链路可靠性低的问题,同时规避了堆叠在升级过程中时间长、风险高等缺点。

对比了堆叠和M-LAG的优劣。针对升级过程业务中断时间要求高、对组网可靠性要求高的场景,我们推荐用户使用M-LAG技术,用作数据中心网络终端接入技术

M-LAG 是数据中心交换机CloudEngine 中的特性,M—LAG是指跨设备的链路聚合组,是将一台设备与另外2台设备进行跨设备的链路聚合,组成双活系统。主要用于服务器双归接入,将可靠性从链路级提高到了设备级

M-LAG 典型组网

概念说明
M-LAG主设备
部署M-LAG且状态为主的设备。
M-LAG备设备部署M-LAG且状态为备的设备。
说明: 正常情况下,主设备和备设备同时进行业务流量的转发。
peer-link链路peer-link链路是一条直连链路且必须做链路聚合,用于交换协商报文及传输部分流量。
为了增加peer-link链路的可靠性,推荐采用多条链路做链路聚合。
peer-link接口peer-link链路两端直连的接口均为peer-link接口。
双主检测链路双主检测链路是一条三层互通链路,用于M-LAG主备设备间按照1秒的周期发送双主检测报文,用于peer-link链路故障时进行双主检测。
M-LAG成员接口M-LAG主备设备上连接用户侧主机(或交换设备)的Eth-Trunk接口。
为了增加可靠性,推荐链路聚合配置为LACP模式。

M-LAG 应用场景

交换机双归接入

服务器双归接入

服务器双归接入时的配置和一般的链路聚合配置没有差异,必须保证服务器侧和交换机侧的链路聚合模式一致,推荐两端均配置为LACP模式。

多级M-LAG 场景

SwitchA和SwitchB之间部署M-LAG后,在SwitchC和SwitchD之间部署M-LAG并与下层的M-LAG进行级联,这样不仅可以简化组网,而且在保证可靠性的同时可以扩展双归接入服务器的数量。多级M-LAG互联必须基于V-STP方式进行配置

Network OSPF 规划案例

可以看到这是一个大型园区网络,核心、汇聚、接入三层分明,有多出口到Internet,网络内部存在双链路冗余,核心、汇聚交换机部署集群保护等。这种大型园区网络,园区出口设备一般选用华为NE系列高端路由器,核心交换机选用华为S9700交换机集群,汇聚交换机选用S7700交换机集群用户网关部署在汇聚层上,汇聚层作为二层和三层的分界点

由于上述典型园区网络中核心交换机和汇聚交换机都属于集群系统,因此他们在逻辑上相当于一台设备,多链路捆绑在逻辑上也属于一条链路。因此为了简化问题的描述我们把上述网络拓扑经过抽象形成图3所示的逻辑拓扑图,园区网中可能存在很多幢楼,这里我们以3幢为例进行描述

如无特殊要求,建议不要在OSPF进程中发布loopback0的接口地址,以减少无用的OSPF信息交互报文

稳定性规划 router-id

命令含义
[S9700]interface LoopBack 0创建环回接口0
[S9700-LoopBack0]ip address 10.0.0.3 32为环回接口0配置32位掩码的IP地址
[S9700-LoopBack0]quit退出当前视图
[S9700] ospf 1 router-id 10.0.0.3创建OSPF进程1并设置Router ID为10.0.0.3
OSPF 的 router-id 选举规则:
(1) 首选手工配置的 router id。
① OSPF 进程手工配置的 router-id 具有最高优先级。
②在全局模式下配置的公用 router-id 的优先级仅次于直接给
OSPF 进程手工配置 router-id, 具有次高优先级。
(2) 在没有手工配置时,选 loopback 接口地址中最大的地址作为 router-id。
(3) 在没有配置 loopback 接口地址时,优选其他接口的 IP 地址中选择最大的地址作为 router-id

层次性规划

命令含义
[S9700]ospf 1进入OSPF进程视图
[S9700-ospf-1]area 0进入area 0区域视图
[S9700-ospf-1-area-0.0.0.0]network 10.200.10.0 0.0.0.3将上行口的网段发布进Area 0
[S9700-ospf-1-area-0.0.0.0]network 10.200.20.0 0.0.0.3将上行口的网段发布进Area 0
[S9700-ospf-1-area-0.0.0.0]quit退出当前视图
[S9700-ospf-1]area 10进入area 10区域视图
[S9700-ospf-1-area-0.0.0.10]network 10.100.10.0 0.0.0.3将下行口的网段发布进Area 10

OSPF特殊 区域规划:

典型OSPF网络的非骨干区域中都仅仅需要知道缺省路由出口在哪里,因此建议把非骨干区域统一规划成Totally NSSA区域,这样将极大的精简非骨干区域内部路由器的路由条目数量,并且减少区域内部OSPF交互的信息量。

Totally NSSA 区域具体设备配置以Area 10 的S9700集群和S7700-1为例。

S9700集群的关键配置如下:

命令含义
[S9700]ospf 1进入OSPF进程视图
[S9700-ospf-1]area 10进入area 10区域视图
[S9700-ospf-1-area-0.0.0.10] nssa no-summaryABR设备需要配置nssa no-summary

S7700-1的关键配置如下:

命令含义
[S7700-1]ospf 1进入OSPF进程视图
[S7700-1-ospf-1]area 10进入area 10区域视图
[S7700-1-ospf-1-area-0.0.0.10] nssa非ABR设备配置nssa即可

骨干区域路由表规划:

建议新建OSPF网络能够在前期就作出利于路由汇总的IP网络设计,对于扩建的网络尽量进行IP地址的重新规划,通过区域汇总能精简骨干区域路由器的路由表,减少骨干区域内OSPF交互的信息量

abr-summary命令只能用在ABR(区域边界路由器)上,区域内部路由器上不要使用此条命令,否则会造成路由表项的错误

命令含义
[S9700] ospf 1进入OSPF进程视图
[S9700-ospf-1] area 10进入area 10区域视图
[S9700-ospf-1-area-0.0.0.10] abr-summary 10.10.0.0 255.255.0.0ABR设备进行路由汇总

上行流量的引导

OSPF缺省路由的引入和选路优化,典型网络的出口往往不止一个,如何有效的将出口流量分担到多条链路上就成为了OSPF设计中的一个难点。虽然有很多种手段能够达到分担流量的目的,但是最简单也是最安全的方法是使用OSPF内在的选路机制。因为OSPF路由器对一条路由的优劣衡量是通过计算其cost值来实现的,cost值小的路由会被路由器优先放入路由表。通过调整OSPF接口的cost值可以使得路由器选择不同的链路出口来达到负载分担的目的。使用bandwidth-reference value命令选择一个合适的参考带宽成为OSPF网络建设中必须要做的一项工作。对于OSPF网络的选路优化,推荐首先选择合适的参考带宽,然后通过调整OSPF接口cost值来实现。

命令含义
[NE40E-1] ip route-static 0.0.0.0 0.0.0.0 202.10.10.1首先在NE40E-1上手工配置一条下一跳指向电信运营商的公网地址的缺省路由
[NE40E-1] ospf 1进入OSPF进程视图
[NE40E-1-ospf-1] default-route-advertise发布缺省路由,注意不要携带always参数,即非强制下发缺省路由。

黑洞路由:

注意网络中的黑洞路由,也就是一个不存在的路由在网络汇总的时候形成的路由环路。

[S9700] ip route-static 10.10.0.0 255.255.0.0 NULL0

NUll0 是路由器上的逻辑接口

静默端口

用户侧的网络使用静默端口。

Network 交换机端口模式切换

  • 接口视图下执行undo portswitch命令切换到三层模式前,需要清除接口下所有非默认配置。
  • 接口视图下执行portswitch命令由三层模式切换回二层模式前,请清除接口下所有的三层业务配置。

例如:将接口10GE1/0/1切换为三层模式。

<HUAWEI> system-view

[~HUAWEI] interface 10ge 1/0/1

[~HUAWEI-10GE1/0/1] undo portswitch

[*HUAWEI-10GE1/0/1] commit

Network OSPF 网络规划要点

OSPF网络规划设计原则

保持OSPF网络的稳定性:Router ID的规划

在典型OSPF网络设计和实施中我们需要考虑的第一点,就是Router ID的选择。

这是因为OSPF作为一种链路状态路由协议其计算路由的依据是LSA(链路状态通告),每个运行OSPF的路由器都会发送并泛洪LSA报文到整个网络,这样网络中每个运行OSPF的路由器都会收集到其他设备发送过来的LSA并且放入LSBD(链路状态数据库),然后开始进行SPF(最短路径算法)运算,计算出一棵以自己为根到其他网络的无环树。由此可以看出保持每个路由器LSDB的稳定性是保证OSPF网络稳定的前提。那么在LSDB中对于不同OSPF设备发送来的LSA是如何进行区分的呢,答案就是使用Router ID。如果一个路由器的Router ID发生变化,那么此路由器会重新进行LSA泛洪,从而导致全网OSPF路由器都会更新其LSDB并且重新进行SPF计算,使得OSPF网络发生振荡。因此选择一个稳定的Router ID是OSPF网络设计的首要工作。

了解了Router ID的重要性后,我们来看看一个OSPF路由器是如何选择Router ID的。

路由器的Router ID可以手工配置,如果没有通过命令指定Router ID,系统会从当前接口的IP地址中自动选取一个作为路由器的Router ID。其选择顺序是:优先从Loopback地址中选择最大的IP地址作为路由器的Router ID,如果没有配置Loopback接口,则在接口地址中选取最大的IP地址作为路由器的Router ID。只有当被选举为Router ID的接口IP地址被删除或修改后,才会进行Router ID的重新选举。

在实际工程中,推荐手工指定OSPF路由设备的Router ID。具体做法是首先规划出一个私有网段用于OSPF的Router ID选择。例如:192.168.1.0/24。在启用OSPF进程前就在每个OSPF路由器上建立一个Loopback接口,使用一个32位掩码的私有地址作为其IP地址,这个32位的私有地址即作为该路由设备的Router ID。如果没有特殊要求,这个Loopback接口地址可以不发布在OSPF网络中。

层次化的网络设计:OSPF区域的规划

OSPF是一个需要层次化设计的网络协议,在OSPF网络中使用了一个区域的概念,从层次化的角度来看区域被分为两种:骨干区域和非骨干区域。骨干区域的编号为0,非骨干区域的编号从1到4294967295。处于骨干区域和非骨干区域边界的OSPF路由器被称为ABR(区域边界路由器)。

实际上OSPF区域的规划也就是把网络中的OSPF路由器做归类的过程。在设计OSPF区域时,我们首先需要考虑的第一点是网络的规模,对于小型的典型网络,例如只有几台路由设备作为核心和汇聚的网络可以考虑仅规划一个骨干区域Area 0。但是在大型的OSPF网络中,网络的层次化设计是必须要考虑的。

对于大型的OSPF网络,一般在规划上都会遵循核心,汇聚,接入的分层原则,而OSPF骨干路由器的选择必然包含两种设备,一种是位于整网核心位置的核心设备,另一种是位于区域核心的汇聚设备,通常都是高端路由设备,例如华为NE系列高端路由器,或者华为S77&97系列高端路由交换机。非骨干区域的设计则是根据地理位置和设备性能而定,如果在单个非骨干区域中使用了较多的低端三层交换产品,由于其产品定位和性能的限制,应该尽量减少其路由条目数量,把区域规划得更小一些或者使用特殊区域

实际工程中对于非骨干区域的Area编号的规划也是有讲究的,尽量不要使用类似Area1、2、3……这种连续的编号,推荐使用Area 10 、20 、30……这种递增方式,这样主要是考虑提供Area编号上的冗余,在后期网络扩容的时候便于用户增加区域编号。

非骨干区域的路由表项优化:特殊区域的使用

特殊区域的使用可以达到优化非骨干区域的路由表项的目的。实际上对于非骨干区域,一般可能存在如下两种诉求需要减少路由表项的规模:

1、  非骨干区域仅有一个ABR做出口,任何访问区域外的流量都要经过这个出口设备,此时其实这个区域内的路由器没必要了解外部网络的细节,仅需要有个出口能够出去即可。

2、  有些时候非骨干区域的设备可能使用了一些较为低端的三层交换机,其产品定位使得其不可能承受过多的路由条目,为了精简其路由条目数量可以采用配置特殊区域的方法进行路由表项的优化。

华为路由器和交换机产品支持OSPF协议中定义四种特殊区域类型:Stub区域,Totally Stub区域,NSSA区域,Totally NSSA区域。

在绝大部分的情况下,典型OSPF网络的非骨干区域中都仅仅需要知道缺省路由出口在哪里,因此建议把非骨干区域统一规划成Totally NSSA区域,这样将极大的精简非骨干区域内部路由器的路由条目数量,并且减少区域内部OSPF交互的信息量。对于少数存在特殊需求的网络,请根据实际情况灵活使用几种区域类型。

骨干区域的路由表项优化:非骨干区域IP子网规划和路由汇聚

由于OSPF骨干区域需要负责区域之间的路由交互,所以骨干区域设备的路由表规模往往会比较大,因此骨干区域的路由表规模同样需要考虑精简和优化的问题。

对于OSPF的非骨干区域来说,使用特殊区域能够精简其内部路由器的路由表,那么对于OSPF骨干区域的路由器来说又是如何优化其路由表的呢?答案就是对非骨干区域使用的IP网段作出合理规划以便于区域边界的路由汇聚。

建议新建OSPF网络能够在前期就作出利于路由汇总的IP网络设计,对于扩建的网络尽量进行IP地址的重新规划,通过区域汇总能精简骨干区域路由器的路由表,减少骨干区域内OSPF交互的信息量。同时,路由汇总以后,单点的链路故障或者网络震荡不至于影响整个网络的路由更新,因此路由汇聚还可以提高网络的稳定性。

上行流量的引导:OSPF缺省路由的引入和选路优化

对于一个大型OSPF网络来说,很大一部分的业务流量并不在网络内部,而是通往Internet出口,因此缺省路由的设计也是典型OSPF网络的一大设计要点。

在实际的大多数工程案例中,典型网络的出口往往不止一个,如何有效的将出口流量分担到多条链路上就成为了OSPF设计中的一个难点。虽然有很多种手段能够达到分担流量的目的,但是最简单也是最安全的方法是使用OSPF内在的选路机制。因为OSPF路由器对一条路由的优劣衡量是通过计算其cost值来实现的,cost值小的路由会被路由器优先放入路由表。通过调整OSPF接口的cost值可以使得路由器选择不同的链路出口来达到负载分担的目的。

不过在调整cost值之前还有一项必须要做的工作。因为OSPFv2出现的时间较早,没有考虑到带宽的飞速发展,因此缺省情况下,OSPF计算cost值使用的参考带宽为100M,也就是说缺省情况下,OSPF把100M带宽以上的端口统统认为其cost是1。很明显,在网络骨干带宽迈向10T的今天已经显得非常的不合时宜。幸运的是设备提供了更改参考带宽的功能,使用bandwidth-reference value命令选择一个合适的参考带宽成为OSPF网络建设中必须要做的一项工作。对于OSPF网络的选路优化,推荐首先选择合适的参考带宽,然后通过调整OSPF接口cost值来实现。

路由汇总场景下的防环设计:黑洞路由的使用

而在路由器中黑洞路由类似于宇宙中的黑洞,凡是命中黑洞路由的报文都统统被丢弃,而且不向发送者反馈任何差错信息。

黑洞路由的这种巨大魔力使得它在防止路由环路方面有着广泛的应用。在很多场景下路由聚合确实能够做到精简路由,提高网络稳定性的作用,但是任何事物都具有两面性,路由聚合也不例外,路由聚合带来的缺陷就是容易产生路由环路,而黑洞路由可以用来弥补这种缺陷。所以典型OSPF网络设计中,路由聚合和黑洞路由往往是配合使用的,

OSPF网络基本安全:OSPF静默接口的使用

对于一个大型OSPF网络来说,安全性是必须要考虑到的问题。在OSPF网络设计中,通常会禁止将OSPF报文发往用户端,这是为什么呢?这主要是为了防止终端用户窥探OSPF报文信息,因为如果用户能截获OSPF报文,那就意味着他可能知道如何加入此OSPF网络。此时要破坏这个OSPF网络已经是轻而易举的事,例如接入一台路由器到OSPF网络中,并且使得该路由器的OSPF进程处于不稳定的状态中,就会导致OSPF网络发生振荡甚至瘫痪。

在实际工程中,为了保证OSPF网络的安全与稳定,推荐在OSPF网络的边缘设备上使用静默接口的的方式来阻止通往用户侧的OSPF报文。具体做法是在OSPF网络的边缘设备上配置silent-interface命令,用来禁止该接口接收和发送OSPF报文。禁止接口收发OSPF报文后,该接口的直连路由仍可以发布出去,但接口的Hello报文将被阻塞,接口上无法建立邻居关系。这样用户侧就无法窥探到网络中的OSPF报文

Index