作者简介:刘宇欣,福州大学数学与计算机科学学院2015级软件工程研究生 ,研究方向:数据中心的拥塞控制;数据平面可编程。邮箱:562613629@qq.com。
前言
本来我觉得没必要写这篇教程的,因为关于安装floodlight,mininet构建数据中心拓扑的教程网上就有,何必再写这篇,这是因为我在复现的过程中,发现一些floodlight更新过程中带来的问题,一言以蔽之,就是floodlight在更新,而教程太老了。这篇教程其实就是我实现实验过程中遇到问题和解决问题的总结。包括解决了怎么安装floodlight1.2,floodlight1.2 web端无法访问,floodlight1.2 web端查看不到添加的交换机和主机的问题。
一、安装前准备工作
(1)Linux:Ubuntu14.04版本 这里提供镜像,各种版本都有http://pan.baidu.com/s/1skKN5CT
(2)安装JDK,Ant 提供命令行
1 |
sudo apt-get install build-essential default-jdk ant python-dev |
(3)安装git 提供命令行
1 |
sudo apt-get install git |
二、安装Floodlight
2.1 下载源
(1)从Github下载并编译Floodlight,提供命令行
1 |
git clone git://github.com/floodlight/floodlight.git |
(2)git下载速度慢的,可以选择从github上直接下载,然后解压,或者也可以从网盘下载,然后拷进虚拟机即可http://pan.baidu.com/s/1qYe2s8k
2.2 编译安装
1 2 |
cd floodlight ant |
直接编译会出现如下错误,看到如下报错信息
我们发现报错信息提示jdk版本需要1.8,我们看下我们的jdk版本
发现是1.7的,这是因为之前的安装jdk的命令,安装的是default-jdk,而ubuntu14.04的默认jdk是1.7,为什么会出这个问题?
因为本文参照的教程在成稿时,floodlight不是现在1.2的版本,jdk的需求在1.7以下,所以没有问题,所以我们现在需要安装jdk1.8
(1)源码包准备:
首先到官网下载jdk,http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,下载jdk-8u121-linux-x64.tar.gz
(2)解压源码包
通过终端在/usr/local目录下新建java文件夹,命令行:
1 |
# sudo mkdir /usr/local/java |
然后将下载到压缩包拷贝到java文件夹中,命令行:
进入jdk源码包所在目录
1 |
# sudo cp jdk-8u121-linux-x64.tar.gz /usr/local/java |
然后进入java目录,命令行:
1 |
# cd /usr/local/java |
解压压缩包,命令行:
1 |
# sudo tar xvf jdk-8u121-linux-x64.tar.gz |
然后可以把压缩包删除,命令行:
1 |
# sudo rm jdk-8u121-linux-x64.tar.gz |
(3)设置jdk环境变量
这里采用全局设置方法,它是是所有用户的共用的环境变量
1 |
$ sudo gedit ~/.bashrc |
1 2 3 4 |
export JAVA_HOME=/usr/local/java/jdk1.8.0_121 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:JAVAHOME/lib:{JRE_HOME}/lib export PATH=JAVAHOME/bin:PATH |
重启后我们可以发现jdk已经更新到1.8版本了
然后编译:
编译成功
然后启动floodlight,通过命令行
1 |
# java -jar target/floodlight.jar |
启动后,通过浏览器访问floodlight的管理界面,http://localhost:8080/ui/index.html
结果出现下面的问题 ,floodlight1.2的管理界面无法访问
通过查资料发现,似乎是最新的版本的问题,有两个方法解决
1)用git Submodule配置
一种需要通过git Submodule命令进行一系列的设置,通过命令行(这边稍微解释下git Submodule命令,git Submodule 是一个很好的多项目使用共同类库的工具,他允许类库项目做为repository,子项目做为一个单独的git项目存在父项目中,子项目可以有自己的独立的commit,push,pull。而父项目以Submodule的形式包含子项目,父项目可以指定子项目header,父项目中会的提交信息包含Submodule的信息,再clone父项目的时候可以把Submodule初始化。)
1 2 3 4 |
# git pull origin master # git submodule init # git submodule update # ant |
1 |
# java -jar target/floodlight.jar |
再通过http://localhost:8080/ui/index.html访问floodlight的管理界面,发现可以顺利访问
2)用旧的版本0.91
另一种,就是目前为止有效的就是下载0.91版本,即旧版本没有问题,下载地址为
http://www.projectfloodlight.org/download/
然后解压编译
1 2 |
ant java -jar target/floodlight.jar |
再通过http://localhost:8080/ui/index.html访问floodlight的管理界面,发现可以顺利访问
三、安装mininet并连接Floodlight
安装完控制器后,我们就需要安装mininet构建拓扑结构了,命令行如下
1 |
sudo apt-get install mininet |
接着需要构建网络拓扑,就以数据中心网络为例,我构建了一个脚本fattree.py,
完成后只需要用mininet执行脚本即可:
1 |
# sudo mn --custom /home/lyx/fattree.py --topo mytopo --controller=remote,ip=218.193.113.249,port=6633 --switch ovsk,protocols=OpenFlow10 |
请根据实际情况将ip为floodlight所在服务器的ip,添加protocols参数指定OpenFlow协议版本。然后针对port,当6633web界面没有反应时,试着换着用6653,有可能6633被占用了,特别是floodlight version1.2 (特别提醒)
mn为mininet启动命令。
--mac指定虚拟主机的mac地址顺序编号,若不带此参数则随机编号
--controller指定of交换机的控制器
--switch指定虚拟交换机的类型,ovsk表示虚拟交换机为ovs Kernel mode
--custom指定自定义拓扑文件
--topo指定加载拓扑的名字
执行过程如下图所示:
这是0.91版本的
这是1.2版本的
注意:做完试验后,建议把floodlight和mininet关闭,别直接关机,否则后果自负。
参考材料
https://www.sdnlab.com/2909.html
http://www.linuxidc.com/Linux/2015-01/112030.htm
https://floodlight.atlassian.net/wiki/spaces/floodlightcontroller/pages/8650780/Floodlight+VM
https://segmentfault.com/a/1190000003076028