基于Mininet的胖树SDN网络仿真

2018-03-02 19:21王德强王敢甫
软件 2017年9期
关键词:软件定义网络数据中心

王德强+王敢甫

摘要:相较于传统网络体系结构的僵化,软件定义网络(Software Defined Networking,SDN)架构可以更好地适应与满足当前复杂多变的网络需求。以采用胖树(Fat-tree)拓扑的数据中心网络为例,介绍如何采用SDN网络仿真软件

Mininet方便而快捷地部署SDN仿真环境,调整链路性能。可为数据中心的管理与部署提供参考,有利于简化数据中心网络的工作,加速应用上线。

关键词:软件定义网络;网络仿真;胖树拓扑;数据中心;链路性能

0 引言

软件定义网络(Software Defined Networking,SDN) 因其对僵化网络结构的解绑,可以简化网络部署与管理,有利于网络快速适应生产生活需求,从而快速地从理论进入实践。SDN概念白提出后,开始在如数据中心、广域网的部署升级中大量应用。同时,SDN网络也被科研、生产工作者广泛实验研究。然而一个完整的SDN网络至少需要控制器、OpenFlow交换机、终端结点等设备来构建,超出了大部分研究工作者所具备的实验条件。对此,如OpenNet、NS3、Mininet等仿真软件可以帮助研究者方便、快速地使用笔记本电脑等工具构建一个SDN网络仿真平台,并进行技术方案、功能扩展的验证。

Mininet的操作与拓扑建立相对方便,所建立拓扑的终端结点、交换机与调用的相关应用均由源码运行支持,仿真度较高,实验结果可以直接移植到实际环境。此外,Mininet对于基于OpenFlow协}义的SDN网络支持较好,适合于单机上建立SDN网络仿真。

数据中心是对SDN应用较快较广泛的地方,其最迫切地需求是为服务器群组提供高效的双向带宽互联,通常采用层次性多根网络拓扑,其中胖树(Fat-tree)结构因其简单易用而得到广泛应用。本文使用Mininet作为仿真T具,基于此构建如Top02的胖树结构的SDN网络进行仿真。

1 使用Mininet创建拓扑

使用Mininet创建拓扑有编写脚本创建拓扑或使用miniedit 工具创建拓扑两种常用方式。通过编写脚本创建拓扑可以实现更加精细的拓扑定义与自动化测试等功能;使用miniedit工具创建拓扑则可以通过视图,更加直观地创建网络拓扑,并可以在导出的拓扑脚本中添加命令,进一步精细化拓扑定义。

1.1 编写脚本建立拓扑

通过编写脚本创建拓扑是最常见的拓扑搭建方式。Mininet常使用Python语言编写拓扑脚本,表l给出了在编写脚本过程中会使用到的主要类:

除此之外,还有如记录日志的setLogLevel、info等类。若需要在脚本中调用终端命令,还需要导入call类。

导入合适的类后即可白定义拓扑,包括添加组件与建立连接。需要添加的组件包括终端结点、OpenFlow交换机、控制器等。在根据自身需求定义好拓扑后,调用CLI以便调试。例如,建立图l中的网络拓扑,所编写的Python脚本如图2。

Topol定义了包含一台控制器controller,两台OpenFlow交换机sl、s2,两台终端主机hl、h2的SDN网络。脚本运行后将自动创建topol的拓扑,并在创建完成后开启CLI以输入调试命令。在当前脚本基础上,用户可以在脚本中进一步根据自身需求精细化定义拓扑,提高仿真结果精度。

除了直接编写脚本定义拓扑的方式,用户还可以使用Mininet所提供的可视化工具miniedit来更直观的、便捷地建立拓撲。

1.2使用miniedit创建拓扑

miniedit是Mininet2.2.0版本起内置的一个可视化工具,位于安装目录下/mininet/examples/miniedit.py。用户可以使用miniedit工具,通过拖拽图标的方式搭建拓扑,并在通过运行测试后导出该拓扑的脚本。

在创建拓扑的过程中,还可以通过图标→右键→Properties来设置组件的属性,如控制器类型、交换机类型、终端结点IP、链路带宽等。如果需要使用到外部控制器,则控制器的Properties设置控制器类型为Remote Controller,并填写对应端口。完成拓扑搭建后在Edit→Perferences中选择是否调用CLI,所使用的OpenFlow版本等。

完成以上设置后即可运行拓扑以测试拓扑的搭建情况。在运行后若没有问题,可通过File-> Export Leve12Script导出所搭建拓扑的脚本。相较于直接编写脚本白定义拓扑,miniedit这个可视化工具更加的直观、便捷,提供的属性设置也较丰富,可以满足实验的通用需求。当然,研究者也可以通过修改导出的脚本以及Mininet相关模块实现更精细的拓扑搭建与更丰富的拓扑功能。

2 链路性能测试

2.1测试环境、工具与拓扑在拓扑创建完成后,可以使用相关工具进行链路性能的测试,以验证所构建的仿真环境是否符合设定。测试可以使用ping验证拓扑连通性,使用iperf测试带宽是否符合预设。

性能测试过程可以在拓扑建立后调用CLI,通过CLI接口手工测试;也可以将测试过程写入脚本中,自动运行出结果。需要注意的是,在拓扑刚建立时,由于控制器的流表来不及下发,可能会出现部分终端结点ping不通;而iperf测带宽的过程中,也会因QoS限制等原因出现带宽测试不准确或达不到所要需求的情况。因此,对于拓扑性能的测试最好是在流表下发之后进行。

