Neutron新进展|DragonFlow在Mitaka版本中的Roadmap

OpenStack网络在Mitaka版本中将有哪些新变化?1月11日到12日,DragonFlow的PTL——Eran Gampel,Kuryr的PTL——Gal Sagie,和他们的老大从以色列来到杭州,参加DragonFlow Meetup。UnitedStack有云的网络组同事苌智和康敬亭参与了这次讨论,并整理出Dragonflow在Mitaka版本中要完成的工作以为未来的Roadmap。

背景介绍
Dragonflow是OpenStack网络组件Neutron的子项目,由华为以色列技术团队提出,在开发者中备受瞩目。项目提出的时间是在2014年,2015年开始提交代码。
Dragonflow可以理解为Neutron的3层的控制器扩展组件。它实现了Neutron的L3 Service API,还为Neutron提供了分布式虚拟路由器功能。从设计理念上讲,Dragonflow使用的是可插入式无状态化轻量级SDN控制器,实现了租户子网间(东-西)流量的完全分布化,避开了网络节点,减小了故障域,避免单点故障。
按照Dragonflow的设计理念,它可以提升OpenStack Neutron L3的可扩展性、弹性、性能和可靠性。它可以支持数千个计算节点,为实现动态增长而保持控制器的无状态化,没有中央瓶颈,通过避免使用iptables和命名空间减少计算节点开销。
本次DragonFlow Meetup,主要讨论了在未来的一个周期内(Mitaka)要完成的工作以及DragonFlow的Roadmap。下面按照优先级的高低依次介绍关于这次讨论的十个方面。

  • 安全组
  • 性能测试
  • 保持数据库的一致性
  • 分布式DNAT
  • 消息队列的发布/订阅
  • 分布式数据库
  • 支持Vlan网络
  • 实现Zookeeper的DB Plugin
  • 实现ML2 Mechanism driver
  • 多层绑定与TOR
  • Dragonflow VS OVN

安全组
在本次Meetup中,关于安全组在DragonFlow的实现,讨论的最为激烈,实现的优先级也最高。在讨论安全组之前,需要指出的是,安全组是有状态的,也就是说,不管outbound traffic( egress )的规则如何限制,只要inbound traffic( ingress )的规则允许了某些流量进入,那么相应的回复流也允许了。对于安全组的实现,在原生的Neutron中默认是通过IPtables来实现的。示意图如下:

如上图所示,虚拟机的TAP设备被桥接在了Linux Bridge上,在这个桥上通过IPtables实现了安全组。这样的实现本身没有什么问题,但是当在一个安全组里创建/更新虚拟网卡的时候,就会向该安全组里所有成员广播该消息,使得消息队列中充斥大量的广播消息,从而拖垮消息队列。

在DragonFlow中,虚拟机的TAP设备直接桥接在了OVS Bridge上,从而通过使用OVS流表实现安全组功能。

核心的思想是,一条流(Flow)对应一个安全组规则。每个虚拟机网卡(Port)绑定一个安全组,匹配条件只限定源安全组ID,目的安全组ID,同时可以增加安全策略(例如限制端口80,8080等)。

具体的技术要点:

1 利用 ovs conntrack实现基于状态的规则。

2 当port有更新时,避免流表的变化。

3 尽量最小化流表的条目数。

4 安全组更新时,影响范围要尽可能小。

性能测试
主要性能测试包括数据平面和控制平面: 数据平面主要测试主要是对比DVR的性能优势,控制平面主要测试分为以下3个方面:

1 测试pub/sub性能,主要测试local controller对neutron资源变化的响应能力。

2 在存在大量port的情况下,主要测试controller的packetout/packetin的性能,这种测试场景主要是reactive模式的性能测试,一般会在arp responser,icmp,router路由首包上送等应用场景。

3 neutron DB和dragonflow DB的一致性压力测试。目前有一个bugfix还在讨论。

保持数据库的一致性
由于DragonFLow采用了分布式数据库,产生了Neutron数据库和DragonFlow本身数据库之间的数据一致性问题。

目前尚未有统一的解决方案。对于数据一致性问题,我认为在OVN中这个问题会显得更为突出。在OVN中,有三类数据库:

NorthBound DB,SouthBound DB和Neutron DB,这样的架构当产生单点故障时,无疑是非常麻烦的。

分布式DNAT
目前,DragonFlow在网络节点上使用Neutron的L3 agent作为集中式的SNAT和DNAT,目前DragonFlow尚不支持分布式SNAT,依然需要L3 agent提供SNAT功能。我们知道,在现在的DragonFlow中,有两个OVS Bridge,br-int作为计算节点的内部网桥,br-ex作为该节点的外部网桥。在外部网桥上会实现分布式DNAT。

