先谈谈情怀

最近咱51CTO开放了关注功能,非常高兴有这么多的朋友关注姜汁啤酒的 - "新西兰资深网工的日常",在这里先谢谢大家的关心与认可。
郭德纲在德云社曾经说过,台下观众都是衣食父母,唯有尽力演好相声、抖好包袱,让大家开心才是最真诚的回馈方式。而在51cto,对于那些已经关注姜汁啤酒,或即将关注姜汁啤酒的朋友们,我也应该更加努力,给大家贡献更好更有质量的技术文章。
为此,借助2018狗年春节到来之际特定准备了《数据中心网络系列技术》系列教程文章,同大家分享。

连载文章技术主题

此数据中心技术连载内容如下:

  1. MC-LAG
  2. Virtual-Chassis 和Virtual-Chassis Fabric
  3. IP Fabric
  4. VXLAN
  5. EVPN
  6. 数据中心互联技术
  7. 案例:Facebook数据中心架构简介

这些文章会在接下来一段时间为大家一一呈上。今天为第一篇:MC-LAG

进入正题。第一篇:MC-LAG

引言

无论是传统的企业网,或如今的数据中心。
都有一个共通的需求:高可用性。
同时也存在一个共同的问题:潜在的网络单点故障。

常见网络冗余方式如下图:

爱情有备胎,数据中心有MC-LAG

大致分析以上各种常见冗余的利弊。

图1: 很明显,无冗余,单点链路故障,单点设备故障。风险系数极高。
图2:设备接入交换机到汇聚之间存在捆绑链路。但相对图1,此方案进步了不少,尤其是解决了单点链路故障的问题。
但其他问题依然存在,若接入层交换机或者中间的汇聚交换机因为设备故障挂掉,那有再多的捆绑链路都无济于事。
图3:升级设计,不就是怕交换机设备故障么,我接入交换机上堆叠,上联两个汇聚节点。看似很完美。

可仔细分析,图3的设计的确解决了设备单点故障的问题。但观察拓扑图,多链路多设备冗余带来的副作用就是潜在网络环路风险的问题。
即两台汇聚和下联接入之间的三角区存在潜在的环路风险。
总有艺高人胆大的:不怕,我上spanning-tree,再不济我可以用路由协议跑三层。我就不信搞不定这个环路。

那请问,无论是用spanning-tree还是三层路由协议,如何能够充分使用上联的两条链路做到流量的负载均衡呢?STP默认会block掉一个端口,路由协议会参考不同的metric值选路。

开个脑洞,有没有一种网络技术,把原来设备一对一的链路捆绑扩展到一台设备对多台设备的链路捆绑呢?
大家知道,捆绑链路(aggregation link 或 port-channel)天然基于hash算法负载均衡,如果上述假设成立的话,我们就可以把接入层交换机分别到不同汇聚的链路,捆起来并形成一个虚拟接口,而且流量还能完美的负载均衡到上联的两台汇聚设备。
答案是必须有,要不然我实在写不下去了。:-p
此技术就是今天我们要讨论的主角-MC-LAG

MC-LAG闪亮登场

MC-LAG,全名Multi-Chassis Link Aggregation Group,或者在Cisco里面叫做Virtual Port-channel (VPC)。
顾名思义,多设备间的链路聚合组。
部署MC-LAG后,我们可以实现所谓“脚踩两只船”的效果,即一台接入设备可以同时通过链路捆绑接入上游两台物理设备。

MC-LAG使用场景

那什么情况下使用MC-LAG比较理想呢:
在数据中心机房内,一台服务器多个物理网卡上联机架交换机时,可以使用MC-LAG实现服务器到多个交换机的链路二层互联。
在普通企业网络中,接入层交换机到多个上联汇聚交换机的二层互联。或者甚至汇聚交换机到上联核心亦可以使用MC-LAG。

爱情有备胎,数据中心有MC-LAG

两台MC-LAG邻居如何一起协商链路捆绑

打底:一对一基于LACP协商的普通链路捆绑简介

