OpenVirteX学习笔记

170230_pEph_2249260.jpg

简介

本部分将介绍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连接时的状态变化。

170310_eQv6_2249260.png

                                                   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的创建过程:

170359_4oP5_2249260.png

每一个Component都包含有register()和boot()的接口函数用于注册和初始化component。容易意识到的一点是,这些 Component的启动肯定是有顺序的,或者说他们之间的以来关系肯定是固定的。如端口必然以来于交换机,没有交换机类,就不会有端口类。下图介绍了 Components之间的包含和映射关系。其中实线为包含关系,虚线为映射关系。

170420_rxtd_2249260.png

ControllerChannelHandler [net.onrc.openvirtex.core.io] 负责OVXSwitch实例到tenant controller的连接,并维持一个状态机如下图所示。当且仅当一个OVXNetwork完成了所有OVXSwitch和控制器的连接时,才能进入 ACTIVE状态。此时的OVX对于tenant Controller而言是一个datapath。

本文未完,详情请查看原文

 了解更多请关注SDNLAB门户网站

官方微信互动平台

170509_ohTU_2249260.jpg

 


转载于:https://my.oschina.net/sdnlab/blog/338962

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值