写点什么

万台规模下的 SDN 控制器集群部署实践

2014 年 10 月 20 日

本文根据华三通信研发副总裁王飓在 2014 年 QCon 上海的主题演讲《SDN 控制器集群中的分布式技术实践》整理而成。

目前在网络世界里,云计算、虚拟化、SDN、NFV 这些话题都非常热。今天借这个机会我跟大家一起来一场 SDN 的深度之旅,从概念一直到实践一直到一些具体的技术。

本次分享分为三个主要部分:

  • SDN & NFV 的背景介绍
  • SDN 部署的实际案例
  • SDN 控制器的集群部署方案

我们首先看一下 SDN。其实 SDN 这个东西已经有好几年了,它强调的是什么?控制平面和数据平面分离,中间是由 OpenFlow 交换机组成的控制器,再往上就是运行在 SDN 之上的服务或者是应用。这里强调两个,控制器和交换机的接口——我们叫做南向接口;另一个是往上的北向接口。

SDN 的核心理念有三个,第一个控制和转发分离,第二个集中控制,第三个开放的 API——可编程、开放的 API 接口。单纯看这三个概念,我们很难理解为什么 SDN 在网络业界现在这么火。这三个概念就能够支撑起 SDN 的成功吗?所以我们要探寻一下 SDN 背后的故事。

SDN 背后的故事

其实 SDN 在诞生之初,我们这些做网络的人对它不重视,最开始认为就是大学的教授搞出来的实验室里的玩具,并不认为会对产业界有大的影响,可是几年下来以后让我们每个人都大吃一惊,它发展太快了。这个背后有什么呢?

实际上在 SDN 的发展的几年当中有另外一个技术在迅速的发展,铺天盖地来到每个人的身边,就是云计算。说云计算我还想跟大家分享一个小故事,我前几天在公司准备 QCon 的胶片,我们公司的负责保洁的师傅说了,你做云计算啊?我说是啊,你也知道云计算?他说当然知道了,我经常用云计算,那我问他,你都怎么用的?他说上淘宝啊,经常买东西。然后我就问他了,那你知道淘宝应该算什么云吗?其实我问他这句话背后的含义是因为,在我们这个圈子里面把云分为公有云、私有云、混合云,我想问问他,结果他的答案非常让我震惊,淘宝你不知道吗?马云啊!所以我就深深的体会到了,起一个好的名字是非常重要的。

刚刚这个只是个笑话,体现了两个问题:第一个就是云计算现在地球人都知道,第二个就是每个人对云计算的理解又是不同的。我给云计算下了一个定义,就是使计算分布在海量的分布式节点上并且保持弹性,这么说可能比较抽象,再说的稍微形象一点就是说使资源池化,在你需要的时候可以按需索取、动态管理。

当人们围绕着按需索取动态管理做文章的时候,什么技术能达到这个要求呢?虚拟化技术。所以现在看云管理平台,OpenStack、CloudStack 也好,都是围绕这三个方面——计算、存储还有网络的虚拟化做文章的。

在这股虚拟化的浪潮前面,计算虚拟化发展的最早也发展的最快,网络和存储的虚拟化就相对滞后一点。当人们把目光聚焦到网络虚拟化的时候,人们寻找解决网络虚拟化的方法和工具,这个时候 SDN 就出现在人们的视野里了。

刚刚讲的 SDN 三个理念:控制和转发分离可以使控制层面脱离对网络设备的依赖,可以快速发展;集中控制就很方便对资源进行池化和控制;开放的 API——南向和北向接口——可以催生产业链,推动整个产业的快速发展。

开放的云计算数据中心解决方案都离不开 SDN,从某种程度上讲,是云计算架构里面的基石,再讲另外一个话题,NFV 也是比较热的话题,是网络功能虚拟化,和刚刚我讲的网络虚拟化就差一个字母,但是实际上阐述的是两个不同层面的概念。