在开始讨论MC-LAG如何协商之前,让我们先看看普通的链路聚合协议 - IEEE 802.3ad定义的链路聚合。
普通的链路聚合,例如Cisco的Port-channel或者Juniper的LAG,均是两台设备之间通过LACP协议协商参数并达成一致以后,捆绑链路方才可使用。
如下图所示:
爱情有备胎,数据中心有MC-LAG
那在普通LACP协商期间,两台设备都协商了什么参数?
让我们来看看一个Juniper QFX交换机LACP端口输出内容:


   LACP info:        Role     System             System       Port     Port    Port 
                         priority         identifier   priority   number     key 

  xe-0/0/0       Actor        127  02:05:86:71:c8:00       127       1     2
  xe-0/0/0     Partner        127  02:05:86:71:94:00       127       1     2
  xe-0/0/1       Actor        127  02:05:86:71:c8:00       127       2     2
  xe-0/0/1     Partner        127  02:05:86:71:94:00       127       2     2

上述输出看出LACP的几个常见参数:
系统优先级(System Priority):默认127,用于确定LACP协商期间,链路两端的设备谁主导这次协商,越低越好。如果优先级相同,靠MAC地址来确定。
系统ID(System ID):由系统MAC地址生成。
管理Key(Admin key):同一组LACP链路捆绑端口均要求相同的admin-key。
端口号:系统端口ID。


以上参数大家平时在创建链路聚合的时候,不需要人为配置,因为设备会自动协商。
以Cisco为例,你只需要选择channel-group xxx mode active就行了。
而Juniper也很简单:set interfaces aexxx aggregated-ether-options lacp active
(注:xxx指代你想要的捆绑链路接口号。)
一旦双方都配置完成,链路捆绑就起来了,easy!

MC-LAG协商机制

看完普通的链路两端一对一模式,当切换到链路两端二对一的MC-LAG模式下,情况就比较复杂了。
如下图:
爱情有备胎,数据中心有MC-LAG
首先,一对一的情况下,不管你捆绑多少条链路,链路一端都是在同一台设备内。这一台设备可以知晓所有端口信息并和对端协商。
但是,MC-LAG可不一样,它是两台邻居设备尝试和一台远端设备协商链路捆绑。
介于此,就类似于HSRP、VRRP协议,你需要在冗余设备两侧指定相关参数,两端参数一致才能通过最后的协商。

MC-LAG 邻居需手工配置的参数(以下参数MC-LAG邻居之间配置相同):
MC-AE-ID:MC-LAG捆绑号。
MC-AE 模式:有active-standby和active-active模式,一般使用active-active模式。
LACP的状态:与传统基于LACP的链路捆绑方式相同,MC-LAG里面需要指定LACP的状态是Active还是Passive。Active负责发起协商,Passive被动模式等待协商。
LACP Admin-key:指定管理key,一般可以与链路捆绑的端口号相同,例如接口ae1,那么Admin-key就是1。
LACP system-ID:系统ID,MAC地址格式,也需要手工指定。

MC-LAG 邻居需手工配置的参数(以下参数MC-LAG邻居之间需要单独指定):
MC-AE Status-control:确定两个MC-LAG邻居谁是主设备,谁是备份设备。主MC-LAG设备主导与链路对端设备的协商过程。
MC-AE Chassis ID:MC-LAG的设备号,分别为0和1。邻居设备两端各配置一个号码。


看完这么多密密麻麻参数,是不是在联想一个问题?参数这么多,两台MC-LAG邻居之间如何沟通呢?
做网络的,都熟悉老套路了,接下来的剧情就会是,出现一个协议,用于两者之间沟通。
没错,套路如下:

设备间控制协议:ICCP (Inter-Chassis Control Protocol)

ICCP,一个基于TCP 端口号33012的协议,用于MC-LAG的两台邻居设备之间沟通并同步例如学习到的ARP信息以及MAC地址信息等。

为了支持ICCP协议的TCP协商,我们还需要在两台MC-LAG邻居设备上配置一个Keeplive的心跳线IP作为ICCP互联地址。
类似于HSRP或VRRP,ICCP也需要在两台设备之间选择出一个Active活动设备和一个backup,Active活动设备用于整个MC-LAG协商,如何定义Active和backup我们在后续配置中会介绍到。


咋看之下,ICCP这个协议就如人的左右脑之间的桥梁,负责同步两台设备之间的状态。但若由于某些原因,例如支持ICCP的IP地址接口down掉了,两台设备岂不是直接如马航的飞机一样,莫名其妙失联了?
其后果可能导致两台邻居设备均宣告自己是Active山寨寨主,并拆掉原来协商的LACP捆绑链路,这势必会导致重大网络故障。
能否在设备其他IP地址的地方再建立一条备用的心跳线链路,当主要的ICCP心跳线切断以后,备用的还能检测到对方状态,岂不是更好?
所以,以Juniper为例的公司,它就利用带外管理接口IP地址为辅助心跳线来作为ICCP的双保险。
如下图所示:
爱情有备胎,数据中心有MC-LAG

