您的位置:首页 > 理论基础 > 计算机网络

Mininet模拟不同数据中心的网络拓扑

2016-01-19 09:46 579 查看
转自:sdnlab http://blog.itpub.net/29943020/viewspace-1368008/
真实的SDN网络需要很多OpenFlow设备包括控制器、交换机、功能虚拟化等一系列设备共同依赖来搭建并应用,但因条件有限,每一位实验者不可能有这样真实的环境来验证或者实验,此文将主要介绍在没有OpenFlow硬件设备下模拟搭建通过Mininet基于不同数据中心的网络拓扑。使用Mininet设计模拟不同网络数据中心拓扑,可以用来分析网络的总流量,而且除此之外,还可以通过负载均衡策略来保证数据中心的可用性。不同数据中心网络拓扑管理设计,主要是基于胖树(Fat-Tree)拓扑创建网络,胖树网络的好处是具有一个多层次的树状拓扑结构固有的容错能力。

1 Mininet实例模拟
1.1实验目的
1. 掌握多数据中心网络拓扑的构建;
2. 掌握多数据中心数据交换过程。
1.2 实例介绍
基于树型拓扑类创建弹性的树状网络能够展现多层次的树型拓扑结构固有的容错能力。假设每层具有不同的级别,具体分为:核心层、汇聚层、边缘层,每一层都只含有交换机。因此,一个简单的交换机/主机层网络可以由核心交换机、汇聚交换机、边缘交换机以及主机组成,也可以根据扇出大小来配置不同的数据中心网络拓扑。在该拓扑中,一个或多个核心交换机构成根;汇聚交换机的一层或多层位于树的中间;终端主机连接至顶端交换机,形成了树的叶子(边缘)。
当拓扑创建完成后,本实例的主要目的是实现交换机下挂主机间的连通。实现过程如下:主机间发送消息上报给交换机,交换机对收到的报文信息进行分析判断,如果交换机中存在此消息相对应的流表,则交换机直接下发流表,将报文消息转发给目的主机;如果交换机中没有消息相对应的流表,交换机将此发送消息给控制器,控制器根net据消息分析关键字段内容,进行流表下发决策,交换机再将消息发送给目的主机,实现主机间达到通信的目的。
1.3 实例模拟拓扑
使用Mininet设计模拟一个多数据中心网络。用Mininet模拟仿真测试,主要是用Mininet中的OpenFlow交换机和自己提供的POX控制器进行测试,帮助在真实数据中心和仿真测试床数据中心提供有用的信息评估不同数据中心的网络性能应用性能。一个简单的基于两个数据中心的网络拓扑,如图所示:



图 基于两个数据中心的网络拓扑
具体主要测试及验证交换机下挂主机间的连通性以及主机间通信收发数据包的速度。Mininet中自带的iperf性能测试工具可以测试不同主机间通信的性能带宽质量,在此例中,主要是对相同边缘交换机下的主机间、相同聚合交换机下不同边缘交换机间、相同核心交换机不同聚合交换机下的主机间进行测试。

1.2实例代码
在此实验中,使用Mininet通过python自定义拓扑编写脚本创建两个数据中心的网络拓扑,且使用已准备的POX控制器(IP地址为192.168.5.104)进行管控。

应用Mininet创建两个数据中心的网络拓扑设计的脚本代码如下:

# FatTree.py
"""Custom topology example
Adding the 'topos' dict with a key/value pair to generate our newly defined
topology enables one to pass in '--topo=mytopo' from the command line.
"""

frommininet.topo import Topo

classMyTopo( Topo ):
"Simple topology example."

def __init__( self ):
"Create custom topo."

# Initialize topology
Topo.__init__( self )
L1 = 2
L2 = L1 * 2
L3 = L2
c = []
a = []
e = []

# add core ovs
fori in range( L1 ):
sw = self.addSwitch( 'c{}'.format( i + 1 ) )
c.append(sw )

# add aggregation ovs
fori in range( L2 ):
sw = self.addSwitch( 'a{}'.format( L1 + i + 1 ) )
a.append(sw )

# add edge ovs
fori in range( L3 ):
sw = self.addSwitch( 'e{}'.format( L1 + L2 + i + 1 ) )
e.append(sw )

