APP下载

OpenFlow网络中虚拟网络分片的动态迁移

2013-07-23许逸飞

网络安全技术与应用 2013年9期
关键词:表项分片调用

许逸飞

(中国电信系统集成公司 北京 100035)

0 引言

在近年来飞速发展的数据中心技术中,虚拟化技术是一种底层的重要支撑技术。通过虚拟化,系统资源可以得到隔离,并且能够弹性和动态分配。然而,很多年来虚拟化技术的热点一直都在于计算机虚拟化,直到这两年数据中心规模急剧增大,多租户的问题更加严重,网络虚拟化才得到足够的重视。

传统TCP/IP网络经过30多年的发展已经过度僵化。同时,TCP/IP网络也无法提供很好的资源划分方法,这在当前的数据中心应用中都是十分严重的缺陷。【1】为了应对TCP/IP网络的挑战,学术界与工业界纷纷推出自己的标准来构建一种具备弹性、可操作的新型网络,如可编程ASIC技术【2】,juniper公司提出的QFabric架构【3】等。

OpenFlow网络是一种对于传统TCP/IP网络的升级与补充,是一种重要的SDN(软件定义网络)的解决方案【4】。它的基本思想是将网络的控制平面与数据平面互相分离,来实现集中的转发规则与网络拓扑的控制。

由于该特性,OpenFlow被广泛用于网络虚拟化技术。然而,目前的OpenFlow虚拟化网络仍然面临很多问题。如同计算机虚拟化一样,网络虚拟化应当具备伸缩性、弹性地分配资源的能力,实现这种能力,一个必备的机制是迁移机制。本文接下来的部分就会介绍通过修改一种主流的OpenFlow虚拟化层模块FlowVisor【5】来实现一种虚拟网络的迁移机制。

OpenFlow在2008年由斯坦福大学的clean slate项目组提出,是当今主流的SDN解决方案。传统的TCP/IP网络将进入交换设备的包在交换设备上确定转发规则。而OpenFlow由一个控制器决定转发规则,所有交换设备都连接到这个控制器上,并且部署控制器所确定的转发规则。

OpenFlow网络将进入交换设备的包的所有的包头进行通配。满足一系列特定要求的包为一个流,区别一个流可以通过一到四层网络的任何包头项,即:mac地址、IP地址、TCP端口号等。对于一个流,控制器可以在交换设备上部署一条规则来决定它的转发规则。此规则包含三部分:通配规则、转发规则和统计数据。【6】

FlowVisor是一种OpenFlow网络中的网络虚拟化层实现。在IaaS云平台中,不同租户的隔离与资源分配问题一直是一个重要课题。租户之间需要划分的资源不仅仅是计算和存储资源,也包括网络资源。通过FlowVisor,一个完整的OpenFlow网络可以划分成多个逻辑网络,每一个逻辑网络被称为一个分片(slice)。

FlowVisor对OpenFlow网络进行分片的主要资源包括:带宽,拓扑,流表项的个数,设备CPU。目前在系统中主要体现的是流表项个数和带宽。

对分片的区别是用流空间的概念来实现的,每一个流空间是一系列统配规则。与流表项不同的是它并没有转发规则。

对于进入交换设备的数据包,FlowVisor首先要将其拦截并且确定它属于哪一个分片。每一个分片都有其可见范围和权限,这需要交换设备对每个分片内的包进行改写。比如,一个分片内进行广播的包,离开交换设备时需要将广播域从整个网络改为该分片。

1 虚拟网络分片迁移机制设计

正如虚拟机的迁移,虚拟网络分片的迁移其本质是在透明与平滑的过程中,将在一定的物理设备上运行的系统迁移到新的设备上运行。在虚拟机的迁移过程中,我们需要迁移的包括CPU、虚拟内存、虚拟网卡等等资源【7】,与此类似,在进行更深入的研究之前,首先要明确需要迁移的资源包括哪些。

如前所述,FlowVisor对一个网络的如下几种资源进行了划分:①带宽。②最大流表项个数。③拓扑结构。④设备CPU占有率。

其中,带宽和最大流表项个数是通过一个叫做sliceLimits的数据结构规定的,拓扑结构是自然的,设备CPU的限制在当前版本中体现得并不明显。

我们的目标就是将一个虚拟网络分片在不修改其流量带宽和最大流表项个数的情况下,从原本的物理拓扑迁移到新的物理拓扑上。

