BGP in the Data Center

2021-08-26 16:59:53 浏览数 (1)

摘自:https://arthurchiao.art/blog/bgp-in-data-center-zh/#chap_1

BGP(Border Gateway Protocol):边界网关协议

  1. 现代数据中心网络设计的目标是什么?
  2. 这些目标与其他网络(例如企业网和园区网,enterprise and campus)的设计目标有什么不同?
  3. 数据中心为什么选择 BGP 作为路由协议?

核心需求:

  1. 服务器到服务器通信越来越多(Increased server-to-server communication) 单体应用到微服务化的转变,导致南北向流量减少,东西向流量增加。
  2. 规模(Scale) 过去,几百台服务器就已经是一个大数据中心;现在,现代数据中心一个机 房可能就有上万台服务器。
  3. 弹性(Resilience) 老式数据中心的设计都是假设网络是可靠的,而现代数据中心应用都是假设网络 是不可靠的 —— 总会由于各种原因导致网络或机器故障。弹性就是要保证发生故障时 ,受影响的范围可控,尽量做到不影响用户体验。

多租户网络需要额外考虑:支持虚拟网络的快速部署和拆除(rapid deployment and teardown)。

传统网络设计的扩展方式:scale-in(垂直扩展),即通过更换性能更高的设备实现。缺点:

  1. 高性能设备特别贵
  2. 这些设备大部分都是两方冗余(two-way redundancy),存在同时挂掉的风险,可用性 不是足够高
  3. 发生故障时,故障范围特别大(尤其是核心设备)

1.2 Clos 网络拓扑

大型互联网公司最后采用了一种称为 Clos 的架构。Clos 架构最初是贝尔实验室的 Charles Clos 在 1950s 为电话交换网设计的。

可以实现无阻塞架构(non-blocking architecture):上下行带宽都充分利用。

图 1-1 简单的两级(two-tier) Clos 网络

特点:

  1. 连接的一致性(uniformity of connectivity):任意两个服务器之间都是 3 跳
  2. 节点都是同构的(homogeneous):服务器都是对等的,交换机/路由器也是
  3. 全连接(full-mesh):故障时影响面小(gracefully with failures);总带宽高 ,而且方便扩展,总带宽只受限于 Spine 的接口数量

注意,在以上模型中,Spine 仅仅用于连接 Leaf,因此在这种模型中,所有的功能( functionality)都集中在 Leaf 上。

扩展方式:scale-out(水平扩展)。

最大服务器数量(无阻塞架构下):n * m / 2,其中 n 是一个 Leaf 节点的端口 数量,m 是一个 Spine 节点的端口数量。

典型带宽,分为接入(leaf-server)和互连(leaf-spine):

  • 接入 10G,互连 40G
  • 接入 25G,互连 100G

受电源限制,单个机柜最大不超过 40 台服务器。

三级 Clos 网络

图 1-2 三级(three-tier) Clos 网络

一组 ToR 和 Leaf 组成一个二级 Clos,称为一个 pod 或 cluster;pod/cluster 作为一个独立单元再和 Spine 组成一个二级 Clos。

最大服务器数量:n * n * n /4,其中 n 是交换机端口数量。

Clos 架构的魅力:无论从哪一级看,每个组成部分都是类似的,可以方便地替换和扩容。

为了解决规模瓶颈,大型互联网公司甚至会考虑 4 级甚至 6 级 Clos 架构。

Clos 网络的副作用

由于 Spine 和 Leaf 之间是 full-mesh,网线会特别多,排线会复杂一些。

设备故障影响面比较小,排障和更换设备方便(resilience)。

设备都是对等的,管理比较方便。

1.3 Clos Network 网络架构

传统网络架构中,接入层和汇聚层走二层交换,因此需要运行 STP 协议消除二层环路。如果在 Clos 网络中交换机也走二层,那可用(active)链路就会大大减少,如图 1-3 所 示:

图 1-3 启用 STP 之后的网络连接

如果有链路发生故障,那可用链路的效率会更低:

图 1-4 启用 STP 并且一条链路发生故障之后的网络连接

由此可见,走二层会导致非常低效和不均匀的连接(highly inefficient and nonuniform connectivity)。

而另一方面,如果走三层路由,那就可以充分利用 Spine 和 Leaf 之间的 full-mesh 连接。而且路由还可以判断最短路径,或者为了达到更高整体利用率设置特定的路径。

因此,第一个结论:对于 Spine-Leaf 网络,路由(三层)比交换(二层)更合适。通 过二层连接的网络称为桥接网络(bridged network);通过路由连接的网络称为路 由网络(routed network)。

使用路由的另一个好处是,避免了各种厂商相关的 STP 优化方案(将多条物理链路聚合成 一条虚拟链路提高利用率)。

典型的传统桥接网络需要运行:

  1. STP
  2. 一个单向链路检测协议(虽然现在已经合并到 STP 了)
  3. 一个 VLAN 分发协议
  4. 一个 first-hop 路由协议,例如 HSRP(Host Standby Routing Protocol) 或 VRRP(Virtual Router Redundancy Protocol)
  5. 一个路由协议,用于连接多个桥接网络
  6. 一个独立的单向链路检测协议,用于走路由的链路(routed links)

如果是路由网络,那只需要:

  1. 一个路由协议(例如 BGP)
  2. 一个单向链路检测协议

和服务器直连的路由器(leaf)会充当 anycast gateway(也可以称为分布式网关), 此外就不需要其他协议了。

以上,就是 Clos 网络如何实现高度可扩展和弹性伸缩的。

1.4 服务器接入模型(Server Attach Model)

  • 单接入(single-attach)
  • 双接入(dual-attach)

大型互联网公司采用单接入方式(single-attach servers),即,每个服务器只连接 到单个置顶交换机。这种设计背后的逻辑是:服务器数量足够多,由于网络问题导致单个机 柜挂掉时,影响不是很大。

但是对于小型网络,乃至部分大型公司的网络,挂掉一个机柜带来的影响是不能接受的。因此这些公司采用双接入(dual-attach servers)方式:每个服务器连接到两个置顶 交换机。

双接入方式为了提高链路利用率,会将两个链路聚合成一个虚拟链路,这个技术是厂商相关 的,因此叫法不太一样:

  1. Cisco 叫 vPC(virtual Port Channel)
  2. Cumulus 叫 CLAG
  3. Arista 叫 MLAG(Multi-Chassis Link Aggregation Protocol)

这需要宿主机运行链路聚合控制协议(Link Aggreration Control Protocol, LACP) 以创建 bond 链路。如图 1-5 所示。

图 1-5 双接入方式下的链路聚合

1.5 连接到外部网络(Connectivity to the External World)

对于中型或大型网络,通过 border leaf 连接到外网。

主要好处:将数据中心的网络和外部网络隔开(isolate)。数据中心内的路由协议无需和 外部交互(interact),更加稳定和安全。

图 1-6 通过 border leaf 将一个 Clos 网络连接到外部网络

小型数据中心出于成本考虑,不会部署单独的 border leaf 节点,而是通过 Spine 连接到 外部网络,如图 1-7 所示。需要注意:这种方案中所有 Spine 都需要连接到外部网络,而 不是一部分 Spine。这非常重要,因为 Clos 网络中所有 Spine 都是对等的。

图 1-7 通过 spine 将一个 Clos 网络连接到外部网络

1.6 多租户(或 Cloud)支持

Clos 拓扑也适用于云计算网络,不管是公有云还是私有云。

云计算架构的额外需求:

  1. 敏捷性(Agility):能快速创建/删除虚拟网络
  2. 隔离性(Isolation):租户之间互相不可见
  3. 规模(Scale):能够支持大量的租户

1.7 现代数据中心设计的运维考虑

数据中心的设计会影响到数据中心的运维。

自动化是最基本的要求(Automation is nothing less than a requirement for basic survial)。在设计的时候要考虑能使自动化运维简单、可重复(simple and repeatable)。

1.8 选择路由协议(Choice of Routing Protocol)

对企业网(enterprise network),两种协议比较合适:

  1. OSPF(Open Shortest Path First)
  2. IS-IS(Intermediate System to Intermediate System)

它们都设计用于企业网内部,大部分企业网管理员对此应该很熟悉。

但是,OSPF 不支持多协议(例如对 IPv4 和 IPv6 需要运行两个独立协议),因此并没有 被大型互联网厂商采用。

IS-IS 支持 IPv4/IPv6,但是可选的实现比较少。而且,一些管理员认为,IS-IS 这样的链 路状态(link-state)协议不适用于 Clos 这样的富连接(richly connected)网络。

BGP 的特点:

  1. 成熟
  2. 支撑着互联网(powers the internet)
  3. 容易理解(fundamentally simple to understand),虽然名声可能不佳(despite its reputation)
  4. 实现很多,包括很多开源实现
  5. 支持多协议(例如 IPv4/IPv6,MPLS)和 VPN(内置)

只需对 BGP 做一些改造,就可以将它高效地应用中数据中心中。微软的 Azure 团队是最早 对 BGP 进行改造用于数据中心的。现在,我接触的大部分客户都是部署 BGP。

在下一章中,我们将看到人们对传统 BGP 进行了哪些改造,然后将它应用到数据中心的。

2 BGP 是如何适配到数据中心的

在 BGP 用于数据中心之前,它主要用于服务提供商网络(service provider network)。这导致的一个问题就是,数据中心不能运行 BGP,不然会和底层供应商的网络有冲突。如 果你是网络管理和运维人员,那意识到这一点非常重要。

不同网络场景:

  • 数据中心:高密度连接(dense connectivity)
  • 服务提供商(连接不同域):相对低密度连接(relatively sparse connectivity)

因此,服务提供商的网络首先是考虑可靠性(stability),其次才是(路由等)变化的快 速通知(rapid notification of changes)。因此,BGP 发送通知的实时性比较低。而在 数据中心中,管理员更希望路由更新(routing updates)越快越好。

另外,由于 BGP 自身的设计、行为,以及它作为路径矢量协议(path-verctor protocol) 的特性,单个链路挂掉会导致节点之间发送大量 BGP 消息。

第三个例子,BGP 从多个 ASN 收到一条 prefix(路由网段前缀)之后,最 终只会生成一条最优路径。而在数据中心中,我们希望生成多条路径。

为适配数据中心而对 BGP 进行的改造,见 FRC 7938。

本章描述这些改动,以及背后的考虑(rationale for the change)。这里再次强调,数 据中心使用的 BGP 和传统的 BGP 并不一样,如果不理解这一点,管理员很容易误操作造成 网络故障。

2.1 有几路由协议

传统 BGP 从 OSPF、IS-IS、EIGRP(Enhanced Interior Gateway Routing Protocol) 等 协议接收路由通告,这些称为内部路由协议(internal routing protocols),用于控制 企业内的路由。无怪乎很多人当时认为,要在数据中心中落地 BGP,还需要另一个协议。但实际上,在数据中心中 BGP 就是(特定的)内部路由协议,不需要再运行另一个协议 了。

2.2 iBGP 和 eBGP

数据中心内部是该使用内部网关协议(iBGP)还是外部网关协议(eBGP)?很多人觉得应 该是 iBGP,因为在数据中心内部,但其实不是。

数据中心中 eBPG 是使用最广泛的。原因;

  1. 主要原因是 eBGP 比 iBGP 更易理解和部署 iBGP 的最优路径选择算法很复杂,而且存在一些限制,使用、配置、管理复杂。
  2. eBGP 的实现比 iBGP 多,选择面比较大

2.3 ASN 编号

每个 BGP 节点都有一个 ASN(Autonomous System Number)。ASN 用于识别路由环境、 判断最优路径、关联路由策略等等。

ASN 有两个版本:老版用 2 个字节表示,新版用 4 个字节表示。

数据中心 BGP 中 ASN 的分配方式和公网 BGP ASN 的分配方式不同。

公网的 BGP 使用 well-known ASN,但数据中心中使用的一般都是私有 ASN,因为一般不需 要和公网做 peer。

私有 ASN

私有 ASN 和 私有网段类似。

但注意:如果管理员真要用公网 ASN,那也是没人能阻止的。有两个原因不建议这样做:

  • 造成管理的混乱,包括人和工具
  • 会将内网信息泄露到公网,造成极大的安全问题

私有 ASN 数量:

  1. 老版本(2 字节):大概 1023 个(64512~65534)
  2. 新版本(4 字节):大概 95 million(4200000000~4294967294)
Path Hunting 问题

有多种分配 ASN 的方式。

如果采用每个节点一个 ASN 的方案,那会存在一个 count-to-infinity 问题。简单说就是 :每个节点不知道其他节点的物理链路状态(physical link state),因此无法判断一条 路由是真的不通了(节点挂掉)还是通过其他路径还是可达的。

当一个节点挂到后,其他节点陆续撤回(withdraw)可达路由时,导致网络内大量的 BGP 消 息。这个问题称为 path hunting。

图 2-1 一个简单拓扑,解释 path hunting

ASN Numbering Model

为了避免 path hunting 问题,Clos 网络内的 ASN 编号模型如下:

  1. 每个 ToR 都有自己的 ASN
  2. pod 边缘的 leaf 有自己的 ASN,但同一个 pod 内的 leaf,共用同一个 ASN
  3. pod 之间的 spine,共享一个 ASN

图 2-2 是一个三级 Clos 的例子:

图 2-2 Clos 拓扑 ASN 编号模型示例

这种编号模型是如何解决 path hunting 问题的:以图 2-1 为例,如果 R2 和 R3 有 相同的 ASN,那 R1 收到 R2 的一条到 10.1.1.1 的消息后,再收到 R3 来的到 10.1.1.1 消息时(检测到有环路),就会拒绝后者。当 R4 挂掉时,消息回撤会很简单。

这种编号模型的缺点:无法做路由聚合或摘要(route aggregation or summarization )。还是拿图 2-1 为例,如果 R2 和 R3 通过直连的服务器总共收集到了 10.1.1.2/32 ~ 10.1.1.250/32 的可达消息。如果 R2 和 R3 做路由聚合,那只需要向 R1 通告一条 10.1.1.0/24 可达消息,而不用通告 250 次,每次一个 IP。在这种情况下,如果 R2-R4 链路挂了,那 R1 仍然认为 10.1.1.0/24 到 R4 仍然是可达的,因为可以通过 R1-R3-R4 ,但实际上有些 IP 是只能通过 R2-R4 才通的。也即路由聚合在这种情况下带来了问题。

0 人点赞