我们讲了云计算需要网络虚拟化,实际上不是今天才有的,像我们做网络的人都知道在很久以前人们就有这种网络虚拟化的要求了,不过在那个时候我们管它叫 VPN,虚拟专用网,以前使用的都是在一个公共的网络上虚拟出来一个专用的网络,让使用者以为这个网络就是给我专用的。

那么到了云计算时代,在我们讨论云数据中心的时候,就不再用原先的词了,现在说 multi-tenant,多租户,其实道理是一样的,也是在一个公共的网络里隔离出来各个专用的网络。这个技术是什么?就是 Overlay。数据层面看这俩技术没有本质的区别,都是实现了数据封装,方式就是在网上建立隧道把各个网络隔离开。

回头看 NFV 这个概念,就有点区别了:NFV 是欧洲电信联盟提出来的。我们知道在运营商的机房里面看到成片的服务器、存储设备、还有大量的不同厂商不同的网络设备,云计算的时代这些运营商也不干了,这么搞太烦了,维护起来成本高,部署起来复杂,新业务上线很慢,他就强调能不能把这个世界搞得干净一点,机房当中只剩下三个设备:标准的交换机,标准的服务器还有标准的存储设备,除了这些设备,其他通通消失,把所有功能挪到标准的服务器上实现,强调网络功能的虚拟化。

所谓功能的虚拟化就是说把这个功能从传统的网络设备里拿出来。这个是欧洲电信联盟给出的 NFV 的架构图,我们看这个架构图的时候发现,这个下面的部分称为 NFVI,就是基础设施,进行管理和虚拟化,目标是为了在上面提供这些他称之为 VNF 的功能。强调一下,这是一个一个的功能单元,这些功能单元运行在虚拟化出来的虚拟机或容器里。最右边这一块就是整个系统的管理。

我们看这个图可能会感觉很熟悉,这个就是 OpenStack 的架构图。云管理平台玩的就是虚拟化,管理的是计算、存储和网络。对比前后这两张图我们发现,其实 NFV 的架构就是云计算的架构,只不过它所强调的仅仅是运行在云计算上的服务,而不像我们普通的比如 Hadoop 服务为了大数据,或者 WEB 和数据库等等。NFV 的服务都是为网络功能服务的,包括 DHCP 地址分配、NAT 地址转换、防火墙、无线接入、宽带接入、3G 核心网等等,都可以用虚拟的容器实现。所以其实网络功能和我们大家平时所熟悉的这些标准的 APP 或者是这些服务都是一样的,都可以一样的进行虚拟化和云化。

所以从这个层面上讲,一个广泛意义上的网络虚拟化会看到几个热门技术:SDN、NFV、Overlay,都是从不同的层面支撑虚拟化——SDN 定义了一种控制和管理的网络架构,Overlay 提供了一种解决数据平面转发和多租户隔离的技术手段,NFV 指出了我的网络功能如何借助这个架构实现虚拟化。这里就有一个循环:网络虚拟化包含了网络功能虚拟化,网络功能虚拟化又依赖于云计算的架构,一旦这个循环形成了,这些新技术在彼此之间不停的碰撞,相互结合也相互竞争,也构成了我们今天这样一个网络世界变革的大时代。

SDN 的部署案例

下面给大家介绍一下我们在 SDN 领域的实际的案例。

在讲实际的案例之前,想先跟大家分享一下我们公司对未来网络发展的一个理解。我们知道现在 SDN、NFV 很热,但是传统的网络并不会消失,在很长的时间内这些技术会并存。我们强调一个什么概念呢?就是一个虚拟的融合架构。

这个图是一个三横三纵的结构,我们从三纵开始。最右边就是云,解决的是计算存储的问题;最左边是端。有人最近提出来一个概念,说现在的网络是云计算和移动互联网的时代,云计算就是云,而移动互联网就是端。对端的管理,不管是什么样的网络,我们最终检验网络质量的标准是什么?最终用户的体验。如果你的网络解决不好这个问题,你这个网络就很难说是成功的网络——所以中间就是云和网的结合体,就是网络的主体。

