本文借鉴了国内外大型互联网公司的实践经验,总结了一些规划和运营BGP网络的方法
前言
在之前的文章《大型数据中心路由协议选择》中,介绍到边界网关协议(BGP)已经成为大型数据中心(IDC)首选路由协议。众所周知,BGP最初是为不同自治系统之间的互通设计的,而并非面向IDC内部。在BGP引入到数据中心场景时,也曾经出现“水土不服”,问题诸多。面对这些问题,聪明的网络工程师们对BGP做了哪些优化?数据中心BGP网络规划需要考虑哪些问题?本文借鉴了国内外大型互联网公司的实践经验,抛砖引玉,粗浅分析一二。
大型数据中心组网架构
▲ 图1:大型数据中心Spine-Leaf组网架构(内网)
面对数据中心业务对可靠性近乎苛刻的要求,现代数据中心网络的重要设计方法是假定网络设备和链路都是不可靠的:目标在于当这些不可靠的设备或者链路出现故障时,也能通过自愈消除对业务产生的不良影响。基于此,Leaf-Spine (Leaf:叶节点,Spine:脊节点)的组网架构已经成为数据中心主流。如图1所示,这种CLOS多级交换网络为数据中心带来的显著变化是产生了大量的等价设备和路径,从而消除了单点故障,使得网络架构具备高可靠、高性能以及强大的横向扩展(Scale-out)能力。
在这样的数据中心架构下,BGP路由协议往往会被部署到CLOS网络的所有层级(如图1的TOR,Leaf,Spine等设备),用来为数据中心形成简单、统一的超大规模网络。对于BGP的部署来说,除了满足IPv4、IPv6路由传递的基本能力外, BGP的快速收敛、灵活控制、方便运维等能力也是部署设计的关键点。
BGP部署设计要点
本文的目的在于为IDC的BGP路由部署设计提供一些方法参考,场景聚焦在IDC内部Underlay路由设
计。
▲ 图2:数据中心BGP部署设计要点
如图2所示,在一个典型的三级CLOS数据中心组网中,BGP设计要点大致可以分为两部分: 一、BGP基础能力规划,包括: 为Tier 1-3设备规划AS number;
基础BGP参数配置,设备间建立BGP邻居; 为CLOS网络生成ECMP等价路由; 对不同类型的BGP路由进行路由属性控制; 制定路由传递的规则; 提供IPv4/IPv6双栈能力; 二、BGP运维能力规划,包括:
使用双向转发检测协议(BFD)加快故障收敛; 提供不间断的业务能力。 BGP基础能力规划 1、AS number规划
BGP的AS number分为公共AS和私有AS。在IDC内部,虽然AS号不会通告给外部网络,但为了保证绝对的安全性,以及延续使用习惯,仍推荐使用私有AS号。
旧的BGP版本(RFC1771定义)留给AS号的长度范围是2个字节,其中用于私有的AS号为1023 个(64512~65534),不足以应付大型IDC成千上万的网元数量。对于这个问题目前有两种解决方案:
新的RFC4893《BGP Support for Four-octet AS Number Space》定义了4字节的BGP AS number。这使得AS number和IPv4地址一样多,其中可用于私有AS的范围达到9千万个
(4200000000~4294967294)。足以为IDC内部的每台网络设备,甚至每台主机分配一个独立的AS number。
考虑到AS number使用的简洁,并确保所有设备都能支持,推荐使用64512~65534的私有AS号,并对AS号码进行全局规划,同一个AS number可以被多个设备重复使用。 以下是一个推荐的AS number分配示例:
▲ 图3:IDC AS number分配示例
2、BGP基础参数配置
这部分是数据中心实现BGP互通的基础,推荐如下配置: BGP邻居建立
BGP是基于TCP来建立连接的,因此需要为BGP指定一个IP地址用于建立BGP会话。 在IDC内部推荐使用设备的直连接口地址建立BGP会话。 BGP的Router-id
仅仅是一个标识,设置为交换机的管理口地址或者loopback地址都是不错的方法。 BGP计时器
BGP需要使用keepalive消息来实现会话的保活,确定下一跳的可达性。如前文所述,BGP最早是设计应用于不同自治系统(服务商)之间互联的。不同AS之间路由的稳定性比快速收敛更为重要,为了防止路由震荡,BGP协议默认的计时器非常长,其keepalive/hold timer分别是60S和180S。而在数据中心内部,故障的快速收敛更为重要,推荐采用1S/3S的BGP计时器配置加快收敛。BGP还有另外一个重要的计时器:Advertisement Interval,即发布路由通告的间隔。在这个周期内的BGP事件会被缓存起来,等待计时器到了后再统一发送。BGP默认的通告间隔是30S。在数据中心需要立刻通告变化,因此推荐的配置是0 S。 以我们的RGOS软件为例,需要在BGP进程下,对计时器进行配置:
其他推荐的配置
bgp log-neighbor-changes :不打开 debug 的情况下记录BGP 的状态变化信息。 3、BGP ECMP
对于CLOS网络而言,等价多路径是构筑网络可靠性、稳定性的基石。
BGP形成等价路由的前提是开启“多径”multipath的特性,以我们的RGOS为例,需要配置:
以上只是开启了BGP的多路径能力,接下来需要利用BGP选路的原则,把把多条链路的的下一跳都放入路由表中形成ECMP。13条BGP选路原则中,两条路由等价并执行负载均衡的判断标准是:前8个条件都相同。在数据中心BGP规划中,这前8个条件只需要考虑AS_PATH即可,因为其他条件在IDC都是一致或者无需关心的。
对于AS-PATH属性,在缺省情况下是要求精确比较的,只有AS-PATH的长度和具体AS Number完全相同时才可能成为等价路径。依据前面的AS Number规划,每台TOR都具备不同的AS号。这样Leaf南向去往同组两台TOR设备的路由无法实现负载分担。上述问题的解决方案是在Leaf设备上使能AS-PATH 宽松比较,以我们RGOS为例,需要配置:
如前文的AS规划,在同一Pod中,所有Leaf的AS number相同,因此无论是哪一台Leaf设备发送路由,在TOR上看到的AS-PATH总是一致的。因此Leaf上无需开启宽松比较模式。
此外,Leaf和TOR之间存在大量的等价邻居,拥有完全一致的配置策略。实际的部署过程中推荐使用BGP
peer-group功能来简化配置。 在我们RGOS做如下配置实现该功能:
4、BGP路由属性规划
BGP具备丰富的扩展属性,可以实现强大的路由控制,当前IDC中用的最多的是BGP community属性,可以很大程度简化路由策略。在IDC当中,我们常常会使用到私有的团体属性,用来为前缀加上管理的标记。私有community使用的是AS:number的格式,其中AS是指本地AS号或者对等体AS号,而number是指本地分配好的,用来表示可以应用策略的一组团体。实际使用中我们可以用更简洁的community标记,比如为业务网段打上1:1属性,为内网汇总路由打上2:2属性等,并基于此做路由传递的精细控制。 5、制定路由传递规则
▲ 图4:数据中心BGP路由通告规划
如图4所示,多组TOR+Leaf组成一个POD(最小交付单元,Point of delivery,作为数据中心基本物理设计单元)。Spine负责横向连接多个POD,而MAN/DCI负责提供跨区域的互联。IDC的BGP路由规划建议如下: 北向路由传递
TOR至Leaf至Spine至MAN/DCI,逐级通告业务网段+管理网段+Loopback,在去堆叠场景时TOR