分布式DNAT和分布式SNAT有什么不同?对于公网IP绑定在虚拟机上时,也就是1:1的NAT,DNAT和SNAT只起到了地址转换的作用。对于公网IP绑定在路由器上时,也就是1:N的NAT,必然会用端口表示连接,如何保证连接不被复用?在L3 agent中,使用Linux Namespace作为虚拟路由器,在路由器内通过conntrack记录连接状态。

因此分布式DNAT和分布式SNAT才会在实现方式上有不通。目前DragonFlow对于分布式DNAT的优先级比较低,而分布式SNAT目前没有时间规划。

消息队列的发布/订阅
在DragonFlow中,使用ZeroMQ作为默认的消息队列。与其说ZeroMQ是消息队列,倒不如说ZeroMQ是一套基于Socket API之上实现的网络通讯库。

ZeroMQ内置四种消息模型:Request-reply (请求回复模型),Pub-sub(发布/订阅模型),Pipeline(管道模型), Exclusive pair(一对一结对模型)。

DragonFlow使用发布/订阅(pub/sub)模型,目前该feature已经全部实现了,正在review中。

分布式数据库
DragonFlow使用了分布式数据库,示意图如下: 

如图所示,会有一个数据库集群,这个集群可以采用OVSDB,ETCD,Cassandra,RAMCloud等实现。

每个计算节点上会运行相应的DB driver,通过ZeroMQ进行消息的订阅和发布。

支持Vlan网络
目前DragonFlow尚不支持vlan网络,也没有相应的spec,在后续的版本里会支持。

实现Zookeeper的DB Plugin
Zookeeper作为一个高一致性的分布式NoSQL数据库,能够实现集群管理,也可以作为DB使用,目前这个feature正在review中。

实现ML2 Mechanism driver
Neutron Server由Core Plugin和Service Plugins组成。在当前的DragonFlow中,使用DFPlugin作为Core Plugin嵌入到Neutron Server中。

在此次的Meetup中,讨论将DFPlugin作为Mechanism Driver嵌入Neutron Server。目前只有这个计划,还没有开始。

多层绑定与TOR
目前的Neutron代码中已经支持了多层绑定,在以后的版本中,DragonFlow也将考虑支持多层绑定。多层绑定的好处是,在软件架构上适应各种网络方案,软件方案以及硬件offload方案等,在硬件offload方案中,需要TOR Switch提供ovsdb,OpenFlow等,提供高性能的SDN组网方案。

Neutron目前不具备这种功能,dragonflow的local controller可以胜任,同时在对比HW的agile(控制器)方案,dragonflow local controller可以支持各种APP,例如DHCP, DNS也可实现VPN,GW,FW等高级服务,总之就是一个控制器的解决方案。

Dragonflow VS OVN
最后讨论的dragonflow与OVN谁能走的更远,在dragonflow项目开始时,OVN还不存在,后面OVS团队启动了OVN项目,希望接管整个的网络数据平面和控制平面。

他们观点如下:

1 在dragonflow和OVN这种分布式架构下,分布式数据库,以及多级数据库一致性是很头疼的问题,dragonflow需要维护neutron DB和每个local DB的一致性,而OVN需要维护Neutron DB,North DB,South DB的一致性。两个数据库一致性已经很难处理,维持三个数据库一致性的难度可想而知。

2 dragonflow的local controller 可以提供各种APP plugin,提供更灵活,高级的服务,而OVN显然不行。

3 dragonflow和ovn相比而言,一个明显的优势就是dragonflow支持插件式的DB。

4 猜测OVN或许就是vmware NSX的一个虚拟化的解决方案。

5 关于DF对OVN的态度,在午餐尾声,Gal说了一句话:To Destroy OVN

关于作者:
苌智,SDN 工程师,2015年1月加入 UnitedStack有云,专注于虚拟网络和 SDN 方向,OpenStack Neutron 社区活跃贡献者。

https://www.ustack.com/blog/neutron-dragonflow/

时间: 2024-10-03 21:41:12

Neutron新进展|DragonFlow在Mitaka版本中的Roadmap的相关文章

OpenStack Mitaka 版本中的 domain 和 admin

OpenStack 的 Keystone V3 中引入了 Domain 的概念.引入这个概念后,关于 admin 这个role 的定义就变得复杂了起来. 1. Domain,project,user,role,token 的概念和关系 简单来说, Domain - 表示 project 和 user 的集合,在公有云或者私有云中常常表示一个客户 Group - 一个domain 中的部分用户的集合 Project - IT基础设施资源的集合,比如虚机,卷,镜像等 Role - 角色,表示一个 u

[译] OpenStack Kilo 版本中 Neutron 的新变化