备胎中的备胎:设备间备用保护链路 IC-PL(InterChassis-LinkProtection Link )

大家知道,基于LACP的链路捆绑天然就有负载均衡的效果。设备在发送数据包时就会随机选择一条链路。
那假设,其中一条链路断掉了。作为普通的一对一的链路捆绑设备,它很容易就把流量从一条链路切换到另外一条,毕竟都在同一个设备内。切换起来毫秒级。
同样的场景,如果放到MC-LAG上会是什么情况呢?
爱情有备胎,数据中心有MC-LAG
看到上面的图示,相信大家就很容易理解为什么需要IC-PL链路了。
1.若没有IC-PL链路,当MC-LAG下的一条捆绑链路down掉以后,MC-LAG成员无法找到替换路径把本该发往链路远端设备的流量转发出去。如图左所示。
2.而配置IC-PL链路以后,当同样的情况出现时,MC-LAG成员就会在ICCP的协调下自动转发流量到IC-PL链路上,并通过MC-LAG邻居最终把流量发送到远端设备。

IC-PL限制条件:(很重要,这也是为神马IC-PL不会导致网络环路。)

在ICCP的管制下, IC-PL存在如下限制条件。(很重要哦)
1.在MC-LAG捆绑链路没有任何故障的情况下,IC-PL只传输MC-LAG邻居设备自身产生的广播,组播数据包。
例如两台MC-LAG设备之间的VRRP可以穿透IC-PL。建立在ICCP心跳线网段上的OSPF hello数据包可以穿透,因为是组播包。但是DBD数据包却无法发送给邻居,结果导致OSPF邻居会永远的卡在 Exstart状态上。同理,其他单播报文也无法穿透。

  1. 若MC-LAG的其中一条捆绑链路出现故障时,IC-PL会被开启并用于传输其他数据包。换而言之,IC-PL就是所谓的“备胎中的备胎”,主链路挂了以后,根据ICCP的管控马上开始转发数据。

配置MC-LAG

讲了这么多理论,让我们来个实际点的例子看看如何正确配置MC-LAG
此案例采用GNS3模拟器外加3台vQFX Juniper 数据中心交换机搭建而成,拓扑如下:
爱情有备胎,数据中心有MC-LAG

为方便大家入手,先看SWC03这一个单点交换机的配置:

SWC03 接口配置

#全局定义链路捆绑的虚拟接口数(Juniper自身特性)
set chassis aggregated-devices ethernet device-count 5 #可以允许最多5个AE接口

#去往主机的接口和VLAN:
set vlans vlan-10 vlan-id 10
set interfaces xe-0/0/2 unit 0 family ethernet-switching interface-mode access
set interfaces xe-0/0/2 unit 0 family ethernet-switching vlan members 10  #去往主机PC1,端口为access,vlan号为10。

#配置LACP接口成员信息
set interfaces xe-0/0/0 description "To SWC01"
set interfaces xe-0/0/0 ether-options 802.3ad ae0   #指定xe-0/0/0 加入ae0的链路捆绑
set interfaces xe-0/0/1 description "To SWC02"
set interfaces xe-0/0/1 ether-options 802.3ad ae0  #指定xe-0/0/1 加入ae0的链路捆绑
set interfaces xe-0/0/2 description "To PC1"

#设定LACP参数:
set interfaces ae0 aggregated-ether-options lacp active  #主动发起协商
set interfaces ae0 aggregated-ether-options lacp periodic slow #设定hello time 为30秒。
set interfaces ae0 unit 0 family ethernet-switching interface-mode trunk  #trunk 模式,允许PC客户机器VLAN10 穿过。
set interfaces ae0 unit 0 family ethernet-switching vlan members 10

以上配置就是普通基于LACP的链路捆绑,对SWC03而言,它根本不清楚对端是普通链路捆绑还是MC-LAG。
重点看看SWC01的配置

SWC01配置

#全局定义链路捆绑的虚拟接口数(Juniper自身特性)
set chassis aggregated-devices ethernet device-count 5 #可以允许最多5个AE接口

