ODL Lithium SR2版本Entity Ownership Service分析及OFplugin规模部署可用预测

家好,我是盛科网络负责sdn研发的张东亚,作为sdn设备的提供商,业余非常关注sdn生态圈的发展,最近抽时间研究了li版本of plugin的代码,记录了一些心得,跟大家分享,由于是业余研究,难免有纰漏错误,希望抛砖引玉,大家多多交流。十分感谢sdnlab给予的机会,希望大家多多支持sdnlab以及odl中文社区。

大家应该注意到10月8号odl发布了lithium sr2版本,我在群内也看到有相关的讨论了,我这次的分享,就主要集中在lithium首次release和sr2这个版本在of实现上的差异部分。sr版本用于协调odl各个子项目的发布,后续还会有sr3和sr4版本的发布,大家可以继续关注。

如果有尝鲜的群友,应该注意到在odl的karaf中,会注意到带有-li后缀的feature,这些feature代表的就是lithium版本针对于h版本的ofplugin的问题所做的新的设计与实现,关于详细的设计,大家可以参考odl wiki上名为lithium design proposal的页面。

由于我们的客户有时会问到有没有稳定的支持ha的控制器方案,所以这次我注意到lithium design中引入了一个名为EntityOwnershipService的服务,这个服务是针对于odl的bug 4105所做的修改,在odl controller的DistributedEntityOwnershipService对象中有详细的实现过程。

bug4105被bug4104所依赖,我们查看bug可以看到,目前的h版本中,ofplugin在多控制器集群中,并不支持集群实例的主备,也就意味着多个控制器上的ofplugin都可能去编程底下的of设备,出现流表混乱等问题。而entityservice这个服务,就是为了解决这个问题而来,他的功能依赖于odl mdsal底层的shard所用的raft一致性协议。

具体的做法就是,针对于一个由openflow:dpid所标示的of设备,每个集群实例上的ofplugin都注册自己为candidate,利用raft的选主机制,选出一个ofplugin做为主,ofplugin得到升主通知后,就作为该设备的rpc owner,并通过openflow的role request消息设置自己为master,其他raft follower实例则设置自己为slave,这样就在一定程度上解决了不支持主备的问题。

entityowner这个服务是一个通用的服务,其他app也可以自己注册一个全集群唯一的entity,从而实现多集群实例下的选主操作,并在主故障时,处理新主实例的升主操做,提高app的可用性。具体的使用办法是在自己app的yang模型里,增加对entityownerservice的引用。

根据我这边针对sr2该特性的验证结果,三个控制器实例下做集群已经可以正确的设置主实例为master,其他为slave,从bug4104自己邮件列表上ericcson的测试反馈,新的design在稳定性及时序下还有一些问题,大家可以继续关注bugzilla和odl相关的邮件列表。

另外,在验证过程中,我遇到了bug4473这个lithum design中存在的不兼容ovs 2.4.0的table feature消息中的nxm扩展的问题,会导致of设备不能被加进到inventory数据库中,这个问题暂时还未被fix,大家在使用中,可以注意降级,避免浪费时间定位。

综合近期的关注,我个人认为odl ofplugin离商用还有一段距离,邮件列表上ericsson在提交一些集群自动化测试用例,相信后续odl集群功能会逐渐的优化改进,如果有急切需求的话,个人还是推荐ryu加外置成熟分布式数据库的方案。

好了,本次的分享就暂时结束了,平时潜水居多,后续业余时间会多参与大家代码的交流,毕竟我喜欢开源的一个原因就是show me the code,再次谢谢sdnlab,也感谢大家的聆听。分享内容结合代码部分请点击:http://www.sdnlab.com/community/article/103 --------------------------------------------------------------- Q&A

Q1::南京-小爱 请问你是如何利用邮件列表的 Bugs.opendaylight.org,点击左上角的browse可以按项目查看问题状态,不需要注册,如果提bug需要注册,odl应该很欢迎大家提bug

Q2:南京-小爱 那么盛科有在实际环境中部署opendaylight或者说有什么odl的应用场景吗 盛科的客户据我的观察,有些采用自研控制器支持主备,目前已经商用。也有基于分布式数据库加ryu的商用案例。

