1 安装一些python的套件:
python-eventlet
python-routes
python-webob
python-paramiko
2 安装ryu
参考文章:https://www.sdnlab.com/11010.html
这里有一篇文章,显示说ryu3.19+的版本无法进行web ui的显示,我最初安装了4.31版本,发现无法下载gui-patch-v3-rebase进行web的拓扑图显示,只能通过ryu原生自带的拓扑图显示,因此这里推荐3.16版本。
git clone git://github.com/osrg/ryu.git
cd ryu
git tag
git checkout v3.16
安装包下载好后,建议备份一份,以便之后使用。
然后执行安装命令
sudo pip install -r tools/pip-requires
sudo python setup.py install
这里建议不要用python3和pip3安装,用python3或pip3会出现问题。
同时pip最好不要安装最新版,本次安装用的是系统自带的pip-8.1.1和python 2.7.12。
查看安装版本,测试安装是否完成
ryu --version
ryu-manager
运行时出现报错,如下,这些报错比较好处理,一般网上都有解决方案。
sudo pip install oslo.config --upgrade
sudo pip install pyopenssl --upgrade
其他错误的解决方案,参考博客https://www.cnblogs.com/cotyb/p/4598044.html
3 安装web gui
web gui有两种方式实现,一种是ryu原生的,另一种是下载gui-patch-v3-rebase实现。不过据查,ryu不支持显示主机,只能显示交换机和交换机之间的链路。
3.1 方式1 ryu原生实现
参考官方文档:https://ryu.readthedocs.io/en/latest/gui.html
安装ryu完毕,打开两个终端窗口。
终端1
PYTHONPATH=. ./bin/ryu run --verbose --observe-links ryu/app/gui_topology/gui_topology.py ryu/app/simple_switch_13.py
其中,--verbose参数用于显示LOG.debug信息,--observe-links用于指明拓扑发现。
终端2
sudo mn --controller remote --topo tree,depth=3
浏览器
测试联通性
3.2 方式2 gui-patch-v3-rebase实现
参考这篇文章https://www.cnblogs.com/zxqstrong/p/4780307.html
(1)下载Flask
sudo pip install Flask
(2)下载gevent-websocket
sudo pip install gevent-websocket
(3)下载gui-patch-v3-rebase.zip
wget https://github.com/yamada-h/ryu/archive/gui-patch-v3-rebase.zip
下载之后解压,先做一个简单的测试
进入gui-patch-v3-rebase/ryu/gui目录,运行controller.py文件
./controller.py
打开浏览器,输入127.0.0.1:8000
如果浏览器出现报错,大概是500错误,无法打开页面,下面这几行语句可能出现error,这个之前碰到过,好像是因为我用python3和pip3安装,导致出现了问题,后来卸载Flask和gevent-websocket,重新安装后问题解决。
2019-04-08 13:54:55,586 [INFO] Running on ('0.0.0.0', 8000)
2019-04-08 13:55:03,733 [DEBUG] Initializing WebSocket
2019-04-08 13:55:03,733 [DEBUG] Validating WebSocket request
2019-04-08 13:55:03,734 [DEBUG] view loaded. views.topology
2019-04-08 13:55:03,749 [INFO] 127.0.0.1 - - [2019-04-08 13:55:03] "GET / HTTP/1.1" 200 4122 0.015587
如果能够正常打开页面,则说明gui没有问题,用ryu-gui-patch-v3-rebase目录下的ryu文件夹替换掉ryu目录下的ryu
然后进入/home/yongpu/ryu/ryu/gui目录,运行./controller.py,可以看到,运行正常
4. 运行topo测试
打开三个窗口
窗口1
ryu-manager --verbose --observe-links ryu.topology.switches ryu.app.rest_topology ryu.app.ofctl_rest ryu.app.simple_switch
ryu-manager --observe-links ryu.app.rest_topology ryu.app.ofctl_rest ryu.app.simple_switch_13
窗口2
sudo mn --controller remote --mac --topo tree,2,2
窗口3
./controller.py
打开浏览器,输入127.0.0.1:8000
备注:不知道为什么,我这里进入网页很慢很慢,而且无法显示拓扑图,一直显示Unconnected状态,因此该方式未能成功实现。
4 一些RestApi
https://blog.csdn.net/jmh1996/article/details/72636628
1 得到所有交换机列表:
URL: http://192.168.1.197:8080/stats/switches
使用GET方法
2 得到某台交换机状态信息
URL : http://192.168.1.197:8080:/stats/desc/
方法:get
其中 是可变的,由3.1 所得填入即可
比如得到交换机1的基本信息:
URL http://192.168.1.197:8080/stats/desc/1
3 得到指定交换机的所有flow的状态信息
URL: http://192.168.1.197:8080/stats/flow/
方法:GET