这里,本文构建了一个4层次4端口交换机胖树拓扑(图3),并进行网络性能测试演示。仿真实验环境在虚拟机上构建,在VMware上创建一台Ubuntu虚拟机,并安装SDN控制器与Mininet仿真软件。具体配置如表2、3:

2.2 测试过程与结果endprint

2.2.1 连通性测试

在拓扑建立成功后,可以通过CLI或者白动化测试来调用pingall测试拓扑连通性。在控制器与OpenFlow交换机建立连接后,控制器将会默认学习拓扑,并随后响应OpenFlow交换机的询问,下发相应流表。但在拓扑刚建立完毕时,由于控制器对拓扑的学习与流表下发处理较慢,会出现部分结点ping不同的现象。对此,可以在ping测试前下发流表,以避免ping不同与链路带宽测试不准确的情况。连通性测试结果如图4,在控制器中显示拓扑效果如图5。在设计链路结点全部ping通后,即可进行带宽测试。

2.2.2 宽带性能测试

带宽性能测试的目的在于调整拓扑的带宽性能,让仿真的带宽性能尽可能符合设定值。带宽的设置可以在Mininet建立拓扑的过程中设置,如在miniedit中对新添加的链路设置右键→Properties→Bandwidth.或者在脚本中添加链接时使用如下代码设置链路:

h/s/={bw:10}

net.add Link(h1,sl,cls= TCLink,**hlsl)

其中{'bw:10}中的10为设置的带宽,单位Mbps,这样就可以设置链路hl-sl的带宽。除此之外,还可以在拓扑建立成功后,通过更改OpenFlow交换机的QoS来限速。但以上方法受限于Mininet仿真对链路转发的支持不够,并不能很准确的达到设置的带宽值,尤其是设置的带宽较大,如超过50Mbps时。因此,在拓扑建立后使用iperf来测试带宽是否符合预期并做调整就很有必要。

以图3所示胖树拓扑为例,分别测试主机hl与h2、h3、h5之间的链路带宽。按照下发的流表,这三条链路将分别最高接入层、汇聚层、核心层,通过交换机的数量为l、3、5台。其链路带宽测试结果如表4。

这里,实验平台分配了充足的CPU资源,使用了较大内存与固态硬盘,测试带宽未加限制,为极限带宽。因此,所测出的带宽较大,达到了30Gbps。而在不同硬件环境下的实验平台所能达到的极限速度也会有所差异,且因硬件差异,所测极限速度也会相差较大。对于仿真而言,这里所测得的极限速度意义不大,重要的是可以设置带宽为所需要的值。如在脚本中设置以上三条链路带宽为lOOMbps,测得结果如图6,与设计的带宽性能有仍有15%左右差距,。需要调整设置带宽为115Mbps时,其带宽性能才与设计值接近,如图7。

此外.由表4可以看出链路带宽随着链路通过交换机数量的增多而下降,但由于同处一个网段,不需跨网传输,因此波动不大。若需要使用UDP协议测试带宽,由于iperf对于UDP协议万兆网卡的支持不好,需要使用iperB来进行测试。使用iperf测试带宽时可以看到设定参数下的一些性能指标,如使用TCP协议测试带宽时的重传数,使用UDP协议测试带宽时的丢包率等,可以作为进一步细化链路性能的指标使用。

2.3 自動化测试

如果要编写脚本自动化测试,可以在脚本中调用以下命令来实现:

(1)下发流表:

在脚本中下发指定流表需要从subprocess模块导入call类,调用格式如下:

call(["ovs命令行工具","操作","交换机名","流表"

如为交换机sl添加一条流表:

call(["ovs-ofctl","add-flow","sl","piiorily=20,dl src=

00:00:00:00:00:01,actions=output:3"])

(2) Ping测试:

调用格式:

net.pingAll()或net.ping([测试主机列表])

(3)带宽测试:

调用格式:

net.iperf([测试主机列表],'协议','带宽',

'测试时长','端口')

如使用UDP协议,1000M带宽测试hl与h5之间的带宽:

net.iperf ([hl,h5],'UDP','100M') 以上命令需要在拓扑建立后的代码段中调用,若在脚本中下发相应流表后,ping测试与iperf测试将能更快进行,结果也更准确。

3 小结

本文通过实例介绍了如何使用Mininet快速便捷地创建SDN网络拓扑,并对所创建SDN网络进行性能测试与调整设置,以更贴近实验设计环境。在此基础上,研究者可以对控制器策略模块等进行修改以测试方案正确性,也可测试SDN环境下各类应用的性能和可行性。虽然Mininet对带宽的限制仍难以做到准确,但能降低对研究者实验环境的要求,因此,使用Mininet有利于SDN技术的发展与推广。endprint

猜你喜欢
软件定义网络数据中心
酒泉云计算大数据中心
数据中心制冷节能技术及应用
民航绿色云数据中心PUE控制
中国联通SDN的思考和应用实例
业务功能链技术及其应用探析
针对大规模软件定义网络的子域划分及控制器部署方法
一种新的SDN架构下端到端网络主动测量机制
基于云计算的交通运输数据中心实现与应用
Overlay Network技术在云计算数据中心中的应用