简介
本部分将介绍OVX内部的工作原理,如哪些内部子系统实现了哪一些功能,从而使得OVX能支持OpenFlow网络的虚拟化。以下的内容将分为如下的小点介绍:
System Overview
Startup and Shutdown
The Event Loops
Network Discovery and Presentation
Virtualization and De-virtualization
State Synchronization
Reslience
persistence
The JSONRPC API
3.1 System Overveiw
OVX分为以下几个主要的部分:
一半是面向南向物理基础设施的部分,管理了datapath到OVX之间的OpenFlow通道,并建立和维持了一系列数据结构,用于描述物理基础网络。
另一半是面向北向租户控制器的部分,向租户控制器提供由OVXSwicth等组成的虚拟网络,并维护好OVX到各个租户控制器的OpenFlow通道。
Global maps则保存了物理设施到OVXNetwork的component之间的映射关系,完成PhysicalNetwork到OVXNetwork之间的桥接路由(其实就是映射)。
JSON的API用于配置和获取系统的信息。
Global mapping是在OVXNetwork被创建的时候完成的,两段channel的管理也在不同的IO Loop中完成配置,使得从datapath到tenant controller的两段OpenFlow channel 能够正确对接成一条完整的controller channel。每一个需要被路由到OVXNetwork,或者需要横跨南北两部分的数据包都要在loop中调用virtualize()或者 devirtualize()函数以完成消息的转换。由于global map的存在,使得底层物理网络和租户的虚拟网络之间的状态可以解耦,从而使得OVXNetwork可以在运行状态下动态地改变网络,也让OVX可以在没 有任何租户网络的情况下控制底层网络。
3.2 Startup and Shutdown
这部分将要介绍的是OVX启动和关闭时OVX内部的程序运作流程。分为以下4个小节:
Main process startup
PhysicalNetwork / Southbound channel initialization
Tenant Network (OVXNetwork) / Northbound channel initialization
System shutdown
3.2.1 Main process startup
OVX的入口方法在OpenVirteX.java[package net.onrc.openvirtex.core]文件,通过解析命令行的输入参数来启动 OpenVirteXController,OpenVirteXController完成了OVX核心的启动,也完成了环境变量,OVX参数等系统配置 和初始化。
启动的内容包括:
初始化单一的PhysicalNetwork实例,用于描述底层物理网络。
尝试连接数据库,恢复数据库中先前存在虚网。
启动API服务,接受API调用。
初始化南向的通道处理函数,监听网络事件。
第三步的时候,OVX监听API调用,第四步时,监听来自datapaths的连接。
3.2.2 PhysicalNetwork population / Southbound channel initialization
交换机连接到OVX以及链路发现的数据都记录到了PhysicalNetwork中。OVX为每一个交换机创建了一个PhysicalSwitch 和SwitchDiscoveryManger的对象,用户描述交换机。此时OVX对于交换机而言,就是一个控制器。以下的图形象地描述了OVX在处理 datapath连接时的状态变化。
Fig.1 OVX的南向与datapath握手的状态机示意图
SwitchChannelHandler [net.onrc.openvirtex.core.io]将这个状态机设置成枚举类型的ChannelState,每一个状态都有对应的方法去处理当前状态下的事件和消息。
当datapath达到WAIT_DESCRIPTION_STAT_REPLY之后,OVX才能将datapath映射成一个 PhysicalSwitch。利用datapath提供的信息,OVX可以对datapath对应的PhysicaiSwitch进行配置,并将其加入 到PhysicalNetwork中。当SwitchDiscoveryManager找到datapath的PhysicalNetwork,并且 PhysicalSwitch的statisticsManager开启之后,datapath进入ACTIVE状态。当datapath进入 ACTIVE状态时,datapath将参与到网络发现和OVX的事件循环当中,此时的datapath是一个正常运行状态的交换网桥。
3.2.3 Tenant network (OVXNetwork) / Northbound channel initialization
一个租户的网络的创建、配置和初始化都通过API的调用,其中步骤包括:
Declare an OVXNetwork, the Address block used, and tenant controller(s) to
connect the OVXNetwork to
Create OVXSwitches from available PhysicalSwitches
Add OVXPorts to the OVXSwitches
Add OVXLinks, Hosts, and for BVSes, SwitchRoutes
If manual, specify paths for OVXLinks and SwitchRoutes
Optionally, add backup paths for OVXLinks and SwitchRoutes
Initialize the OVXNetwork
以上的步骤完成之后,OVX需要将其components初始化,并将virtual components映射到PhysicalNetwork components,并记录在global map中。然后将虚拟的components状态置为ACTIVE,在这种非常具有强制依赖性的顺序之下,最终完成OVXNetwork的初始化。具体的 API都写在了API server [net.onrc.openvirtex.api.server]中,他们在tenant handlers [api.server.handlers.tenant]中被调用。具体的接口函数此处不加赘述,读者可到官网查看,也可以直接查看源码。下图描述了 OVX中tenant Network的创建过程:
每一个Component都包含有register()和boot()的接口函数用于注册和初始化component。容易意识到的一点是,这些 Component的启动肯定是有顺序的,或者说他们之间的以来关系肯定是固定的。如端口必然以来于交换机,没有交换机类,就不会有端口类。下图介绍了 Components之间的包含和映射关系。其中实线为包含关系,虚线为映射关系。
ControllerChannelHandler [net.onrc.openvirtex.core.io] 负责OVXSwitch实例到tenant controller的连接,并维持一个状态机如下图所示。当且仅当一个OVXNetwork完成了所有OVXSwitch和控制器的连接时,才能进入 ACTIVE状态。此时的OVX对于tenant Controller而言是一个datapath。
本文未完,详情请查看原文
了解更多请关注SDNLAB门户网站
官方微信互动平台