我们再横向看三层。底下一层就是基础的设备,包括终端设备、网络设备还有计算存储,包括 NFV 虚拟出来的网络单元也可以当成逻辑的网络设备放这里。第二层就是所谓的融合控制层:我们认为在网络上应该有这样一个层次,既可以管网,也可以管云,也可以管端,这些都需要进行一定的集中控制。最上边的一层就是所谓的资源管理层,在这个里面第一要对所有的资源进行池化,比如 OpenStack 这样的管理平台;在这个之上要提供一个业务编排的系统,把这些逻辑的分散的资源单元串在一起,才能够为用户提供服务;再之上就是针对不同的网络服务提供一些管理组件。

这个 VCF 架构强调每个层次都要对上一层次提供开放的接口,最终对最上面用户的应用提供可编程、可控制的能力。这实际上强调的是什么?就是对端和云中的应用提供了一种自动化的编排和管理的能力。

这么说可能比较抽象,我举个具体的例子,比如说你的手机拿起来了要上网,当你的手机上网的时候,传统的网络就是 AC,无线控制器做 Wifi 认证;但是在我们这样一个融合架构里面,对这个手机进行认证的设备就不再是 AC 控制器了,而是 VCF 的网络控制器。在这个网络控制器对这个手机进行认证、允许上网以后,就知道这个手机是谁的,应该有什么权限,可以获取什么资源,这个时候就要执行一个我们称之为 user profile 的服务模板,执行之后会控制整个网络里面所有的设备,根据这个用户上网这一个动作,它就可以对这个用户所需要的所有的资源进行调整。这在传统的网络里是很难实现的。

另一个例子,在云数据中心一款 APP 上线,一般就是 VM 或者是一个容器的创建。一般情况下在云管理平台里面,容器创建的时候就要分配和指定资源,包括什么资源呢?CPU、内存、硬盘、网络出口带宽、还有这个服务前面要不要加防火墙、是不是大的集群中的成员前面要放负载均衡、要不要给它备份管理等等等等,这些功能实际上存在一个叫做 app profile 的文件里。这样在整个云里面,不论是存储还是计算资源还是网络资源都被这个 APP 上线调动了,他会根据你预先编排好的需求,动态对所有的资源进行调整。我们以前做应用的人对网络施加一些控制是很难的,只能对网络管理员提出要求,让他实现;但是现在,我们就具备一种动态管理的能力,这就是这样一个概念带来的一个变革。

所以说,我们认为 VCF 这样的概念实际上就是我们对 SDN 这个概念的发展和补充,是我们认为未来网络发展的趋势。

像这样一个整网融合的方案会比较大,我们真正在商用的时候往往只会使用一部分。比如说我们在给一个数据中心做方案的时候,可能重点关注于你的云和网;如果给一个城域网做方案,可能就是关注网;如果是给园区做网,就是关注端和网的管理。

下面我就给大家讲两个实际的案例。

第一个,浙江政务云。这个项目包含两个部分,一个是公有云,一个是政务云,公有云由阿里云承担,政务云由我们公司承建。我们看一下结构,在这个图里面我们会发现,有计算、存储,中间是一个由核心交换机和边缘交换机构成的网络把这些全部连接起来,同时还有网络的管理控制器和云的管理控制器,之上就是 iMC——一个更高层的资源编排和管理软件。上面的 OpenStack 没有直接管理交换机,而是通过往 OpenStack 里面注入插件,把控制功能转给了控制器,包括云控制器和网络控制器,然后再去管理物理的设备。这样有什么好处呢?保留了开源云管理平台 OpenStack 的开放性,第三方应用可以用同一个 API 来做控制;而同时因为使用了专用的控制器,效率会有进一步的提升。

这个专用控制器就是 SDN 和 Overlay 技术的实现,可以对外控制三种网络角色:VxLAN VTEP 控制虚拟化的 vSwitch,VxLAN GW 控制数据中心内的边缘交换机,VxLAN IP GW 控制对外界连接的网关——核心交换机。

