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

news2024/9/27 15:35:50

注:

  • 本文根据《BGP in the Datacenter》整理,有兴趣和英文阅读能力的朋友可以直接看原文:https://www.oreilly.com/library/view/bgp-in-the/9781491983416/
  • 上一部分笔记请参考:https://blog.csdn.net/tushanpeipei/article/details/128535543?spm=1001.2014.3001.5501

一、常用的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节点如何与下行服务器连接和通信。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯前端vue面试题合集

能说下 vue-router 中常用的 hash 和 history 路由模式实现原理吗? (1)hash 模式的实现原理 早期的前端路由的实现就是基于 location.hash 来实现的。其实现原理很简单,location.hash 的值就是 URL 中 # 后面的内容。比如下面这…

简单易懂的Spring扩展点详细解析,看不懂你来打我

简单易懂的Spring扩展点原理,看不懂你来打我总览BeanFactoryPostprocessor作用回调时机原理BeanDefinitionRegistryPostProcessor作用例子:Spring对Configuration、ComponentScan、Component、Bean、Import等注解的处理回调时机原理ImportSelector作用例…

vue组件之间的数据传递

目录 组件之间的通信 1、组件之间的关系:父子关系、兄弟关系、跨级关系 2、父子组件之间的通信(数据传递): 3、兄弟组件之间的通信(数据传输): 4、跨级组件之间的通信:provide /…

SparkSQL 入门简介

在安装目录的bin目录打开spark-shell.cmd,输入如下,按tab健,查看可执行数据源 spark.read.在安装目录D:\spark-3.0.0-bin-hadoop3.2\bin\input新建user.json {"username":"chen","age":3} {"username&q…

vue全家桶-vuex(一)

vue全家桶-vuex(一)1.Vuex概述2.Vuex中的核心特性A.State1.this.$store.state.全局数据名称-组件访问State中的数据的第一种方式2.组件访问State中的数据的第二种方式:按需导入B.Mutation1.this.$store.commit是触发Mutation的第一种方式2.触…

java学习day67(乐友商城)商品详情及静态化(Thymeleaf)

1.商品详情 当用户搜索到商品,肯定会点击查看,就会进入商品详情页,接下来我们完成商品详情页的展示, 1.1.Thymeleaf 在商品详情页中,我们会使用到Thymeleaf来渲染页面,所以需要先了解Thymeleaf的语法。 …

简明Java讲义 1:Java环境搭建与入门

目录 1、Java 介绍 2、Java 运行机制 3、Java开发环境搭建 4、Hello World! 1、Java 介绍 Java是Sun微系统公司在1995年推出的,是一门面向对象的编程语言 2006年12月,Sun公司发布了JDK1.6(也称作Java SE 6) 200…

数位DP~

综述 数位DP的应用范围: 在某个区间内有多少个满足一定的性质 数位DP中使用的方法: 类似于前缀和。A到B相当于f[B] - a[A-1] 这一点尤为重要,因为已经弱化了边界,使得考虑的更少分情况讨论 ​ 1081. 度的数量 ​ 输入样例…

BGP综合实验

目录 1.拓扑图 2.实验要求 3.实验思路 4.主要配置 5.测试 6.实验总结 1.拓扑图 2.实验要求 AS1存在两个环回,一个地址为192.168.1.0/24;AS3中存在两个环回,一个为192.168.2.0/24;整个AS2的IP地址为172.16.0.0/16&#xff0c…

k8s之工作机制

写在前面 本文一起看下k8s基本架构。 1:Kubernetes的基本架构 k8s本身也是一种分布式架构,也需要在多台机器(实体机或虚拟机无差别)部署,部署的机器我们叫做节点,其中节点分为Master node即主节点,worke…

java使用反射给对象属性赋值

📢📢📢📣📣📣哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝一位上进心十足的【Java ToB端大厂领…

高频js手写题之实现数组扁平化、深拷贝、总线模式

前言 古人学问无遗力,少壮工夫老始成。纸上得来终觉浅,绝知此事要躬行。看懂一道算法题很快,但我们必须将这道题的思路理清、手写出来。 三道js手写题的思路和代码实现 数组扁平化 演示效果 将[1, [1, 2], [1, [2]]] 变成 [1, 1, 2, 1, 2] 第一种&…

抽象类与抽象方法

文章目录一、abstract关键字使用修饰类:抽象类修饰方法:抽象方法注意点抽象类的匿名子类一、abstract关键字使用 abstract:抽象的 可以修饰:类、方法 修饰类:抽象类 1、此类不可进行实例化 2、抽象类中一定有构造器…

报错 cannot import name ‘int‘ from ‘numpy‘

报错详情: 原因是因为np.int在numpy1.20已经被废弃掉了,可以通过 pip show numpy在命令行里查看。 现在使用的是np.int_ 或者 np.int32 或者 np.int64 猜测原因 但这个报错是在我自己的site-packages里的numpy的报错,我怀疑可能是numpy本身…

【linux】crontab

文章目录crontab简介crontab安装语法实例脚本无法执行问题常用的命令展示crontab的注意事项来源crontab简介 crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中&a…

linux系统中CAN驱动的通信方法与原理

大家好,今天主要和大家分享一下,如何使用linux系统下的CAN驱动实验。 目录 第一:CAN通信基本简介 第二:CAN通信的主要特点 第三:CAN通信协议 第四:程序代码的具体实现 第五:使能Linux内核自…

MATLAB-ezplot绘图函数

ezplot 函数与fplot 函数类似,该函数可以绘制显函数图形、隐函数图形和参数方程图形。ezplot函数的调用格式如下。 ezplot(f) ezplot(f, [ min , max ]) ezplot(f.[ xmin , xmax , ymin , ymax]) ezplot(x,y) ezplot(x,y , [tmin , tmax]) ezplot(.. . ,f…

jvm内存管理

参考链接 参考链接 Garbage Collection Concepts garbage collector的作用包括: 分配内存确定活着的对象不被清理回收死了的对象占用的内存 寻找和释放垃圾占用的内存空间的过程称为garbage collection一般情况下,整个堆或堆的一部分被填满时或者达到…

C++11 多线程

线程(thread)是操作系统能够进行运算调度的最小单位,它被包含在进程中,是进程中的实际运作单位,一条线程指的是进程中一个单一顺序的控制流,一个进程可以并发多个线程,每条线程执行不同的任务。…

FreeRTOS教程——定时器(二)

Free RTOS定时器 一、概念 一、概论 软件定时器允许设置一段时间,当设置的时间到达之后就执行指定的功能函数,被定时器 调用的这个功能函数叫做定时器的回调函数。回调函数的两次执行间隔叫做定时器的定时周期, 简而言之,当定时…