Q3:朱坚 群里有人搭建了ODL集群的吗? 估计由于ODL这块的功能和文档不给力,应该很少人搞过。不像ONOS的集群功能在一开始就作为亮点突出,也有部署实例可供参考。

Q4:IT难人 怎么看plugin代码?从哪些方面 关于plugin的代码,建议从plugin自带的app如lldp speaker和frm这些入手,特别是frm,能够理解如何从mdsal到of sal并最终下发给设备的过程,单独的l2switch或者lacp项目也是不错的参考。

Q5:IT难人 那plugin和openflowjava先看哪个?还是两个一起看?您的意见?因为我比较关注快速上手,才能更深入理解odl以及SDN。 plugin的北向接口是用plugin的yang定义渲染出的rest接口,openflowjava项目是具体的协议实现,建议理解openflowplugin,因为它是作为一个app存在的,看代码的花话我建议先找个低版本的比较好,就像读linux源码都是从很低的版本讲起。

Q6:華科-笑傲秋航 我想知道怎样使用锂版,使得ovs网桥能够设置它为控制器 安装ofplugin,然后用ovs-vsctl设置控制器就可以了

Q7:某某@地球 腾讯有几个sdn?我听说的是他们用的某vendor的控制器。 腾讯据我了解到的小道信息,h3c做的控制器解决虚拟化的问题,这个之前网上万总的介绍。另外基于bgp ls做te的应该是华为北研所做的方案。不过odl开发可能没有ryu迅速,最近opstk liberty版本已经支持用ryu做为ovs agent的native流表下发接口了,ryu的稳定性会进一步加强,二级控制器可能更适合。

原文发布于微信公众号 - SDNLAB(SDNLAB)

原文发表时间:2015-11-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Vamei实验室

Python标准库的学习准备

Python标准库是Python强大的动力所在,我们已经在前文中有所介绍。由于标准库所涉及的应用很广,所以需要学习一定的背景知识。 硬件原理 这一部份需要了解内...

1975
来自专栏Golang语言社区

前后端分离开发模式下后端质量的保证 —— 单元测试

概述   在今天, 前后端分离已经是首选的一个开发模式。这对于后端团队来说其实是一个好消息,减轻任务并且更专注。在测试方面,就更加依赖于单元测试对于API以及后...

4529
来自专栏CSDN技术头条

高性能智能日志实践

本文作者是 Archanaa Panda ,从 2000 以来一直在软件开发(构架、设计和编程)团队担任 Java / JavaEE 构架师,目前立志于做一个与...

25110
来自专栏后端技术探索

58同城高性能移动Push推送平台架构演进之路

关于作者:孙玄,58赶集集团系统架构师,技术负责人,技术委员会架构组主任,也是58同城即时通讯、C2C技术负责人,负责58核心系统的架构以及优化工作。分布式系统...

2212
来自专栏TechBox

模块化与解耦简述4. 解耦与通信5. 源码推荐

2363
来自专栏华章科技

从 Python 转到 Go 语言的五大理由

“ Python 是非常强大的,特别是 Python3 有了异步功能,但是 GO 将完全取代它在大企业中的存在…”如果你真正理解了引号中的话,你可能会去尝试 G...

1443
来自专栏人人都是极客

手把手教你如何向 Linux 内核提交代码

说到开源大家都会想到黑客和极客,开源的概念最早也是在极客们推出和推崇的。开源的提倡旨在开放源代码使之更方便自由的使用和再创作。随着这一思想的发展,衍生出诸多的开...

1852
来自专栏用户2442861的专栏

分布式统一框架的设计与实现(数据库)

我们设计并开发了内容中心统一的分布式开发框架。我们把它取名为albian, albian是基于java的(故以下简称albianj)。他主要是面向海量数据处理...

2761
来自专栏Golang语言社区

7大决定决定服务器性能的指标,你测试过几个?

一,服务器PING值 PING测试在一定程度上可以代表服务器的宽带速度。 使用站长工具提供的Ping服务(http://ping.chinaz.com),来测试...

4845
来自专栏Brian

Effective Debugging-高效调试

概述 最近在看《Effective Debugging》,作者(Diomidis Spinellis)将30多年的系统开发和调试的经验融入到书中,从策略、方法以...

3598

扫码关注云+社区

领取腾讯云代金券