#去往主机的接口和VLAN:
set vlans VLAN10 vlan-id 10
set interfaces xe-0/0/2 description "To PC2"
set interfaces xe-0/0/2 unit 0 family ethernet-switching interface-mode access
set interfaces xe-0/0/2 unit 0 family ethernet-switching vlan members 10

#配置ICCP协议和对于的VLAN,IP地址接口。
set vlans iccp vlan-id 100
set vlans iccp l3-interface irb.100

set interfaces irb unit 100 family inet address 100.1.1.1/24

set interfaces em0 unit 0 family inet address 192.168.240.2/24
#此为带外管理接口,用于ICCP备份链路

set interfaces xe-0/0/0 description "To SWC02" 
set interfaces xe-0/0/0 unit 0 family ethernet-switching interface-mode trunk
set interfaces xe-0/0/0 unit 0 family ethernet-switching vlan members 10 
set interfaces xe-0/0/0 unit 0 family ethernet-switching vlan members 100
 #此物理接口将会用于ICCP和IP-CL接口。在实际工程中,建议ICCP接口与IP-CL接口分离,并使用一个或者多个万兆链路作为IP-CL,毕竟这是备份数据链路,所以需要高带宽做保证。

set protocols iccp local-ip-addr 100.1.1.1 #指定本地ICCP 地址
set protocols iccp peer 100.1.1.2 redundancy-group-id-list 1 
set protocols iccp peer 100.1.1.2 backup-liveness-detection backup-peer-ip 192.168.240.3
#使用带外管理IP作为ICCP备份链路,192.168.240.3 为SWC02的带外IP地址。
set protocols iccp peer 100.1.1.2 liveness-detection minimum-interval 3000 #配置BFD用于快速检测ICCP链路状态,最短建议8秒以上。
set protocols iccp peer 100.1.1.2 liveness-detection multiplier 3

#配置IC-PL对端IP(SWC02)和IC-PL接口,
set multi-chassis multi-chassis-protection 100.1.1.2 interface xe-0/0/0  #

#配置带外管理接口
#配置MC-LAG接口:
set interfaces xe-0/0/3 description "To SWC03"
set interfaces xe-0/0/3 ether-options 802.3ad ae0

set interfaces ae0 aggregated-ether-options lacp active #指定LACP主动协商模式
set interfaces ae0 aggregated-ether-options lacp periodic slow #与SWC03相同,指定30秒的hello timer。
set interfaces ae0 aggregated-ether-options lacp system-id 01:01:01:01:01:01 #定义系统Id,需要与SWC02的相同,重要!!!
set interfaces ae0 aggregated-ether-options lacp admin-key 1 #定义admin-key,需要与SWC02的相同,重要!!!
set interfaces ae0 aggregated-ether-options mc-ae mc-ae-id 1 #定义MC-LAG号码,需要与SWC02的相同,重要!!!
set interfaces ae0 aggregated-ether-options mc-ae redundancy-group 1  #定义冗余组为1。
set interfaces ae0 aggregated-ether-options mc-ae chassis-id 0 #定义设备号,SWC1=0,SWC2=1
set interfaces ae0 aggregated-ether-options mc-ae mode active-active #定义主动模式
set interfaces ae0 aggregated-ether-options mc-ae status-control active  #定义SWC1为MC-LAG两台设备中的主设备,负责主导协商过程。

set interfaces ae0 unit 0 family ethernet-switching interface-mode trunk
set interfaces ae0 unit 0 family ethernet-switching vlan members 10
#最后,在这个去往SWC03的AE0上,同样放行业务VLAN 10.

SWC02配置

#SWC02的配置除了其中某些参数不同之外,其他参数与SWC01类似,在这里就不一一赘述了。

set chassis aggregated-devices ethernet device-count 5  

set vlans VLAN10 vlan-id 10
set vlans iccp vlan-id 100
set vlans iccp l3-interface irb.100

set protocols iccp local-ip-addr 100.1.1.2
set protocols iccp peer 100.1.1.1 redundancy-group-id-list 1
set protocols iccp peer 100.1.1.1 backup-liveness-detection backup-peer-ip 192.168.240.2
set protocols iccp peer 100.1.1.1 liveness-detection minimum-interval 3000
set protocols iccp peer 100.1.1.1 liveness-detection multiplier 3