另外,我们的迁移机制必须满足一些要求,包括:①迁移对每个网络分片的管理员必须是透明的。②迁移过程必须是安全的,保证迁移前后拓扑结构和物理带宽相同。③必须判断哪些节点是可迁移的,哪些节点是不可迁移的。

对于第一个要求,我们通过扩展FlowVisor的API来实现。只有FlowVisor管理员有权限进行迁移。迁移过程中,需要重写流空间,而不要求修改每个网络分片上运行的网络操作系统(NOX,floodlight等)的转发规则。

对于第二个和第三个要求,自动选择一个合法的网络分片进行迁移需要非常复杂的算法。当前我们采用比较简单的手工指定的方法,如果选择的新的分片无法满足要求则抛出异常。

2 虚拟网络分片迁移的实现

FlowVisor是一个事件驱动的系统,它对交换机和控制器之间的消息进行拦截和处理,分为两个模块,FVSlicer负责对进出控制器的消息进行处理,FVClassifier对进出交换设备的消息进行处理。他们的目的是让一个对用户来说全局可见的消息最终精确改写并发送到特定的分片交换机二元组上。

FVClassifier和FVSlicer都实现了两个函数,handleIOEvent和sendMsg。handleIOEvent是每次收到一条消息时触发,在进行改写之前,由它来确定如何改写,往往是调用调用classifyFromSwitch和sliceFromController两个函数进行改写,返回后调用sendMsg发送到交换设备或控制器上。FlowVisor对事件的处理流程如下:

图1 FlowVisor控制器与交换设备的事件处理逻辑

我们通过修改FlowVisor的代码来扩展出虚拟分片的迁移规则。需要实现两个功能:

1、把一个slice上的所有已经部署的规则迁移到另一个slice上。

2、保证新的分片可以与控制器交互,也就是说,控制器对自己原有拓扑结构的所有操作,都会被透明地重新定向到新的分片上。

由以上,虚拟分片迁移主要经过如下步骤:

1、新建一个分片,资源分配与之前的分片相同。

2、将新建的分片与原有分片各个交换设备一一匹配(也包括端口号和flow space的匹配),建立三个哈希表,key和value分别是源分片的所有交换设备和与之对应的新分片的资源。这一步骤主要是为之后复制流表项和链接提供条件。

3、将原有分片上所有的流表项复制到新分片上。在这里,需要实现一个通过FVClassifier和FVSlicer来获取一个交换机上属于一个分片的所有流表项的函数,我们在FVClassifier中实现,它返回一个FVFlowStatisticsReply列表,表示所有的流表项。在将源分片的流表项复制到新分片的过程中,需要检查所有匹配规则和操作所对应的资源是否需要用映射中的目的资源来取代。比如,在源分片中存在流表项:

在目的分片中要修改成:

其中,IPAddr_1和IPAddr_2是源分片与目的分片中对应的两个IP地址。

4、需要在虚拟化层将底层新分片的交换设备对上层暴露的信息修改为源分片的信息,并且对控制器发送到源分片的信息进行IP地址和端口的改写使他们对应到新分片的对应物理资源上。如之前的分析,在每一个message从源发送到目的地的过程中首先会被FVClassifier或FVSlicer拦截,并且调用handleIOEvent来确定是否需要进行改写与如何改写。所以,在我们的系统中,借鉴这种方法,在handleIOEvent中加入一个功能,判断是否需要对目的地进行改写。为了实现这个目的,设计了如下机制:

(1)在迁移完成后,不删除源分片,而是删除上面所有的流表项和流空间,并且在FVSlicer这一数据结构内加入一个字段,叫做isZombie。如果一个分片被迁移,则它所对应的所有FVSlicer将isZombie设置为true。另外加入一个字段redirection,指向在迁移过程中与其对应的新的FVSlicer。此外,我们还需要建立在该FVSlicer和迁移后的FVSlicer中的具体端口和两个分片的对应关系。如之前所述建立三个哈希表,将规则按照哈希表中的对应关系复制到新的FVSlicer中。需要指出的是,这是一种暂行的低效方法,未来需要有一种彻底的改写方式,而非仅仅依靠这种伪装方法。