Overlay 这个技术有一个特点,就是它初始化的时候,所有节点上的流表是空的。在什么时候才形成转发控制的能力呢?是随着业务的部署形成的。比如说当有一个 VM 想跟另外一个通讯的时候,第一个报文就被 vSwitch 捕获,然后分析一下,就知道应该从哪个虚机到哪个虚机,在源和目的的之间建立一个隧道下发流表,把这个初始的报文返给 vSwitch,这样就过去了。

这样处理有甚么好处呢?最大的好处是节约资源。我们知道像这样的数据中心可能有几千或者几万个节点,就是几十万个虚拟机,如果让任意两个 VM 之间都可以通的话,大家算一下要多少的流表——这个资源是有限的。实际上不会所有的 VM 之间都有通讯的要求,根据业务部署可能只有很少数量的 VM 之间才会通信的要求,所以这样的方案很节省流表的资源。这个方案如果说有缺点的话是什么呢,因为它的这个首包上送给了控制器,越到后期在控制器这块的压力就会越来越大。这个问题怎么解决我们后面讲。

再看腾讯的方案。腾讯数据中心的情况是,他们自己已经有云管理平台,有自己的 vSwitch,只是需要我们的物理交换机和控制器。这个方案展开一看大家会发现跟我刚刚讲的这个浙江政务云的方案其实是很类似的,也是 SDN 加 Overlay 的方案。只不过在这个方案里面,第一,不是所有的设备都是我们的,所以需要我们在我们的控制器上面有一些东西跟腾讯的云管理平台进行对接;第二,就是规模的问题,腾讯让我们建立这样的数据中心到什么规模呢?物理的服务器一万五千台。这给我们整个管理带来了很多的挑战,我们怎么才能部署控制器管理一万五千台的服务器,几十万的虚机?下面讲一下我们这个集群管理的部署方案以及具体的优化。

SDN Controller 集群部署方案以及优化

讲解控制器部署之前,我们花一点时间进入控制器软件的内部,看看这个 Controller 的软件架构。可以看到我们也用一些开源的工具,然后之后呢还有一些各种层面的模块。我们去看一下具体的逻辑图,可能看的更清楚一点。

我们把控制器分成不同的层次:最下面我们称之为南向接口层,有 OpenFlow、NetConf/XMPP、BGP 等等不同的数据协议,这是因为控制器往下要管理不同的节点,这些不同的角色(vSwitch 或物理交换机)使用的协议不一样。

第二层是 SAL 适配层,这一层屏蔽了不同的厂商 / 不同的设备对南向提供接口的差别,让上层的模块运行起来可以仅仅针对他关心的业务处理,而不用关心不同厂商的 API 有什么差别。

再往上就是基础的网络功能模块,这一块没什么说的。再往上就是内置应用。在 SDN 里面有两种应用,一种是内置的应用——就运行在 SDN 的控制器上,还有一种外置的应用——在上面。我们看到这里有 Overlay 模块:最关键的计算都是由这个 Overlay 模块完成的。

再往上就是北向接口层了,就是可编程的控制器要对外提供一个良好的编程接口。

还有一部分就是管理层,有软件的管理、软件自身的升级、增加模块,还有生命周期管理、集群的管理,还有一些 UI 的界面。

讲完这个层次图以后,回到刚刚的问题上。我们 Overlay 的过程——送给控制器,下发流表把这个包返回给 vSwitch 进行转发,这个是一次首包上送。这个方案所造成的问题就是对控制器的计算能力提出挑战。所以我们在这个方案里面重点优化首包上送的处理能力,对刚刚的结构不停的优化、进行重构。

最后我们做到什么性能呢?标准的 Intel i7 4 核处理器上,可以做到 500k 的处理能力。在这个基于 Java 的架构上,我想再做出质的提升恐怕就很困难了。