set multi-chassis multi-chassis-protection 100.1.1.1 interface xe-0/0/0

set interfaces xe-0/0/0 description "To SWC01"
set interfaces xe-0/0/0 unit 0 family ethernet-switching interface-mode trunk
set interfaces xe-0/0/0 unit 0 family ethernet-switching vlan members 10
set interfaces xe-0/0/0 unit 0 family ethernet-switching vlan members 100

set interfaces xe-0/0/2 description "To PC3"
set interfaces xe-0/0/2 unit 0 family ethernet-switching interface-mode access
set interfaces xe-0/0/2 unit 0 family ethernet-switching vlan members 10

set interfaces xe-0/0/3 description "To SWC03"
set interfaces xe-0/0/3 ether-options 802.3ad ae0

set interfaces ae0 aggregated-ether-options lacp active
set interfaces ae0 aggregated-ether-options lacp periodic slow
set interfaces ae0 aggregated-ether-options lacp system-id 01:01:01:01:01:01
set interfaces ae0 aggregated-ether-options lacp admin-key 1
set interfaces ae0 aggregated-ether-options mc-ae mc-ae-id 1
set interfaces ae0 aggregated-ether-options mc-ae redundancy-group 1
set interfaces ae0 aggregated-ether-options mc-ae chassis-id 1
set interfaces ae0 aggregated-ether-options mc-ae mode active-active
set interfaces ae0 aggregated-ether-options mc-ae status-control standby
set interfaces ae0 unit 0 family ethernet-switching interface-mode trunk
set interfaces ae0 unit 0 family ethernet-switching vlan members 10

set interfaces em0 unit 0 family inet address 192.168.240.3/24

验证结果

配置完成以后,让我们先看看从SWC03的角度LACP如下:

SWC03

root@SWC03> show lacp interfaces extensive 
Aggregated interface: ae0
    LACP state:       Role   Exp   Def  Dist  Col  Syn  Aggr  Timeout  Activity
      xe-0/0/0       Actor    No    No   Yes  Yes  Yes   Yes     Slow    Active
      xe-0/0/0     Partner    No    No   Yes  Yes  Yes   Yes     Slow    Active
      xe-0/0/1       Actor    No    No   Yes  Yes  Yes   Yes     Slow    Active
      xe-0/0/1     Partner    No    No   Yes  Yes  Yes   Yes     Slow    Active
    LACP protocol:        Receive State  Transmit State          Mux State 
      xe-0/0/0                  Current   Slow periodic Collecting distributing
      xe-0/0/1                  Current   Slow periodic Collecting distributing
        LACP info:        Role     System             System       Port     Port    Port 
                             priority         identifier   priority   number     key 

      xe-0/0/0       Actor        127  02:05:86:71:33:00       127       1     1
      xe-0/0/0     Partner        127  01:01:01:01:01:01       127       3     1
      xe-0/0/1       Actor        127  02:05:86:71:33:00       127       2     1
      xe-0/0/1     Partner        127  01:01:01:01:01:01       127   32771     1

{master:0}
root@SWC03> 

很完美,它的两个接口均参与了LACP链路捆绑,而且大家注意观察,xe-0/0/0和xe-0/0/1的Partner对端部分显示的System-id是配置的1:1:1:1:1:1,Port-key也是上述配置的1。这些参数都是我们之前预先人为设定好的。

SWC01输出结果

#先看看ICCP的协商结果:
root@SWC01> show iccp 

Redundancy Group Information for peer 100.1.1.2
  TCP Connection       : Established
  Liveliness Detection : Up
##SWC01与SWC02建立了TCP ICCP连接,状态是Established.
Backup liveness peer status: Up
  Redundancy Group ID          Status
    1                           Up   
#SWC01和SWC02通过带外管理网络成功建立备份链接。
Client Application: lacpd
  Redundancy Group IDs Joined: 1 

Client Application: l2ald_iccpd_client
  Redundancy Group IDs Joined: 1 
#阐明了LACP是ICCP的客户端,正在使用ICCP提供的服务。

#MC-LAG 协商状态,并指明了IC-PL接口。
root@SWC01> show interfaces mc-ae 
 Member Link                  : ae0
 Current State Machine's State: mcae active state
 Local Status                 : active
 Local State                  : up
 Peer Status                  : active
 Peer State                   : up
     Logical Interface        : ae0.0
     Topology Type            : bridge
     Local State              : up
     Peer State               : up
     Peer Ip/MCP/State        : 100.1.1.2 xe-0/0/0.0 up #