(2)在FVSlicer的handleIOEvent中加入代码判断它是否为zombie slicer,如果是,则需要调用其redirection的handleIOEvent。在调用之前对该信息进行改写,改写逻辑与之前的复制逻辑相同。改写结束后调用其redirection的handleIOEvent。

(3)与FVSlicer类似,在FVClassifier中也设置一个isRedirectable字段,与FVSlicer中的isZombie对应。收到控制器发送的消息时处理过程与FVSlicer互逆,不再赘述。

3 实验与分析

为了验证这套机制是否有效,本文设计了如下实验:

首先,建立了一个简单的OpenFlow网络,其拓扑结构如下:

图2 虚拟网络分片迁移实验拓扑

拓扑结构如上图的网络中,定义两个分片,slice1包括S1,S2,S3,S6,slice2包括S1,S4,S5,S6。首先,S1向S6发送一个无终止的ping命令,我们在S1中预设一个流,并且关闭S4与S1的连接,保证ICMP包的链路路径为:S1-S2-S3-S6,迁移后为S1-S4-S5-S6。在实验过程中,我们用S1发送ping命令到S6,然后发送迁移指令,节点的对应关系为(S2,S4)和(S3,S5)。在S1上运行tcpdump,观察迁移前后ICMP包的转发路径。此外,为了验证新的规则能否正确部署到迁移后的分片上,在控制器端给S6增加一条规则,丢弃所有的源地址为S1的IP地址的包,验证ping的ICMP流量是否停止。结果证明我们设计的迁移机制没有停机时间,并且所有迁移都成功进行。并且新增丢弃原地址为S1的包的命令后,发现ping命令的流量停止。

4 结论

通过上述方法,本文成功实现了OpenFlow网络中基于FlowVisor网络虚拟化层的虚拟网络分片迁移。

在成文过程中,对于迁移后的废弃分片,本文采用了对其进行标示并且进行重定向的方法,这是一种不完全并且相对低效的方法,在接下来的工作中,可以通过修改FlowVisor底层代码实现对交换设备端口虚拟化的方式,来实现一种根本的重定向机制。

此外,由于缺少实际物理环境,本文的测试都在虚拟环境中完成,希望在未来的相关工作中能够在生产环境下部署该应用并且测试结果。

在虚拟化数据中心中,网络的划分问题一直是一个十分关键的核心问题。SDN技术能够给虚拟化数据中心网络架构的部署提供弹性,对每一个用户提供可自定义的安全可控的网络。但是目前的数据中心中网络架构一旦确定很难动态更改。如同虚拟机的动态迁移一样,虚拟网络的动态迁移可以带来一系列好处,包括:物理资源升级无宕机时间、收到攻击时保证业务连续性、新用户加入时可以动态扩容等。本文中所讨论的虚拟网络迁移技术,在未来的数据中心组网中可以提供一种更加动态、安全的思路。

[1]Rodrigues H,Santos J R,Turner Y,et al.Gatekeeper: Supporting bandwidth guarantees for multi-tenant datacenter networks[J].USENIX WIOV,2011.

[2]Watkins D.Programmable ASIC: U.S.Patent 6,588,006[P].2003-7-1.

[3]Poellabauer C.Q-fabric: system support for continuous online quality management[J].2004.

[4]McKeown N,Anderson T,Balakrishnan H,et al.OpenFlow:enabling innovation in campus networks[J].ACM SIGCOMM Computer Communication Review,2008,38(2): 69-74.

[5]Sherwood R,Gibb G,Yap K K,et al.FlowVisor: A network virtualization layer[J].OpenFlow Switch Consortium,Tech.Rep,2009.

[6]OpenFlow Switch Consortium.OpenFlow Switch Specification Version 1.3.0[J].2012.

[7]Clark C,Fraser K,Hand S,et al.Live migration of virtual machines[C]//Proceedings of the 2nd conference on Symposium on Networked Systems Design & Implementation-Volume 2.USENIX Association,2005: 273-286.

猜你喜欢

表项分片调用
上下分片與詞的時空佈局
一种改进的TCAM路由表项管理算法及实现
分片光滑边值问题的再生核方法
CDN存量MP4视频播放优化方法
基于ARMA模型预测的交换机流表更新算法
核电项目物项调用管理的应用研究
基于模糊二分查找的帧分片算法设计与实现
SDN数据中心网络基于流表项转换的流表调度优化
基于系统调用的恶意软件检测技术研究
利用RFC技术实现SAP系统接口通信