OpenStack中SDN泛谈3 (OVN&Dragonflow)

这一篇讲一下基于OpenvSwitch的SDN

OVN

OVN(Open Virtual Network)是OVS社区在2015年1月发起的OVS子项目,其代码与OVS在一个库里面。OVN提供了一个可在大规模环境下部署的、产品级别的轻量级SDN。

在之前(2014年)的一个调查中,OpenvSwitch已经成为了OpenStack中最受欢迎的virtual switch,OVS为hypervisor提供了虚拟的网络设备,共同参与构建虚拟环境。鉴于OVS的广泛接受程度,并为了让OVS能胜任更多的场景,OVS社区提出提供一个轻量级的控制平面,借助这个控制平面,可以在虚拟网络设备之上实现OVS对虚拟网络的支持。

基于这个出发点,OVN在创立之初只关注2-3层的虚拟网络,这是区别于其他全功能的SDN控制器或者平台。OVN可以看成是OVS的补充,因此OVN可以运行在任何OVS兼容的环境下。虽然两者在一个项目下,OVN与OVS的连接采用的是OVS的通用接口,因此ovs-vswitchd和ovsdb-server不会因为OVN而受到影响(说Midonet呢)。另一方面,就算不使用OVN,对OVS本身也没有什么影响。

随着OVS 2.6的发布,OVN的第一个版本也随着发布(包含在OVS中),OVN从创立之初就考虑了与OpenStack的集成。OVN通过networking-ovn项目与OpenStack集成。Networking-ovn项目也是Neutron前PTL Kyle Mestery发起的项目。他后来跳槽到IBM,我曾经有幸在他的lead下参与过OVN的开发工作。

下面看看OVN的架构

在OVS的基础上,OVN新增了两个进程:ovn-northd和ovn-controller,两个数据库:Northbound DB和Southbound DB。下面来分别看看:

Northbound DB

存储virtual networking data model,例如 Switch,Router,Port等。Northbound DB是由CMS(OpenStack)写入,也就是说与之前说过的SDN不太一样,OVN北向不提供RESTful接口,而是直接由CMS写入数据库内容。举个例子,在OpenStack Neutron的场景下,对应的在Neutron中创建一个Network,需要通过networking-ovn在Northbound DB中创建一个LogicalSwitch。

Ovn-northd

监听Northbound DB的变化,将Northbound DB的内容翻译成LogicalFlow,存储在Southbound DB。Ovn-northd是一个集中的进程,在OVN环境下一般运行在独立的Database node上,在下面会再提到Database node。

Southbound DB

存储LogicalFlow,Chassis和其他的一些信息。Southbound DB存储ovn-controller的数据。传统的集中式SDN控制器会根据已有的配置和数据计算OpenFlow规则,并下发到各个节点。而OVN将这个过程分解成了两部分:

先通过ovn-northd将配置和数据计算成LogicalFlow。一个LogicalSwitch下的LogicalFlow是一样的。

将LogicalFlow分发到各个ovn-controller,再由ovn-controller将计算出相应的OpenFlow规则下发。这样做的好处是一些全局的运算只需要做一次。

Ovn-controller

分布在各个计算节点(OVN中叫做chassis)的SDN controller。Ovn-controller向上读取Southbound DB的数据,应用在本地;并且读取本地的VIF和Chassis信息,向上更新。

OVN部署框架

OVN对于网络功能的实现,秉承的是分布式思想。因此网络功能都分布在计算节点,并且没有一个专门的网络节点。但是OVN需要独立的Database node。这是因为OVN目前采用ovsdb-server作为其DB,一方面,这对于OVN的部署很方便,因为OVN本身就基于OVS,采用ovsdb-server可以避免新增依赖。但是另一方面,ovsdb-server之前的主要应用场景是给OVS存储hypervisor本地的虚拟网络设备信息,而OVN是一个集群内运行的软件,ovsdb-server明显不能胜任这种大规模的数据读写。同时,前面说过ovn-northd是一个集中式进程,因此用一个独立的Database node来运行ovn-northd并存储Northbound DB和Southbound DB,可以一定程度的缓解瓶颈问题。

OVN与OpenStack集成之后的运行框架如下图所示 :

总结

OVN是一个厂商中立的开源项目,背后并没有一个大的厂商在操纵,项目的发起是VMware的工程师,项目的推进有Redhat和IBM等其他公司的参与。相比ODL,ONOS其架构也较为简单。OVN在创立之初就考虑了与OpenStack的集成,因此OVN在OpenStack环境下工作的较好,一些OpenStack Neutron已知的问题,在OVN中都有较好的解决,例如DVR,Security Group的性能问题。对于已有的OpenStack + OVS环境,升级到OVN也是一个不错的选择。据说OVN已经在数百个物理节点上进行了部署测试,并且用ovn-scale-test项目进行了数千个节点的模拟测试。

其现在的主要问题就在于Database node的瓶颈问题,相信后继的改进能够解决这个问题。其他问题在于项目的定位不是一个全功能的SDN,因此只有2-3层的virtual networking。不过这个倒是契合OpenStack Neutron的定位。其他的advanced 功能可以通过OpenStack Neutron的各个子项目弥补。

Dragonflow

如果说其他的SDN项目是在OpenStack之外生长的,再嫁接到OpenStack,那Dragonflow就是土生土长的OpenStack SDN项目,Dragonflow是OpenStack的big tent项目,属于Neutron下面的子项目,是一个基于Python的完全开源的项目。