#LACP协商状态
root@SWC01> show lacp interfaces extensive 
Aggregated interface: ae0
    LACP state:       Role   Exp   Def  Dist  Col  Syn  Aggr  Timeout  Activity
      xe-0/0/3       Actor    No    No   Yes  Yes  Yes   Yes     Slow    Active
      xe-0/0/3     Partner    No    No   Yes  Yes  Yes   Yes     Slow    Active
    LACP protocol:        Receive State  Transmit State          Mux State 
      xe-0/0/3                  Current   Slow periodic Collecting distributing
        LACP info:        Role     System             System       Port     Port    Port 
                             priority         identifier   priority   number     key 

      xe-0/0/3       Actor        127  01:01:01:01:01:01       127       3     1
      xe-0/0/3     Partner        127  02:05:86:71:33:00       127       1     1

#最后,以上输出显示,SWC01的xe-0/0/3成功建立MC-LAG链路捆绑,并且能够看到SWC03的MAC地址组成的System-ID。

SWC02输出结果

root@SWC02> show iccp 

Redundancy Group Information for peer 100.1.1.1
  TCP Connection       : Established
  Liveliness Detection : Up

Backup liveness peer status: Up
  Redundancy Group ID          Status
    1                           Up   

Client Application: lacpd
  Redundancy Group IDs Joined: 1 

Client Application: l2ald_iccpd_client
  Redundancy Group IDs Joined: 1 

{master:0}
root@SWC02> show interfaces mc-ae 
 Member Link                  : ae0
 Current State Machine's State: mcae active state
 Local Status                 : active
 Local State                  : up
 Peer Status                  : active
 Peer State                   : up
     Logical Interface        : ae0.0
     Topology Type            : bridge
     Local State              : up
     Peer State               : up
     Peer Ip/MCP/State        : 100.1.1.1 xe-0/0/0.0 up

{master:0}
root@SWC02> show lacp interfaces 
Aggregated interface: ae0
    LACP state:       Role   Exp   Def  Dist  Col  Syn  Aggr  Timeout  Activity
      xe-0/0/3       Actor    No    No   Yes  Yes  Yes   Yes     Slow    Active
      xe-0/0/3     Partner    No    No   Yes  Yes  Yes   Yes     Slow    Active
    LACP protocol:        Receive State  Transmit State          Mux State 
      xe-0/0/3                  Current   Slow periodic Collecting distributing

{master:0}
root@SWC02> 

PC客户端ping 测试

让我们从PC1 分别ping PC2和PC3

PC1> ping 10.1.1.2
84 bytes from 10.1.1.2 icmp_seq=1 ttl=64 time=160.089 ms
84 bytes from 10.1.1.2 icmp_seq=2 ttl=64 time=74.891 ms

PC1> ping 10.1.1.3
84 bytes from 10.1.1.3 icmp_seq=1 ttl=64 time=159.707 ms

PC1> show arp
00:50:79:66:68:01  10.1.1.2 expires in 2 seconds
00:50:79:66:68:02  10.1.1.3 expires in 115 seconds

mac-addres-table研究

完成ping测试以后,让我们最后看看三台交换机各自的MAC地址信息:

SWC01

root@SWC01> show ethernet-switching table 

MAC flags (S - static MAC, D - dynamic MAC, L - locally learned, P - Persistent static, C - Control MAC
           SE - statistics enabled, NM - non configured MAC, R - remote PE MAC, O - ovsdb MAC)

Ethernet switching table : 3 entries, 3 learned
Routing instance : default-switch
    Vlan                MAC                 MAC         Age    Logical                NH        RTR 
    name                address             flags              interface              Index     ID
    VLAN10              00:50:79:66:68:00   DLR           -   ae0.0                  0         0       
    VLAN10              00:50:79:66:68:01   DL            -   xe-0/0/2.0             0         0       
    VLAN10              00:50:79:66:68:02   DR            -   xe-0/0/0.0             0         0  

#解析:SWC01存在三台PC机器的MAC地址,耐人寻味的主要是MAC Flag标志位。
通过上述的MAC Flag解释表,可以看出。DLR意味着:动态学习,本地学习,远端PE同步的MAC地址?
这个远端PE MAC地址有点意思,它其实是指SWC02也存在这么一个MAC地址,而为什么SWC01会知道SWC02也有这么一个MAC呢,那就是ICCP的功效。

