BGP在数据中心的应用5——BGP生命周期管理

注:

一、常用的show命令

前面四部分笔记着重于描述现代化数据中心的架构,以及BGP如何应用于数据中心中。在本篇的笔记中主要涉及到的是BGP的维护和排错的相关操作。首先是常用的show命令(不同厂商的设备会有一定的差别):

1.查看BGP的会话信息:
使用命令show bgp summary,结果如图1所示。默认显示的是IPv4的会话信息,如果想要查看IPv6的,乃至其他的会话信息,可以通告AFI/SAFI模型对命令进行修改,例如:show bgp ipv6 unicast summary则是查看IPv6的单播会话信息。
在这里插入图片描述

图1: BGP会话输出信息

以下是此输出中需要注意的要点:

  1. 列出了此设备所有的邻居(与OSPF等其他协议不同)。
  2. 列出了每个会话的状态。如果会话处于Established状态,则显示从对等体接收到的路由数量。
  3. 显示每个会话的正常运行时间(如果会话处于关闭状态,则显示其关闭持续的时间)。
  4. 显示了节点的路由器ID和ASN等信息。

此外,我们还需要注意的是,这里的neighbor显示的是对等体的hostname,这是BGP中的一个新的能力(capability)“hostname”。它可以在Open报文交互的时候携带上。一旦双方都支持该能力,后续所有的show命令都可以携带上对应的hostname而不是对端的IP,这样能够更加方便我们进行排错。例如:使用命令show ip bgp neighbors neighbor_name可以查看邻居的详细会话信息。详细的会话信息中包括对等体之间协商的能力信息,各个定时器,每一个地址簇的邻居,收发报文等。

2.查看对等体之间的路由交换信息
另外一条常用的命令则是show ip bgp或者show bgp ipv4 unicast。具体的输出信息如图2所示:
在这里插入图片描述

图2: BGP路由输出信息

关键字段是路由网段Network、可能的Nexthops以及与每条路由关联的AS_PATH。此屏幕仅显示12个路由中的8个,因为其他两个不被接受。拒绝路由的常见原因是策略决策或检测到AS_PATH环路。此外,每一行开头的星号(*)表示路线有效,即Nexthop是可以到达的。之后,相等符号(=)表示该路由具有多个可用的等成本路径。

此外,如果我们想要查看其中详细的路由信息,则可以使用show ip bgp x.x.x.x(路由网段)进行查看。例如,在这里我们查看10.254.0.3这条路由的详细信息,最终的输出如图3所示:
在这里插入图片描述

图3: BGP详细路由输出信息

使用此命令,我们可以仔细检查一条具体的路由。图3显示了该路由包含了哪些属性,以及该设备向哪些对等体通告了该路由。

二、连接外部网络

目前,我们还没有探讨Clos网络与外部网络通信的注意事项。如图4所示,它展示了一个简单的Clos网络通过Exit Leaf访问外网的拓扑:
在这里插入图片描述

图4: 连接外部网络拓扑设计

简单来说,Exit01和Exit02是从划分数据中心内部和外部的两个节点,也被称为Border交换机。它们通过连接到Internet节点实现与外部网络的互访以及将Clos网络与外部网络进行隔离。为了保证上述2个目的,我们需要在Border交换机与Internet节点交换路由时,上实现如下2个功能:

  1. 使用命令neighbor neighbor_name remove-private-AS all剥离数据中心路由的私网AS号;
  2. 使用命令aggregate-address summary-route summary-only聚合数据中心路由,并不发送明细路由。当然,一旦路由被聚合,AS_Path信息也会被默认地清除掉。

三、节点维护调度

如果我们需要对数据中网络中的某些节点进行升级,就需要避免路由被发送到正在升级的设备而导致流量损失。例如,在图4中,如果Spine01要升级,我们应该要求所有Leaf节点在最佳路径计算中忽略Spine01,并在此期间将所有流量发送到Spine02,以确保平稳的交通流。同样,对于服务器上连2个Leaf的情况,Spine也需要避免向其中正在升级的Leaf发送流量。

此外,现代数据中心有两个以上的Spine节点。其中四个Spine节点更为常见,在这种情况下,当一个Spine停止使用进行维护时,网络可以保持75%的容量。在传统的企业网络工作设计中,只有两个Spine节点,当单个Spine停止服务时,这将导致更严重的容量损失。相较之下,一些超大型网络中部署了16或32个Spine同时运行,在这种情况下,一个Spine等故障的只会导致容量下降1/16或1/32。

那么,我们如何让流量绕过升级中的节点呢?一个很直接有效的方式就是通过路由策略,在升级前增加去往升级节点路由的AS长度。在BGP的选路规则中,AS_path越短的情况下,越优先。所以流量就可以提前避过这个升级节点。例如,Leaf01访问Leaf04可以通过Spine01或者Spine02(ECMP)。但是现在Spine02需要进行升级。所以我们需要提前在Spine02节点上配置如下路由策略,以增加发送给Leaf节点路由的AS_Path长度:

route-map SCHED_MAINT permit 10
	set as-path prepend 65000 65000
neighbor ISL route-map SCHED_MAINT out

当下行Leaf节点收到Spine02的路由条目后,由于AS_path长度比从Spine01学习到的更长,所以流量都被切换到Spine01上。如图5所示:
在这里插入图片描述

图5: 通告增加AS_path长度来引导路由

四、BGP调试

像任何其他软件一样,由于错误或操作员的误解,BGP偶尔会表现得不可预测。解决这个问题的一个常见方法是启用调试(Debugging)并查看调试日志,以确定不可预测行为的原因。不同厂家的调试命令不同,通常是debug bgp [option]类似的格式。其中option字段可以被替换为一些特定的选项以对特定的方向进行调试。例如:

  1. neighbor-events:这用于调试所有会话,也可以仅适用于特定会话。启用此选项后,可以在调试日志中看到哪个端启动连接、BGP状态机转换以及协商了哪些能力等信息。
  2. bestpath:这用于调试最佳路径计算。如果我们为特定路由启用它,日志将显示选择前缀的最佳路径时遵循的逻辑,包括多路径选择。
  3. Updates:这用于调试对等体之间发布或接收的路由的问题。我们可以为邻居指定单条路由、所有路由,以便更仔细地检查问题的根本原因。调试日志不仅会显示被接受的路由,还会显示被拒绝的路由。

总之,本文主要介绍了数据中心BGP的一些维护方法。下一个笔记是该文章整理的最后一篇,主要介绍Leaf节点如何与下行服务器连接和通信。