OpenStack Kilo 版本,OpenStack 这个开源项目的第11个版本,已经于2015年4月正式发布了.现在是个合适的时间来看看这个版本中Neutron到底发生了哪些变化了,以及引入了哪些新的关键功能. 1. 扩展 Neutron 开发社区 (Scaling the Neutron development community) 为了更好地扩展 Neutron 开发社区的规模,我们在Kilo开发周期中主要做了两项工作:解耦核心插件以及分离高级服务.这些变化不会直接影响 OpenStac

[译] OpenStack Liberty 版本中的53个新变化

一个新的秋季,一个新的OpenStack 版本.OpenStack 的第12个版本,Liberty,在10月15日如期交付,而且目前发行版本已经备好了.那么我们期望能从过去六个月时间的开发中获得些什么呢?  正如过去几年一样,每个版本都有大量的变化和引入新的功能,但是现在,OpenStack 已经达到一个新的位置,那就是大部分的必要功能都已经齐备了,因此,现在更多的是增量式的变化-只有一些偶然性爆发的领域是例外,比如容器.  当然,这不是说容器就是过去六个月内的所有值得期待的东西.除了容器,还有

CENTOS7 安装openstack mitaka版本(最新整理完整版附详细截图和操作步骤,添加了cinder和vxlan)

CENTOS7 安装openstack mitaka版本(最新整理完整版附详细截图和操作步骤,添加了cinder和vxlan,附上个节点的配置文件) 实验环境准备: 为了更好的实现分布式mitaka版本的效果.我才有的是VMware的workstations来安装三台虚拟机,分别来模拟openstack的controller节点 compute节点和cinder节点.(我的宿主机配置为 500g 硬盘 16g内存,i5cpu.强烈建议由条件的朋友将内存配置大一点,因为我之前分配的2g太卡.) 注

低版本中使用高版本出现的类怎么办?

原理概述 简单来说就是三个字——黑魔法. 利用这种黑魔法的例子已经越来越多,我所知道的最早使用这种方法的是一个老外在三年为了解决NSUUID而使用的. 我们国内团队开发的FDStackView是一个非常好的开源库,已经有1500+颗星星了,希望大家多多支持我们国内的团队,在FDStackView库中也用到了相同的技术,网上有人发出了分析实现原理的文章,但分析的很浅,而且根本没有说在点子上,使得这种黑魔法的魅力并没有被大家欣赏到,我这里做了一些功课,把这个原理详细的阐述一下,以及这里的关键点在哪里

Oracle 12.1新特性----使用RMAN从备份中实现recover table

在Oracle12c版本之前,使用RMAN能恢复的级别为数据库级别和表空间级别,如果只有一张表需要恢复,而在数据库级别或表空间级别做恢复,影响范围就太大了.因此12.2版本中提供了一个新特性使用RMAN在表级别做恢复,并且恢复过程中不影响数据库的正常使用.这一功能不仅可以恢复表,还可以恢复表分区. 下面在12.2版本上做表级别恢复的实验 [email protected]>select * from v$version; BANNER      CON_ID ------------------

openstack 之fuel 9 安装 Openstack Mitaka 版本

2015年上半年曾经在原单位安装过openstack juno版本,使用的是Mirantis公司的fuel自动化部署工具,很好用.已经很久没有关注openstack了,版本到现在为止已经到了Newton了,上一个版本是Mitaka,今天我要做的实验就是使用fuel 9 安装Mitaka版本. 我的笔记本的配置是intel i5,4核,8G,win10 64位家庭版. 首先到Mirantis官网下载fuel的安装镜像ISO: https://www.mirantis.com/software/mi

Andriod ADT v22.6.2版本中在Mainactivity.java中使用fragment_main.xml中TextView控件对象的问题

众所周知,我们既可以在 activity_main.xml文件中控制activity中的view,也可以使用java代码的set..()方法控制它.在学习过程中,发现在ADT新版本中,和以前版本有区别: 新建Andriod工程后,MainActivity 不再继承Activity,而继承的是ActionBarActivity:在layout文件夹下会自动生成两个.xml文件,activity_main.xml文件和fragement_main.xml文件,和以前的版本只有一个activity_m

MySQL5.5.38和MySQL5.7版本中忘记root密码,解决办法

1.在centos6.5中安装mysql5.5.38版本,忘记密码如何解决? (1).先关闭mysqld服务 service  mysqld  stop (2).使用mysqld_safe安全模式启动mysql,使用两个参数: --skip-grant-tables:跳过授权表 --skip-networking: 跳过网络,防止其他用户对数据库进行读写操作,待密码恢复后可正常开启 执行命令: mysqld_safe  --skip-grant-tables  --skip-networking