那么这一个控制器能管理多大的网络?瓶颈在首包上送的能力,我们可以计算一下:一个服务器有 1 个 vSwitch,跑 20-30 个 VM,每秒大概可以产生 500 以上的新流,就是每秒有 500 次跟一个新的、不同的设备通信。那么用我们刚刚的首包上送一除就知道,500K 的 TPS 性能,一个控制器大概可以管理一千个 Host;当一个数据中心规模在 15k 的时候,单节点控制器肯定搞不定了,就需要控制器集群。

我们把所有的控制器就是称之为一个团队(team),一部分成员是领导者(leader),一部分是成员(member)。Leader 对上提供北向的访问接口,负责对 cluster 进行管理;Member 就负责管理控制交换机,连接交换机的方式就是刚刚讲的南向接口。

单一的节点可能会不安全或者是不可靠,所以就提供了另外一个东西就是 Region。我们把所有的 leader 放在一个 Region 里,作为主集群,其他的作为备份,这样就保持这个集群有一个持续的不间断的对外提供北向接口的能力。下面这些 member 划了一个一个 Region,一个 Region 中有多个 Member,Switch 要同时连接到一个 Region 中的所有 Member 上,并选取一个作为主。这样的好处是什么呢?一个 switch 有多个 member,如果我的主域宕掉了,这个 switch 发现了以后就可以从剩余的里面选择一个新的,备变为主,这样就可以提供一个不间断的服务能力。

我们拿两台服务器做主,然后划分 15 个 Region,一个控制器可以管理一千台的服务器,15 个正好是 15000 台。总的来说就是对控制器进行分层的设计,让 leader 提供向北接口,member 提供向南接口。

简单介绍一下我们实现这个集群采用的技术。Team 管理功能,是在 Zookeeper 之上封装的,这个 Team 实现了成员管理、leader 选举、上报 Team 事件,具体的方式是很标准的 Zookeeper 使用方式,这个就不多说了。

那么还有一个重要的问题,不是说你的成员加入集群就完事儿了,我刚刚讲腾讯的方案的时候,腾讯的云管理平台上有大量的 VM 的信息,这些需要你做一个模块抓取过来,要在你所有的控制器之间共享,所以说就需要有一些数据在所有的控制器间共享,也就是 HA。按照我们做网络的习惯,我们把 HA 分成两种功能,一个是实时备份,一个是批量备份,目标就是希望这个 HA 系统对上述的 APP 是不可见的,具体看一下实现。

第一个就是 BUS,它提供通讯的通道,当你写入一个数据的时候,就在主那里创建一个单元,发现这个节点发生变化,就把这个单元读出来,这个数据就传过去了。

KeyStore,实现了一个非常简单的数据库功能,采用 Key-Value 机制,不支持范围查找,只提供了设置和获取接口,没有通知接口。有的同学会问了,说你们跟 Zookeeper 干上了是吧?那我们做开发的人都知道,当我们熟悉一个工具的时候,就会很自然的重复使用,尽量用熟为止。

实际使用当中的实时备份过程就是这样的,很简单,集群中某个成员业务数据变化时,发送 bus 消息通知其他成员,同时将本成员的运行数据以 key&value 的形式保存在 KeyStore 中。

批量备份就是当新的控制节点加入时,KeyStore 就会自动将其他节点的数据备份到本地,App 需要先从 KeyStore 中恢复数据,当恢复完成后,再开始接收 bus 消息。做 keyStore 数据恢复时,要求 bus 可以从批备开始的时间点开始缓存 bus 消息,等恢复完成后补报这些 bus 消息,这样就可以保证了最终数据的同步。

今天跟大家分享的话题就到这里,谢谢大家!

嘉宾简介

