Opendaylight学习及开发初级教程 .pdf
《Opendaylight学习及开发初级教程 .pdf》由会员分享,可在线阅读,更多相关《Opendaylight学习及开发初级教程 .pdf(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Opendaylight 学习文档qq 群#北邮-天依名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 46 页 - - - - - - - - - 目录1.概述 . 31.1 Opendaylight 简介 . 31.2 本文档组织结构 . 72.感受 Opendaylight . 72.1 环境搭建 . 72.2 获取代码 . 92.3 安装 mininet . 112.4 controller 使用及功能介绍. 112.5 Openflowplugin功能及使用方法.
2、 142.6 Hydrogen . 163 Maven 和 OSGI基础 . 163.1 Maven . 163.2 OSGI . 204 使用 IDE . 304.1 使用 Eclipse . 314.1.1 导入 controller 项目 . 314.2 使用 Intellij idea . 385Controller代码分析 . 395.1 代码目录 . 405.2 收发包过程简介(packet service ) . 416 Opendaylight重要技术及文档 . 44名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - -
3、 名师精心整理 - - - - - - - 第 2 页,共 46 页 - - - - - - - - - 1. 概述1.1 Opendaylight简介Opendaylight(Opendaylight 官网)是 Linux 基金会的一个合作项目。目前,包括十二个项目,每一个项目都有自己的代码库(Opendaylight 项目列表 )。这些项目中与 openflow 相关的项目的有controller、openflowjava 和 openflowplugin,目前,controller 仅支持 openflow 1.0, openflowplugin 是一个单独的项目,将来它的 core部分
4、要集成到 controller 中,使 controller 支持 openflow 1.3 及以上的版本。Opendaylight的厂商成员分为铂金成员,金牌成员和银牌成员。图 1 Opendaylight 阵营Opendaylight controller 使用 java编写,运行在 JVM 上,理论上来说可以部署到任何支持JAVA 的平台上,但是其 官网文档 推荐的最佳运行环境为最新的Linux(Ubuntu 12.04+)及 JVM 1.7+。OpenDaylight Controller 提供了一个模块化的开放 SDN 控制器,它提供了开放的北向API(开放给应用的接口) ,同时南向
5、支持多种包括 openflow 在内的多种 SDN 协议。底层支持混合模式的交换机和经典的 Openflow 交换机。Open Daylight Controller 在设计的时候遵循了六个基本的架构原则(以下来名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 46 页 - - - - - - - - - 自 opendaylight官方文档):运行时模块化和扩展化( Runtime Modularity and Extensibility ) :支持在控制器运行时进行服务
6、的安装、删除和更新。多协议的南向支持( Multiprotocol Southbound) :南向支持多种协议。服务抽象层(Service Abstraction Layer) :南向多种协议对上提供统一的北向服务接口。MD-SAL (Model Driven Service Abstraction Layer)是opendaylight 的一个主要 feature。开放的可扩展北向API(Open Extensible Northbound API ) :提供可扩展的应用 API,通过 REST 或者函数调用方式。两者提供的功能要一致。支持多租户、切片( Support for Multit
7、enancy/Slicing) :允许网络在逻辑上(或物理上)划分成不同的切片或租户。 控制器的部分功能和模块可以管理指定切片。控制器根据所管理的分片来呈现不同的控制观测面。一致性聚合( Consistent Clustering) :提供细粒度复制的聚合和确保网络一致性的横向扩展( scale-out ) 。Opendaylight controller 的架构框架:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 46 页 - - - - - - - - - 图 2 O
8、pendaylight controller 架构如图 2 所示, 南向通过 plugin 的方式来支持多种协议, 包括 OpenFlow1.0、1.3,BGP-LS 等。这些模块被动态挂载到服务抽象层(SAL) ,SAL 为上层提供服务,将来自上层的调用封装为适合底层网络设备的协议格式。控制器需要获取底层设备功能、可达性等方面的信息,这些信息被存放在拓扑管理器(Topology Manager)中。其他的组件,包括ARP handler、Host Tracker、Device Manager和 Switch Manager,则为 Topology Manager生成拓扑数据。控制器为应用(A
9、pp) 提供开放的北向API。 支持 OSGI 框架和双向的REST 接口。 OSGI 框架提供给与控制器运行在同一地址空间的应用,而 REST API 则提供给运行在不同地址空间的应用。所有的逻辑和算法都运行在应用中。控制器自带了GUI,这个 GUI 使用了跟应用同样的北向API,这些北向API 也可以被其他的应用调用。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 46 页 - - - - - - - - - Opendaylight的 openflowplugin
10、和 openflowjava 项目的目标是支持openflow 1.3 及以上的协议,由于openflow 协议设计时并没有考虑后向兼容性(例如openflow 1.0 和 openflow 1.3 的连接建立发生了很大的变化) , Openflow 1.3 plugin采用和 Openflow 1.0 完全不同的设计。 集成到 controller 的 openflow 1.0 plugin 是由 openflow plugin 和 openflowj 两部分实现,其中 openflowj 是 openflow 1.0 消息的静态库,它被 openflow 1.0 plugin 依赖,。Op
11、enflow 1.3 plugin 中的 openflowjava没有了 Openflow 1.3 的消息库( 使用了 YANG,支持 Openflow 1.3 以上的版本 ? ? ? ) 还包 括 了 连 接 建 立 和协 议编 解 码 部 分 , OpenflowPlugin 依 赖Openflowjava 实现消息处理等功能。 Openflowjava 和 OpenflowPlugin 设计框图如下:图 3 Openflowplugin 和 Openflowjava 设计框图如图 3 所示,左侧为 openflowjava 的功能框图, 右侧为 Openflowplugin 的框图。名师
12、资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 46 页 - - - - - - - - - 1.2 本文档组织结构本文档关注与 openflow 相关的 controller, openflowjava 和 openflowplugin 三个项目,重点分析controller。本文本着由浅入深的原则,首先介绍如何获取相关项目代码,如何编译,运行;其次介绍OSGI 框架和 maven 的一些基础概念,与此同时,分析opendaylight controller 的代码结构,接
13、着介绍如何将controller导入到 Eclipse和 Intellij idea 中(之所以把这步放在OSGI 和 maven介绍之后,是因为导入工程到IDE 的过程需要对 OSGI 和 maven有一些了解),分析下这两种 IDE 在编译调试中各自的优缺点;然后是代码的分析;最后列举opendaylight的重要技术及文档。Opendaylight有很多重要的技术需要了解, 每种技术都需要花一段时间研究,例如 OSGI 框架的使用, OSGI 服务的注册和调度, maven工程中 bundle的编写方法, sal,YANG,config,等。由于时间精力的限制,本文在最后简单分析了con
14、troller 收发包过程中 openflow plugin, SAL 和上层应用间的关系。文章中对不太明确和有疑问的地方采用红色字体加问号来标识。2. 感受 Opendaylight 这里的 Opendaylight 指的是 controller,openflowjava 和 openflowplugin,它们使用不同的代码库,但编译运行环境相同。2.1 环境搭建需要的环境如下:1)Ubuntu 12.04 32bit 2)JVM 1.7+ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -
15、- 第 7 页,共 46 页 - - - - - - - - - 3)Maven 3.04+ 对于第 2)和 3)需说明的是,最好先配臵java 环境再安装 maven,因为我这边的情况是我本来先安装maven, 挺费时间的(如果网速慢), 后来删除 jdk-6,maven也被删掉了Step1: 配臵 java 环境执行 java version查看使用的 java版本这个版本的 ubuntu装的应该是 jdk 1.6 执行 apt-get remove openjdk-6-jre-lib openjdk-6-jre-headless 删除 jdk 1.6 相关的东西注意:执行这个命令的时候,
16、需要观察下remove 过程,会发现它会自动安装 java jre 1.7 的东西,但是不要认为就不需要装jdk 1.7 了,因为 ubuntu 默认安装的东西是不全的, 至少我安装的过程中遇到了问题。 确认是否 java jdk是否安装全面的方法是,查看jdk 的安装目录是否完全flightflight-virtual-machine:$ ls /usr/lib/jvm/java-7-openjdk-i386/lib/ ct.sym dt.jar ir.idl jconsole.jar jexec orb.idl sa-jdi.jar tools.jar 以上这个 “ tools.jar”是
17、必不可少的, 因为 maven编译的时候对它有依赖。 如果发现 java-7-openjdk-i386 下没有 lib 文件夹,那么继续执行下一步执行 sudo apt-get -y install openjdk-7-jdk 注意:依然要看一下安装过程,如果发现似乎什么都装不上,那么请执行apt-get remove openjdk-7-jre-lib openjdk-7-jre-headless 删除 ubuntu给你默认安名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,
18、共 46 页 - - - - - - - - - 装的东西,再执行sudo apt-get -y install openjdk-7-jdk,之后再按上步所述查看 jdk 是否安装完全,一般没有问题了。修改 java环境变量Vim /etc/profile 在其末尾添加如下,并保存:export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$JAVA_HOME/bin:$J
19、RE_HOME/bin:$PATH 完成以下修改后,需重启虚拟机或使用命令source /etc/profile使配臵生效Step2: 安装 maven:sudo apt-get install maven 备注:使用 mvn v 可以查看当前系统中maven的版本,可以安装前和安装后看一下编译时,为避免出现“Out of memory error - java.lang.OutOfMemoryError: PermGen space: ”错误,可加入如下环境变量Home目录下执行: vim .bashrc在其结尾添加如下一行: export MAVEN_OPTS=-Xmx1024m -XX:
20、MaxPermSize=256m 然后 logout ubuntu再 login 使配臵生效2.2 获取代码Controller, openflowplugin 和 openflowjava的代码都可以匿名 git clone到本地。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 46 页 - - - - - - - - - 下载 controller:git clone https:/git.opendaylight.org/gerrit/p/controller.gi
21、t下载 openflowplugin:git clone https:/git.opendaylight.org/gerrit/p/openflowplugin.git下载 openflowjava:git clone https:/git.opendaylight.org/gerrit/p/openflowjava.git下载完毕后,会在当前目录下会生成controller、 openflowplugin 和 openflowjava三个目录。因为 openflowplugin 依赖 openflowjava, 在编译 openflowplugin 时会同时编译openflowjava 的相
22、关 bundle,因此 openflowjava 是不需要单独编译的,下载下它的目的是为了后续分析它的代码结构。需说明的是, openflowplugin 目前是一个单独的项目,它包含基本的controller 代码,所以它是可以单独运行的,只是没有controller 那样可以直观的从浏览器中看到和使用它的功能。Openflowplugin 如何运行使用将在后面介绍。编译运行编译:Controller: cd controller/opendaylight/distribution/opendaylight mvn clean install Openflowplugin: cd opend
23、aylight/openflowplugin/distribution/base mvn clean install 为避免编译过程中test的编译错误,可使用mvn clean install DskipTests跳名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 46 页 - - - - - - - - - 过测试执行:Controller: cd controller/opendaylight/distribution/opendaylight/target/dis
24、tribution.opendaylight-OSGIpackage/opendaylight ./run.sh Openflowplugin: cdopenflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-OSGIpackage/opendaylight ./run.sh 2.3 安装 mininet 我们使用 mininet 与 opendaylight controller 连接,我们使用的 mininet 的版本为mininet-of-1.3 ,既支持openflow
25、1.0 也支持openflow1.3 协议,下载地址为mininet-of-1.3。启动 mininet,使用 ifconfig 查看网络配臵,配臵mininet 的网络环境使之可以与 opendaylight controller 之间的连通,配臵完成后,从controller 和 mininet 两边分别 ping 一下。2.4 controller使用及功能介绍本节将通过 opendaylight controller与 mininet 连接, 演示 controller 的使用。Controller 支持的是 openflow 1.0 因此我们看到 controller 与 minin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Opendaylight学习及开发初级教程 2022 Opendaylight 学习 开发 初级教程
限制150内