# add links between core and aggregation ovs
fori in range( L1 ):
sw1 = c[i]
for sw2 in a[i/2::L1/2]:
# self.addLink(sw2, sw1, bw=10, delay='5ms', loss=10, max_queue_size=1000, use_htb=True)
self.addLink( sw2, sw1 )

# add links between aggregation and edge ovs
fori in range( 0, L2, 2 ):
for sw1 in a[i:i+2]:
for sw2 in e[i:i+2]:
# self.addLink(sw2, sw1, bw=10, delay='5ms', loss=10, max_queue_size=1000, use_htb=True)
self.addLink( sw2, sw1 )

#add hosts and its links with edge ovs
count = 1
for sw1 in e:
fori in range(2):
host = self.addHost( 'h{}'.format( count ) )
self.addLink( sw1, host )
count += 1
topos = { 'mytopo': ( lambda: MyTopo() ) }
在代码中可以通过L1变量扩来改变核心交换机的数量,继而改变整个数据中心的网络拓扑,使之交换机数量改变后,边缘交换机数量也会改变,主机个数也随之改变,应用Mininet的易用可扩展性,生成多个不同数据中心的网络拓扑,可以实现更好更高效率的全局统配。

拓扑创建代码完成后,可以在Mininet命令行操作界面通过ping操作和iperf命令进一步验证主机间的连通性以及性能带宽分析,也可以通过编写测试脚本应用Mininet的操作命令进行全自动化测试连通性及性能带宽质量,代码如下:

defsimpleTest():
"Create and test a simple network"
topo = MyTopo()
net = Mininet( topo, controller=RemoteController, host=CPULimitedHost, link=TCLink )
net.addController( 'c0', controller=RemoteController, ip='192.168.5.104', port=6633 )
net.start()
print "Dumping host connections"
dumpNodeConnections(net.hosts )
print "Testing network connectivity"
net.pingall()
print "Testing bandwidth between h1 with h2, h3, h5"
h1, h2 = net.get( 'h1', 'h2' )
net.iperf( ( h1, h2 ) )
h1, h3 = net.get( 'h1', 'h3' )
net.iperf( ( h1, h3 ) )
h1, h5 = net.get( 'h1', 'h5' )
net.iperf( ( h1, h5 ) )
net.stop()

if __name__ == '__main__':
# Tellmininet to print useful information
setLogLevel( 'info' )
simpleTest()
self.addLink( Switch1, Switch2 )
通过测试脚本,验证所有主机的连通性测试以及各主机间的带宽性能测试。使用iperf指定特定两个主机进行测试并显示测试结果。

1.3实验结果
本次实验中应用Mininet模拟不同数据中心的网络拓扑,如上述拓扑所示,除上面的测试脚本外,也可以通过Mininet命令控制台进行手动输入命令测试验证或通过实例开发中的测试脚本进行主机间的连通性及性能带宽进行验证,测试结果如下:

通过Mininet手动操作命令创建拓扑:

sudomn--custom ~/mininet/custom/FatTree.py --topo mytopo–controller=remote,ip=192.168.5.104,port=6633
1.同一交换机内部的主机间连通性及通信带宽测试: h1和h2之间进行ping操作,经验证主机间能够ping通。当操作iperf h1 h2 命令时,h1和h2的带宽性能测试结果为:测试TCP带宽发送数据的速率为102 Mbit/s,接收数据的速率为102 Mbit/s。

2.相同汇聚交换机下不同机架的主机间测试: h1和h3之间进行ping操作,经验证,两主机间能够通信。h1和h3的带宽性能测试结果为:测试TCP带宽发送数据的速率为49.9 Mbit/s,接收数据的速率为49.9 Mbit/s。

3.相同核心交换机不同汇聚交换机下的主机间测试:h1和h5主机在相同汇聚同核心交换机不同汇聚交换机下,h1和h5之间进行ping操作,经验证,两主机间能够通信。h1和h5的带宽性能测试结果为:测试TCP带宽发送数据的速率为40.1Mbit/s,接收数据的速率为40.1Mbit/s。

本文来源于SDNLAB,可点击此阅读原文。如果您对本文感兴趣,可参与以下互动方式与作者近距离交流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: