注: 本文根据《BGP in the Datacenter》整理,有兴趣和英文阅读能力的朋友可以直接看原文:https://www.oreilly.com/library/view/bgp-in-the/9781491983416/
引子
在传统的大型数据中心,网络通常是三层结构。Cisco称之为:分级的互连网络模型(hierarchical inter-networking model)。这个模型包含了以下三层:
- Access Layer(接入层):在局域网中,接入层提供终端设备接入网络的功能;在广域网中,它可能还提供远程办公( teleworker)或远程 site 通过 WAN 访问公司网络的功能。
- Distribution Layer(分发层):分发层对接入层的包进行聚合(aggregate),然后送到核心层进行路由。分发层是 L2 网络(交换)和 L3 网络(路由)的边界。
- Core Layer(核心层):核心层也称作网络骨干(network backbone),由高速网络设备组成。核心层设计用来尽可能快地转发包,以及互联多个网络模块 ,例如分发模块、服务模块、数据中心,以及 WAN 边缘。
传统三层网络架构的规模取决于核心层设备的性能和规模、交换机的端口密度。最大的数据中心对应着体积最大和性能最高的网络设备,这种规模的设备并非所有的网络设备商都能提供,并且对应的资金成本和运维成本也较高。采用传统三层网络架构部署数据中心网络,企业将面临成本和可扩展性的两难选择。
一、现代数据中心网络的需求
数据中心的诞生是为了服务于数字业务,因此,它需要适应每一个阶段业务的架构和需求。前两次应用业务架构为单体应用程序(monolithic single-machine applications)以及客户端-服务器(Client-Server)架构模型。然而,随着云计算的兴起,越来越多的业务应用架构转变为了服务器-服务器(Server-Server)模式。这也是第三次应用浪潮,它的出现,也让承载它的数据中心架构发生了巨大的变化。此变化需要对下面三项提供良好的支持:
对服务器-服务器通信需求的增加:
在客户端-服务器架构中,物理服务器一般仅仅处理客户访问自己的请求(Request),或者与一些特定的服务器通信,例如数据库。但总体来说,大部分流量依然是南北向(South-North)流量。相反的是,目前的一些应用,例如Hadoop,需要部署在数以百计的节点上,并且无缝通信。这需要极大的东西向(East-West)流量支持。进一步说,现在的服务器为了提供更优秀的东西向流量支持、可移植性、可拓展性以及更高的硬件利用率,放弃了物理服务器直接部署应用的方式,而是转为了以虚拟机(Vitual Machine)或者微服务(Microservices)架构的形式。这种新的服务器部署形式对网络架构的要求是之前数据中心无法支持的。
规模:
随着数据储存量和计算能力的极大攀升,数据中心的规模也不断的扩大,通常一个数据中心需要上万以及数十万的服务器进行支持,而以往数据中心的网络架构通常无法满足如此庞大的服务器接入。
恢复力(Resilience):
数据中心网络的规模的增大必然带来网络故障出现频率变多。传统的数据中心通常使用向内扩张(Scale-in)的方式,使用更昂贵复杂的设备来来提高数据中心性能。但是这种方式导致设备一旦出现故障,所辐射的用户范围将变大,并且难以排错,这是业务所无法忍受的。所以在新的数据中心架构设计中,它被允许能够出现故障,但是要求故障是可控的(范围小),易于排错和快恢复,以及对用户影响十分微小的。
因此,未来解决上述问题,Clos架构被应用于来新的数据中心网络中。
二、Clos模型架构
Clos架构模型在上世纪50年代就已经被理论提出,以应对爆炸式的网络增长。图1显示了最简单的Clos模型。其中,绿色节点代表交换机,灰色节点代表服务器。在绿色节点中,顶部是Spine节点,下部是Leaf节点。Spine节点与Leaf节点相互连接,每片Leaf都连接到每个Spine节点,反之亦然。此外,Leaf节点下连服务器,为服务器提供网络接入服务。
进一步说,这样的模型架构有如下的好处:
- 首先要注意的是连接的统一性:服务器通常距离任何其他服务器只有三跳,网络质量容易保证。
- 接下来,节点非常均匀:服务器看起来相似,交换机也是如此。这种重复的网络结构就像一个一个模块堆积而成,满足了现代数据中心快速,简单的拓展对需求。
- 第三,根据现代数据中心应用程序的要求,连接矩阵(Matrix)相当丰富,使其能够优雅地处理故障。可以看到,每一个Spine和Leaf节点都有线路连接,其中一条或者多条链路故障对整个网络对影响不大。
此外,我们可以看到,所有服务器直接与Leaf交换机直接相连,Spine只是作为连接器来完善服务器之间的连接。在这个模型中,服务器被推到Leaf,而不是Spine。这种架构模型称为向外扩张(Scale-out)模型。在实际的部署中,服务器通过低速链路与Leaf互连,交换机之间通过高速链路互连。
想要对该模型架构进行扩容,通常有两个方法。一个是增加Leaf和Spine节点的数量、更换更好的设备以及接口转发速率,但是这种方式很容易受到每个交换机接口数量,投入成本以及转发效率的限制。还有一种方式则是增加Clos网络的层级,例如从二层Clos网络转变为三层Clos网络架构,如图2所示:
可以看到,整个网络分为了三层,分别是Spine、Leaf和Tor(Top of rack)。其中Tor设备也就是整个网络服务器的接入点,由于它通常部署在每一个Rack的顶端,所以被称为Tor of rack。由于多个Leaf和Tor组成的二级Clos网络通过Spine进行连接,极大的扩张了数据中心设备的规模。这从根本上展示了Clos网络的美妙之处:就像分形设计一样,更大块都是从本质上相同的积木组装而成的,每一个积木并不需要有超强的转发能力。甚至我们可以将网络层级扩大到四级或者更多,以绕过较小构建块的规模限制。
最后总结一下,通过扩大层级的方式,我们使用固定的,相对廉价的交换机就能过建成规模庞大的网络。同时受益于每一层级间丰富的互联的链路,及时链路乃至设备出现故障,所损书的带宽依然在可控范围内,并且所影响的服务器不多(传统网络中通常两台设备做备份,其中一台出现故障,带宽直接减少百分之50)。最后,由于交换机以模块化的形式部署,我们只需要选择几类不同型号的即可,方便管理和排错。
三、Clos网络架构
Clos网络架构还要求使用与传统网络架构不同。在传统网络中,我们所谓的Spine层被称为网络的访问聚合层。前两层网络是使用桥接(bridge)而不是路由(routing)连接的。桥接网络中使用生成树协议(STP),该协议将Clos网络的丰富连接矩阵分解为无环路树。例如,如图1所示,在双层Clos网络中,最左边的叶子和最右边的叶子之间有四条路径。然而,STP只能使用其中一条路径。因此,对于左边和最右边的Leaf,拓扑缩减为图3所示的拓扑结构。
相比来说,路由能够充分利用Clos网络的丰富连接矩阵,利用所有路径。路由还可以采用最短的路径,以更好地整体链路利用率。因此,我们可以得到如下的结论,路由最适合Clos结构,而桥接则不适合。从桥接到路由的转换中获得的一个关键好处是,我们可以摆脱桥接网络所需的多个协议,其中许多是专有的。传统的桥接网络通常运行STP、VLAN协议、第一跳路由协议(如主机备用路由协议(HSRP)或虚拟路由器冗余协议(VRRP)),以及路由链路的单独单向链路检测协议。通过路由,我们唯一的控制平面协议是路由协议和双向链路检测协议(BDF)。通过减少运行网络工作所涉及的协议数量,我们还提高了网络的弹性和减少了排错的复杂性。
四、服务器接入模型
大型企业的数据中心拥有丰富的服务器,因此因网络工作故障而损失整个机架无关紧要。然而,在许多较小的网络中,由于失去一个Tor会导致整个机架的服务器无法使用,并且无法承担该后果。因此,它们双连接服务器,每个链接都连接到不同的ToR,并且这两个ToR都位于同一个机架上。
因此,当服务器双连接时,双链路使用供应商专有协议聚合成单个逻辑链路,Cisco称其为虚拟端口通道(vPC),Arista称其为多机箱链路聚合协议(MLAG)等等。从协议的角度来看,连接到服务器的两个交换机提供了一种错觉,即它们是单个交换机。此外,两台Tor之间还需要通过标准的链路聚合控制协议(LACP)协议捆绑链路,以提高互联接的可靠性。图4显示了带有MLAG的双连接服务器架构。
五、连接外部网络
Clos网络访问外部网络通常有两种方式,分别是通过Border pod或者Spine。它们的架构图分别如图5和图6所示:
简单来说,这两种模型各有优势。首先是通过Border Pod访问外部网络,这种方式最大的优势就是将内部网络和外部网络进行了分离,内部的路由协议不会和外部进行交互,保证了内部网络的稳定和安全性。但是,如果是在小规模的网络中,通常是没有成本去专门部署Boeder Pod的,因此也可以直接通过Spine实现对外网的访问。需要注意的是,在这个模型中,所有Spine都需要连接到外部网络,以实现流量的负载(ECMP),否则所有流量仅通过少数的Spine访问外网,会照常相应的链路拥塞和设备故障。
六、支持多租户
随着云计算的兴趣,数据中心的网络还需要满足一些额外的特征:
- 敏捷性:鉴于云的典型使用,即客户快速创建和删除资源,网络能够支持这种模式至关重要。
- 隔离:一个客户的流量不得被其他客户看到。
- 规模:必须支持大量客户或租户。
相对来说,传统的数据中心架构通过VLAN、VPN实例来隔离租户已经不适用于虚拟机以及微服务的架构场景,因为VLAN和VPN实例无法实时的感受这些服务的创建和销毁,此外VLAN ID的个数(1-4095)也极大程度限制了数据中心所能连接服务器的数量。因此,通过Clos架构在底层(Underlay)运行路由协议保证网络全局可达的情况下,再通过虚拟拓展局域网(VXLAN)的方式在租户间建立VXLAN的高层(Overlay)隧道,能更好的解决支持多租户的问题。
七、自动化运维需求
由于数据中心的规模巨大,我们必须对其采用自动化的管理形式。如果一个数据中心中设备各异,差别巨大,是几乎无法实现全自动化管理的。庆幸的是,在Clos架构中通常使用的交换机类型固定,并且通过VXLAN结合软件定义网络(SDN)的形式,能过极大的简化网络部署和运维的压力。
八、路由协议选择
这里我们推荐使用BGP来架构数据中心的底层网络。相对于OSPF,它天生支持更多的协议栈(OSPFv2和OSPFv3严格来说是两个不同的协议),并且BGP也不需要向链路状态协议定时泛洪链路(Link-State)状态信息,因为BGP是基于触发更新,以减少路由协议对带宽的消耗。此外,通过BGP的形式传递路由,交换机也无需维护极大的链路状态数据库,减少对于宝贵计算资源的浪费。另外一点,BGP带有更加丰富的选路属性,能过灵活的帮助数据中心实现底层的网络负载均衡等需求。最后,BGP是基于TCP协议同步信息,有足够的可靠性。
当然BGP的收敛速度一般是无法与链路状态协议所相比的。并且,BGP作为一种特殊的距离矢量(Distance- Vector)协议,也有着所有距离矢量协议的通病。因此,我们需要对BGP进行一些额外的调试,以解决这些问题。具体的内容都将放到后续的笔记中进行整理。