ICCP除了同步LACP等状态外,更重要的是它也在两个MC-LAG邻居间同步例如ARP表,MAC地址表等。

SWC02

root@SWC02> show ethernet-switching table 

MAC flags (S - static MAC, D - dynamic MAC, L - locally learned, P - Persistent static, C - Control MAC
           SE - statistics enabled, NM - non configured MAC, R - remote PE MAC, O - ovsdb MAC)

Ethernet switching table : 3 entries, 3 learned
Routing instance : default-switch
    Vlan                MAC                 MAC         Age    Logical                NH        RTR 
    name                address             flags              interface              Index     ID
    VLAN10              00:50:79:66:68:00   DLR           -   ae0.0                  0         0       
    VLAN10              00:50:79:66:68:01   DR            -   xe-0/0/0.0             0         0       
    VLAN10              00:50:79:66:68:02   DL            -   xe-0/0/2.0             0         0    '

SWC03

root@SWC03> show ethernet-switching table 

MAC flags (S - static MAC, D - dynamic MAC, L - locally learned, P - Persistent static, C - Control MAC
           SE - statistics enabled, NM - non configured MAC, R - remote PE MAC, O - ovsdb MAC)

Ethernet switching table : 3 entries, 3 learned
Routing instance : default-switch
    Vlan                MAC                 MAC         Age    Logical                NH        RTR 
    name                address             flags              interface              Index     ID
    vlan-10             00:50:79:66:68:00   D             -   xe-0/0/2.0             0         0       
    vlan-10             00:50:79:66:68:01   D             -   ae0.0                  0         0       
    vlan-10             00:50:79:66:68:02   D             -   ae0.0                  0         0       

#回到SWC03的MAC地址表,就显得很标准和普通了,它的MACFlag标志位就写着“动态获取”,而不存在L和R的标志。

总结

在这篇文章中,我们一起讨论了何为MC-LAG,以及MC-LAG的组成部分,最后展示了如何配置MC-LAG.
总结如下:
1.MC-LAG是基于两台设备与远端设备同时建立一个捆绑链路。
2.MC-LAG使用ICCP协议保证捆绑链路的协商过程。
3.IC-PL不转发单播数据包,只转发MC-LAG成员产生的组播包和广播包。
4.IC-PL接口为备份数据传输接口,一旦某个捆绑链路挂掉,IC-PL马上开始转发数据包。
5.配置MC-LAG时,需要在MC-LAG邻居上手工配置LACP协商参数。

留给大家的操作空间:
其实还有其他MC-LAG内容因为篇幅问题没有涉及到,例如:
1) 如何在MC-LAG上开启三层路由。
2) 如何在IC-PL上运行动态路由协议,而不至于遇到OSPF那样卡在Exstart状态。

这些想象空间就留给你去慢慢品玩了,若有问题请随时留言,大家一起共同进步。

号外,号外,征集网络运维痛点

爱情有备胎,数据中心有MC-LAG
最近在筹划网络运维中遇到的各种技术问题的相关文章,但是因为我个人想象空间实在有限,无法涵盖所有各种可能遇到的场景。
看在姜汁啤酒码字这么辛苦,没有功劳也有点苦劳的面子上,欢迎大家留言告诉我你在网络运维过程中,都遇到了哪些技术问题,简单也好,疑难杂症也好,欢迎给我留言。

姜汁啤酒会根据反馈,认真研究,并总结成文,奉送给大家。

谢谢!

往期文章列表:

网络攻击肆虐-给你的网络设备来套防弹衣吧!
Facebook Open/R,新一代路由平台与网工的未来
如何借助Anycast技术拯救运维工程师的睡眠?
技术移民直通车要发车了-快来秒杀你的车票
IT设备的救命稻草-如何正确构建OOB带外网络
踢走绊脚石,MTU解析与常见问题汇总-上篇
TCP-MSS, PMTU 详解- MTU工具解析与常见问题汇总-下篇
思路很重要!不同厂商Spanning-tree对接案例思考
回车恐惧症?13个 JUNOS 技巧助你轻松无忧配置网络
一个网工的十年奋斗史 - 工作篇
一个网工的十年奋斗史 - 移民篇
海外IT工程师工作福利揭秘 一个网工的十年奋斗史(末篇)