云计算和SDN中的开源交换机介绍以及使用
之前关于SDN的开发工作都是在控制器层面上(以ryu为主),现在开始了新的工程项目,需要同时修改控制器和交换机的源码,如果后续项目需要,还可能需要加中间层——网络虚拟层,这部分的知识已经在前面读过了相关论文,有了了解。以前不论是硬件交换机和Mininet中都是用的CPqD,所以在这次首选的交换机是CPqD,读了两天源码之后发现自己的选择错了,对自己的想法也有了很大的改变。
网上能找到的CPqD相关源码的资料非常少非常少(我没有找到),我很晦涩的看了两天(C语言真的不好读),只是对代码有了大概的了解,并不能达到自己的要求,在第二天晚上,突然觉得自己走了冤枉路,被习惯的力量束缚了自己,所以立马转战OpenvSwitch,网上的源码资料相当多,所以学习了两天,基本可以上手该代码了。所以,时刻告诫自己,不要忘了出发时候的目的,克服习惯的束缚,选择最优的路径。
下面的两个交换机都是我实际用过的,没有好坏比较,都是杰出团队的大作,如果需要改写交换机源码,暂时推荐OpenvSwitch,因为他的资料多!不过如果以后有时间我还是打算读读CPqD代码的。个人感觉CPqD是比OpenvSwitch简单和轻量一点,毕竟他只实现了OpenFlow1.3协议,更多的用于实验目的,而OpenvSwitch内核模块是可以替换掉linux网桥的,支持OpenFlow协议只是他的一部分功能。
下面简单的介绍下CPqD和OpenvSwitch
一. CPqD
CPqD的github源码上面已经详细的讲解了他的安装和使用。之前我已经安装和使用了好多次,所以不再赘述
不过有个问题需要注意
- 在ubuntu13.10以上的版本CPqD无法正确编译
原因:CPqD的编译依赖于netbee库,而如果bison版本大于2.5,这个库就不能编译,而ubuntu13.10以上的版本的bison库的版本都高于2.5
解决办法:卸载系统的bison,安装符合要求的bison版本。github上面已经添加了解决办法。也可以参加下面两个连接:链接1,链接2
二. OpenvSwitch
第一次用OpenvSwitch,所以很有必要自己详细总结过程,为以后提供方便,ubuntu用的是14.04LTS版本,内核版本为3.19.8
OpenvSwitch的官网里面有很详细的资料,可以现在源码解读和学习。
- 进入官网,下载自己所需要的OpenvSwitch版本,我下载了LTS版本2.3.2,后来发现有问题(问题1),重新下载了2.4版本
- 解压安装包:
tar -xzf openvswitch-2.4.0.tar.gz
- 构建基于Linux内核的交换机,uname -r用来得到自己linux内核版本号,用反引号(键盘上数字1左边)括起来,其中aptitude和apt-get一样,是Debian及其衍生系统中功能极其强大的包管理工具,但是aptitede在处理依赖问题上更佳一些,在删除一个包时,会删除本身所依赖的包,使系统更为干净。
./configure部分可以用--prefix=参数,可以让OVS完全安装在该目录底下。 cd openvswitch-2.4.0
aptitude install dh-autoreconf libssl-dev openssl #预先安装一些库
./configure --with-linux=/lib/modules/'uname -r'/build- 编译并安装OVS2.4.0
make
make install - 安装并加载构建的内核模块
modprobe gre
insmod datapath/linux/openvswitch.ko
make modules_install
modprobe openvswitch此时可以通过lsmod |grep openvswitch来查看已载入系统的模块,发现有OpenvSwitch
- 使用ovsdb工具初始化配置数据库
ovsdb-tool create /usr/local/etc/openvswitch/conf.db /usr/local/share/openvswitch/vswitch.ovsschema
如果顺利进行到这里,则表明OVS已经成功安装,下面介绍如何在Mininet中使用OVS
- 开启ovsdb-server配置数据库:有两种方式,如果要使用ssl连接,务必在编译前安装好libssl-dev以及openssl。之后可以在/usr/local/var/log/openvswitch中查看日志ovsdb-server.log
- no ssl
ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
--remote=db:Open_vSwitch,Open_vSwitch,manager_options \
--pidfile --detach --log-file - ssl
ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
--remote=db:Open_vSwitch,Open_vSwitch,manager_options \
--private-key=db:Open_vSwitch,SSL,private_key \
--certificate=db:Open_vSwitch,SSL,certificate \
--bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
--pidfile --detach --log-file
- no ssl
- 开启ovs-vsctl
ovs-vsctl --no-wait init
- 开启ovs-switchd功能,即主进程
ovs-vswitchd --pidfile --detach
至此,OVS启动完毕,可以在Mininet里面使用了
- 启动Mininet,交换机选成OVS
sudo mn --controller=remote --switch=ovsk
这样完成了一次的安装和配置,可以如果重启机器会发现数据库什么的都得重新开始,所以我们可以继续配置,设置为开机自动启动
- 开机自动加载内核模块
echo "openvswitch " >> /etc/modules
echo "gre" >> /etc/modules
echo "libcrc32c" >> /etc/modules - 开机自动启动
首先新建一个文件vim /etc/init.d/openvswitch
文件内容为:
#!/bin/sh
start-stop-daemon -q -S -x /usr/local/sbin/ovsdb-server -- --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach --log-file
sleep # waiting ovsdb-server
start-stop-daemon -q -S -x /usr/local/bin/ovs-vsctl -- --no-wait init
start-stop-daemon -q -S -x /usr/local/sbin/ovs-vswitchd -- --pidfile --detach --log-file接着改变文件权限,执行开机启动命令
chmod +x /etc/init.d/openvswitch
updata-rc.d -f openvswitch defaults
安装过程中遇到的问题:
- 问题:error:linux kernel in /lib/modules/3.19.0-25-generic/build is version 3.19.8, but version newer than 3.14.x is not supported
原因:所用的OpenvSwitch的版本不支持linux内核版本高于3.14
解决办法:最简单的版本就是下载和自己内核版本号对应的OpenvSwitch版本,下面列出OpenvSwitch和Linux内核的版本支持关系Open vSwitch Linux kernel 1.4.x 2.6.18 to 3.2 1.5.x 2.6.18 to 3.2 1.6.x 2.6.18 to 3.2 1.7.x 2.6.18 to 3.3 1.8.x 2.6.18 to 3.4 1.9.x 2.6.18 to 3.8 1.10.x 2.6.18 to 3.8 1.11.x 2.6.18 to 3.8 2.0.x 2.6.32 to 3.10 2.1.x 2.6.32 to 3.11 2.3.x 2.6.32 to 3.14 2.4.x 2.6.32 to 4.0 2.5.x 2.6.32 to 4.3 - 问题:I/O error: /usr/local/etc/openvswitch/conf.db: failed to lock lockfile(Resource temporarily unavailable)
原因:写conf.db文件所在的目录需要管理员权限
解决办法:加上sudo即可,因此建议在安装初期直接切换到管理员sudo su - 问题:Private key specified but OpenvSwitch was built without SSL support
原因:没有安装SSL
解决办法:在编译前安装好libssl-dev以及openssl。
三. openvswitch的简单使用(下文提到的网桥即OpenFlow交换机)
- 添加一个名为s的网桥
ovs-vsctl add-br s - 列出所有的网桥:
ovs-vsctl list-br - 查看交换机s的信息:
ovs-ofctl show s - 查看s交换机的端口的状态:
ovs-ofctl dump-ports s - 查看s交换机的流表:
ovs-ofctl dump-flows s
四. openvswitch和CPqD的比较
经过我的实验,发现OVS比CPqD性能好太多!!!以前自己写的ryu拓扑发现模块包括ryu自带的模块用在CPqD上发现拓扑数量十分有限,今天安装好OVS后重新跑了下我的代码,相同的机器,性能简直好了太多太多!
附上OVS2.4.0的主要最新特性和改进:
- 支持快速生成树协议
- 支持多播窥探
- 进行了连接词匹配OpenFlow扩展,在构建流的时候不会引入笛卡尔积数量爆炸
- 对许多CLI命令增加了bash命令行的完成
- 支持通过OpenFlow1.4协议进行事务更新
- 增加了最新OpenFlow的特征
- 增加了一个脚本——ovs-docker,可以很方便的把OVS集成在docker容器里面
- 支持linux内核中的STT和基本的Geneve隧道
- 支持VXLAN组策略扩展
说明:
- 上文中的CPqD均指的是CPqD/ofsoftswitch13交换机
- OpenvSwitch简称OVS
云计算和SDN中的开源交换机介绍以及使用的更多相关文章
- OpenFlow和SDN的历史和原理介绍
OpenFlow相关的历史.新闻:http://blog.csdn.net/jincm13/article/details/7825754起源与发展[https://36kr.com/p/503598 ...
- 【转帖】四种BI 开源工具介绍-SpagoBI,openI,JasperSoft,Pentaho
四种BI 开源工具介绍-SpagoBI,openI,JasperSoft,Pentaho 1 BI系统的简述 从技术角度来说 BI 包含了 ETL.DW.OLAP.DM等多环节.简单的说就是把交易系统 ...
- Android中使用开源框架android-image-indicator实现图片轮播部署
之前的博文中有介绍关于图片轮播的实现方式,分别为(含超链接): 1.<Android中使用ViewFlipper实现屏幕切换> 2.<Android中使用ViewPager实现屏幕页 ...
- 【Android开发经验】移动设备的“声波通信/验证”的实现——SinVoice开源项目介绍(一)
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在APP市场上,常常有一些充满新意的应用让我们眼前一亮,比方微信的面对面加好友,支付宝的声波支付等等,都是通 ...
- 揭开webRTC媒体服务器的神秘面纱——WebRTC媒体服务器&开源项目介绍
揭开webRTC媒体服务器的神秘面纱--WebRTC媒体服务器&开源项目介绍 WebRTC生态系统是非常庞大的.当我第一次尝试理解WebRTC时,网络资源之多让人难以置信.本文针对webRTC ...
- 6个P2P流媒体开源项目介绍
P2P流媒体开源项目介绍 1. PeerCast 2002年成立,最早的开源P2P流媒体项目.PeerCast把节点按树结构组织起来, 每个频道都是一个树, 直播源是根节点,父节点只给子节点提供数据 ...
- 各种开源协议介绍 BSD、Apache Licence、GPL V2 、GPL V3 、LGPL、MIT_转
转自:各种开源协议介绍 BSD.Apache Licence.GPL V2 .GPL V3 .LGPL.MIT 现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的 ...
- windows下nodejs express安装及入门网站,视频资料,开源项目介绍
windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件下载地址: ...
- IOS-常用第三方开源框架介绍
iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 时间:2015-05-06 16:43:34 阅读:533 评论:0 收藏:0 [点我收藏+] ...
随机推荐
- springmvc管理资源开放
关于web.xml的url映射的小知识:<url-pattern>/</url-pattern> 会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀 ...
- 修改easyui panel 默认样式
有这么个需求需要修改easyui panel头部中的背景色.于是根据panel中的最终被浏览器解析出来的类名,直接修改这个css样式,设置backgroud-color这个属性,发现不管用. 于是,就 ...
- 前端JS脚本将网页表格导出为Excel
话不多说,上代码! <!DOCTYPE> <html> <head> <title>Excel Test</title> </head ...
- Lintcode---线段树查询(区间最大值)
对于一个有n个数的整数数组,在对应的线段树中, 根节点所代表的区间为0-n-1, 每个节点有一个额外的属性max,值为该节点所代表的数组区间start到end内的最大值. 为SegmentTree设计 ...
- erlang supervisor simple_one_for_one实例
simple_one_for_one vs one_for_one: 相同点: 这种Restart Strategy和one_for_one基本相同(即当一个child process挂掉后,仅仅重启 ...
- PL/SQL Developer导入、导出表结构和表数据
在表的所有者不能改变的情况下,可以使用导入导出表结构和表数据的方法,将表移动到你想要的所有者下(注:特别是建立表的时候如果以sysdba的身份登录的话,所有表的所有者都为sys,此时会对你用c#访问数 ...
- oozie搭建手册
环境准备 mave安装 1.下载并上传maven,然后解压 tar -zxvf apache-maven-3.3.9-bin.tar.gz -C /home 2.配置环境变量 vi /etc/prof ...
- java 检测字符串中文乱码
1.检测是否为乱码 public static boolean isMessyCode(String strName) { Pattern p = Pattern.compile("\\s* ...
- HDU1196 Lowest Bit
Lowest Bit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- Linux下杀毒软件clamav的安装和使用
发表于:2017年6月30日 分类:Linux/Unix 最近发现有台服务器中毒了,手动去查杀总是会有遗漏,最后安装了Linux下的杀毒软件clamav,使用起来还是不错的. 环境:Linux 6 ...