王飓,华三研发副总裁,从事数据通讯设备软件开发长达 14 年,作为资深的网络协议专家和软件系统架构师,熟悉多个层面的数据通讯协议,擅长做通信协议设计以及实现,对嵌入式系统和复杂软件系统设计,以及对实时系统的性能优化有着十分丰富的经验。此外,对网络安全有着比较深入的研究,对各种网络攻击和防护有着丰富的经验。近年来开始关注并投入 SDN 相关领域的研究和开发。对 OpenStack、OpenDaylight、OpenVswitch、NFV 等都有一定的研究,对云计算时代的网络通信有着深刻的理解。

在这个云计算的时代,很多传统的通信技术都会经历一个痛苦的解构重建的过程,如何把已有的网络经验融合到现在的 SDN 世界当中,充分利用历史的积累,是他目前最为关心的问题。


感谢杨赛对本文内容的整理。

2014 年 10 月 20 日 20:208221

评论

发布
暂无评论
发现更多内容

Kindle的又一用处

孙苏勇

读书

架构之书:审美与《重构》

lidaobing

架构

架构师训练营第 1 期 - 第十二周作业

Todd-Lee

极客大学架构师训练营

Week 12

黄立

2021数字化投资规划,你做好了吗?

ThoughtWorks洞见

架构 业务架构

与技术总监另起炉灶的CTO | 法庭上的CTO(8)

赵新龙

CTO 法庭上的CTO

架构师训练营第 1 期 - 第十二周总结

Todd-Lee

极客大学架构师训练营

第三周设计作业

cc

生产环境全链路压测建设历程之六 淘宝网2012年双十一的痛

数列科技杨德华

找到相同链表的点

落朽

记录一次腾讯c/c++ linux后台开发岗面试经历(面试题含答案)

linux大本营

c++ Linux 腾讯 后台开发 架构师

2020年我凭借这份pdf成功拿到了阿里,腾讯,京东等六家大厂offer

Crud的程序员

Java 阿里巴巴 程序员 java面试 offer

Github上标星82.1K+star面试笔记,可以帮你搞定95%以上的Java面试,已经帮助多人拿下offer

云流

学习 程序员 面试 计算机

使用Tomcat Native提升Tomcat IO效率

程序那些事

tomcat nio 异步IO 程序那些事 bio

学习笔记丨Linux中数据提取相关命令

Liuchengz.

Linux ubuntu #Ubuntu

作业-第8周

arcyao

架构师养成第三课

万有引力

基于 getty 的分布式事务框架seata-golang 通信模型详解

apache/dubbo-go

dubbo dubbo-go dubbogo seata

第三周学习心得

cc

TRONex智能合约APP系统软件开发

开發I852946OIIO

系统开发

网易游戏部门Java架构师必看的“完美版”Netty源码笔记

Java架构追梦

Java 学习 源码 架构 Netty

复盘不止复盘,更是个人认知升级加速器?

Alan

复盘 思维 技术人应知的创新思维模型 28天写作

天下武功,唯“拆”不破之MECE原则一| 技术人应知的创新思维模型 (5)

Alan

职场成长 技术人应知的创新思维模型 组合创新 结构化思维 28天写作

iOS面试高薪,进阶 你会这些呢嘛?

ios swift 面试

shell脚本的使用该熟练起来了,你说呢?(篇三)

良知犹存

Shell

《人工智能:一种现代的方法(第3版)》PDF

计算机与AI

人工智能 学习

实践出真知!华为Android面试真题解析,附超全教程文档

欢喜学安卓

android 程序员 面试 移动开发

腾讯T3大牛手把手教你!从外包月薪5K到阿里月薪15K,分享一点面试小经验

欢喜学安卓

android 程序员 面试 移动开发

【小菜学网络】物理层概述

fasionchan

网络编程 计算机网络 网络协议 TCP/IP 物理层

Tronex智能合约APP系统开发|Tronex智能合约软件开发

开發I852946OIIO

系统开发

美团十年架构师精心分享:手写分布式消息中间件RocketMQ笔记

小Q

学习 面试 微服务 MQ 中间件

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

万台规模下的SDN控制器集群部署实践-InfoQ