1 简介
OpenVirteX(以下简写为OVX)是一个网络虚拟化平台,操作人员可以用来创建和管理虚拟SDN网络(vSDNs)。租户可以通过虚拟化的OF网络构建特定的网络拓扑,寻址等。同FlowVisor相似,OVX也处于Physical Network与Controller的中间层,担任相同的角色。两者区别在于对数据包头的处理粒度不同,FlowVisor会根据flowspace的信息(如端口、ip地址等)将不同主机进行划分,以此来组成不同的slice。而OVX则是提供一个完整的虚拟网络。
图1 OpenVirteX的布局
OVX位于物理设备以及控制器之间,它的功能如下:
- 创建一个特定拓扑的独立虚拟网络
- 使用自己想要的网络控制器(OpenDaylight, Floodlight, NOX, BEACON)
- 能够使用整个地址空间
- 可以动态改变运行中的虚拟网络,并且能够从物理失效情况下自动恢复
2 OVX模块组成
- PHYSICAL COMPONET:面向网络的的南向部分,管理OVX与物理交换机的of通信(见图2粉色部分)
- VIRTUAL COMPONENT:面向租户的北向部分,其中每一个租户拥有一个众多OVXSwitch组成的虚拟网络,此部分负责OVXSwitch与controller之间的of通信(见图2蓝色部分)
- GLOBAL COMPONENT:作为连接上面两部分的桥梁,维护一套Physical Network 和OVXNetwork的对应关系(见图2绿色部分)
- API SERVER:提供关于系统配置,系统和网络状态的jsonrpc api
图2 事件流转过程
如上图所示,两个重要类ControllerChannelHandler和SwitchChannelHandler分别作为北向和南向接口的中枢处理发送过来的消息,当物理交换机packet-in消息过来时,SwitchChannelHandler.messageReceived()会进行分解LLDP与非LLDP消息,然后交给不同的消息方法处理,ControllerChannelHandler类似。作为中间层的GLOBAL COMPONENT担任着virtual和physical两部分的转化工作,即devirtualize和virtulize。
3 OVX组件的四种状态
目前在Java中实现OVX的迭代。组件被定义为[net.onrc.openvirtex.elements.*]包下的类。每个组件由一个基类定义。
OVX组件需要处理4种状态
- INIT:初始化,调用构造函数创建
- INACTIVE:非活跃状态,不处理of消息以及网络发现
- ACTIVE:运行状态,系统消息事件正常流转处理
- STOPPED:销毁,必须重新创建才能使用
图3 组件的状态迁移
状态迁移接口
- register() [INIT -> INACTIVE]:将组件添加到映射和存储中,检查依赖关系。 (例如:为交换机创建一个新的端口。)
- boot() [INACTIVE -> ACTIVE]:打开控制通道,激活相关组件。(例如: 如果端口启动( boot()ed),就建立一个连接。)
- teardown() [ACTIVE -> INACTIVE]:关闭控制通道,关闭相关组件。(例如:如果一个端口不起作用了,那么与之相连的组件也不起作用。)
- unregister() [INACTIVE -> STOPPED]:从映射和存储中删除组件 ,必要的时候注销组件。(例如:一个连接不存在了, 那么不管一个或两个连接的端口注销了(unregister()ed),组件必须注销。)
4 OVX虚拟机
OVXSwitch分为两种虚拟化子类:
- VSW(OVXSingleSwitch): 对应一个单独的虚拟switch。
- BVS(OVXBigSwitch):将多个switch的集合看做一个crossbar,BVS保存有switch集合的route table。
图4 三个switch类切换到一个虚拟网络
图4是三个switch类切换到一个虚拟网络的结构图。每个Physical Switch (psw1, 2 and 3) 映射到对应的switch (switch1, 2, and 3)上。虚拟交换机vsw1是一个单独的交换机,映射到物理交换机psw1上,vsw2是一个集成的虚拟机,映射到psw2和psw3上,并且使用它们之间的连接作为SwitchRoute。每个tenant可以同时拥有VSW和BVS, 只要他们对应的psw没有重叠。最后,经OpenFlow通道(蓝色箭头)到控制平台。
5 OVX环境搭建
OpenVirteX官网提供了一套完整的OVX测试环境,除了OpenVirteX本身,还有Mininet、Floodlight等工具。下面介绍OVX集成环境的安装。
(1)环境准备:windows + vmware workstation。
(2)下载OVX虚拟磁盘文件,并解压http://ovx.onlab.us/wp-content/uploads/ovx-vm-x86_64-2014-10-14.zip
(3)在vmware workstation上新建一个虚拟机,步骤如下(此处不再给出安装图):选择“自定义”选项 —>选择“稍后安装系统”—>选择ubuntu 64位—>选择官网推荐2G内存,资源不够用1G也可以—>使用桥接网络—>使用现有虚拟磁盘,并选择下载的ovx虚拟磁盘文件。
(4)完成步骤(3)后,启动虚拟机,登陆用户名及密码均为ovx。
(5)成功后的图形界面如下,进入/home/ovx/可以看到集成的OVX服务目录,包括Mininet、Floodlight、OpenVirteX,但MongoDB数据库需要自己安装。(集成环境默认使用Floodlight控制器,如需使用其他控制器,需额外安装,在这篇文章中就不作介绍了。)
集成环境说明:
- Floodlight是会随着虚拟机Linux系统启动而启动的,脚本位置为/home/ovx/ctrl/start-controllers.sh。floodlight默认tcp连接端口为10000、20000和30000,而ui默认端口为10001、20001、和30001。
- OVX默认启动6633端口,对物理交换机而言它就是控制器,当虚网启动后ovx会连接到floodlight的端口10000建立tcp连接。
6 MongoDB安装
参照http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/#install-mongodb
(1)导入MongoDB公共GPG密钥
Ubuntu软件包管理工具(即dpkg和apt)通过要求分销商签订GPG密钥包确保方案的一致性和真实性。发出以下命令来导入MongoDB公共GPG密钥。
1 |
# sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 |
(2)为MongoDB创建一个列表文件,使用下面的命令行创建/etc/apt/sources.list.d/mongodb.list列表文件。
1 |
#echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list |
(3)重新加载本地包数据库
1 |
#sudo apt-get update |
(4)安装MongoDB数据包
1)你可以安装MongoDB的最新稳定版本或MongoDB的特定版本。
- 安装MongoDB的最新的稳定版本
1 |
#sudo apt-get install -y mongodb-org |
- 安装MongoDB的特定版本
1 |
#sudo apt-get install -y mongodb-org=2.6.1 mongodb-org-server=2.6.1 mongodb-org-shell=2.6.1 mongodb-org-mongos=2.6.1 mongodb-org-tools=2.6.1 |
2)虽然您可以指定任何可用版本的MongoDB,apt-get将升级到可用的最新版本。但为了防止意外升级,需要使用以下命令序列:
1 2 3 4 5 |
#echo "mongodb-org hold" | sudo dpkg --set-selections #echo "mongodb-org-server hold" | sudo dpkg --set-selections #echo "mongodb-org-shell hold" | sudo dpkg --set-selections #echo "mongodb-org-mongos hold" | sudo dpkg --set-selections #echo "mongodb-org-tools hold" | sudo dpkg --set-selections |
(5)安装完成后,通过whereis命令可以查看到MongoDB安装成功的路径。
1 2 |
root@ovx-vm:~# whereis mongod mongod:/usr/bin/mongod /etc/mongod.conf /usr/bin/X11/mongod /usr/share/man/man1/mongod.1.gz |
(6)更改MongoDB配置文件
1 |
ovx@ovx-vm:~$ vi /etc/mongod.conf |
将下面的配置项设置true(如果MongoDB数据库所在磁盘空间大于4G则无需更改,否则启动异常)
1 2 |
# Disables write-ahead journaling nojournal = true |
(7)启动MongoDB
1 |
ovx@ovx-vm:~$ service mongod start |
7 启动OVX
进入/home/ovx/OpenVirteX/scripts,执行如下命令启动OVX。
1 |
root@ovx-vm:/home/ovx/OpenVirteX/scripts# sh ovx.sh |
第一次启动OVX,会提示packaging……..,耐心等待,成功启动后,会有相关数据库、switch连接信息,如下图。
更多OVX详情请参考链接:http://ovx.onlab.us/getting-started/tutorial/