Dragonflow是华为公司以色列团队发起并推动的项目,最早在OpenStack Kilo版本提出,是为了解决Neutron DVR的问题。有关Neutron DVR的问题,这里就不展开了,以后有机会细说。在OpenStack Liberty版本开始,可能是受OVN项目的影响,Dragonflow转向全面的SDN项目,与OVN不同的是,Dragonflow目的是提供全功能的SDN解决方案。一直到刚刚结束的Ocata版本,Dragonflow社区一直处于活跃的开发和正向的演进中。本人目前也是Dragonflow项目的活跃开发者之一。

Dragonflow的定位是大规模环境下高性能SDN解决方案。来看看它的架构吧:

其组成部分主要有Neutron plugin,Message Driver,DB driver,Dragonflow controller。分别来看看这些组成部分:

Neutron plugin

由于Dragonflow就是OpenStack Neutron下面的的子项目,因此Dragonflow自己完成了与Neutron的集成,Neutron plugin就是Dragonflow中与Neutron的集成部分,这个与其他的SDN一样,实现了ML2 mech driver和各种Service plugins。与OVN类似的是,目前Dragonflow本身不提供独立的RESTful接口,Neutron plugin直接写Dragonflow Database,并触发相应的Message。

Message Driver

Dragonflow组件间通讯的方式,其他的SDN一般是定义好了组件间通讯的方式,要么是RPC,要么是其他协议,而Dragonflow将这部分做了一个抽象,可以支持多种Message机制,目前支持的有ZeroMQ和ReidsMQ。这样用户可以根据不同的使用场景,选用不同的Message机制。Message Driver用来连接Dragonflow Controller和Neutron server,并在之间传递数据。

DB driver

与Message driver类似,其他的SDN一般只支持一种DB,但是Dragonflow将这部分也做了抽象,可以支持多种NoSQL数据库,目前支持的有etcd,RAMCoud,Reids,Cassandra等。这样实现的目的也是为了用户可以根据不同的使用场景,选用不同的DB,以达到最好的性能效果。

Dragonflow Controller

这个是Dragonflow的核心部分。

所有的Dragonflow controller都监听Message driver,当Neutron plugin发布相应的Message,Dragonflow Controller能收到这个消息,并进行相应的计算,更新相应的OpenFlow规则和本地的配置,同时Dragonflow会通过Message driver上报本地的信息,例如端口上线事件。

刚刚结束的Dragonflow Northbound DB重构,将Dragonflow Controller中的数据和消息机制,按照Model来管理,这有点类似于ODL中的MD-SAL。

为了提高网络计算的速度,Dragonflow本地有一个数据的缓存,这样在进行网络计算的时候,直接可以从内存中读取数据进行运算,而不需要再读取远端DB数据。这样能减少网络计算的时间,降低网络延时。

selective topology

为了适应大规模部署,Dragonflow中还有一个selective topology的概念,这个有点类似我在上一篇中介绍的OpenContrail里的的vRouter中的routing instance概念。

只有当前计算节点关注的Topology才会在当前Dragonflow Controller中存在缓存,并且相应消息才会被当前Dragonflow Controller接收。当前计算节点关注的Topology是指当前计算节点上相应租户(tenant)的虚拟机。这样的设计,使得在大规模部署环境下,每个Dragonflow Controller的只需要监听有限的信息,缓存有限的数据,不会因为规模的变大而导致单个Dragonflow Controller负荷变大。

Networking Abstraction Layer

这里是具体网络功能的实现,因为Dragonflow Controller是运行在各个计算节点的,因此,Dragonflow对于网络的运算,也是放到各个计算节点,这是一个真正的分布式可插拔的SDN方案。之前介绍的SDN要么是集中式的SDN,要么是部分运算在集中式节点,部分计算在分布式节点。

在NAL,每个网络功能都是一个独立的application。为了实现相应的网络功能,每个计算节点上都必须运行一套applications。目前实现的网络功能有DHCP,L3 routing,L2,Security Group,等等。

与ovn-controller类似的是,Dragonflow Controller底层连接的也是ovs-vswitchd和ovsdb-server。

部署框架

与OVN类似的是,Dragonflow也有一个专门的Database node,但是与OVN不一样的是Dragonflow的Database Node可以是任何DB backend,例如实际环境下可以部署一个RedisDB的HA集群,这在大规模环境下优势要明显强于OVN的ovsdb-server。另一方面不一样的是,Dragonflow的Database node不关心任何网络运算,所有的网络运算都交由分布在计算节点的Dragonflow controller完成。

总结

Dragonflow是一个真正的分布式SDN解决方案,其底层依赖OVS。因此对于现有的Neutron + OVS架构,迁移到Dragonflow也较为自然,实际上,Dragonflow目前也有相应的努力,提供Neutron + OVS agent迁移到Dragonflow的方案(开发中)。

从社区开发来看,华为是目前的主要贡献者,不过从其目前的开源策略看,Dragonflow并没有想做成一个厂商控制的开源项目。

另一方面,Dragonflow现在还处于一个相对早期的阶段。并且分布式的SDN方案,虽然将网络运算分布到了各个计算节点,能够从理论上去除瓶颈,扩大集群规模,但是也增加了开发的难度和浪费了集群内整体的计算资源,因为同一个网络运算,需要在多个计算节点分别完成,从整体上看是有一定的浪费。

不过鉴于目前计算资源成本较低,这些副作用利大于弊,总体来说,Dragonflow还是一个很有前途的SDN项目。

本文转载自:https://zhuanlan.zhihu.com/p/25996102

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容