使用 Mininet 设计模拟一个多数据中心网络. 用 Mininet 模拟仿真测试, 主要是用 Mininet 中的 OpenFlow 交换机和自己提供的 ODL 控制器进行测试.
真实的 SDN 网络需要很多 OpenFlow 设备包括控制器, 交换机, 功能虚拟化等一系列设备共同依赖搭建并应用, 但因条件有限, 每一位实验者不可能有真实的环境来验证或者实验. 使用 Mininet 设计模拟不同网络数据中心拓扑, 可以用来分析网络的总流量, 而且此外, 还可以通过负载均衡策略来保证数据中心的可用性. 不同数据中心网络拓扑管理设计, 主要是基于 Fat-Tree 拓扑来创建网络, Fat-Tree 网络的好处是具有一个多层次的树状拓扑结构固有容错能力.
使用 Mininet 设计模拟一个多数据中心网络. 用 Mininet 模拟仿真测试, 主要是用 Mininet 中的 OpenFlow 交换机和自己提供的 ODL 控制器进行测试. 一个简单的基于两个数据中心的网络拓扑, 如图所示:
具有主要测试及验证交换机下挂主机间的连通性以及主机间收发数据包的速度. Mininet 中自带的 iperf 性能测试工具可以测试不同主机间通信的性能带宽质量, 在此例中, 主要是对相同边缘交换机下的主机间, 相同聚合交换机下不同边缘交换机间, 相同核心交换机不同聚合交换机下的主机间进行测试.
在此实验中, 使用 Mininet 通过 python 自定义拓扑编写脚本创建两个数据中心的网络拓扑, 且使用已准备的 POX 控制器 (IP 地址为 192.168.28.131) 进行管控.
应用 Mininet 创建两个数据中心的网络拓扑设计的脚本代码如下:
拓扑创建代码完成后, 可以在 Mininet 命令行操作界面通过 ping 操作和 iperf 命令进一步验证主机间的连通性以及性能带宽分析, 也可以通过编写测试脚本应用 Mininet 的操作命令进行全自动化测试连通性及性能带宽质量, 代码如下:
- #FatTree.py
- """Customtopology example
- Addingthe 'topos' dict with a key/value pair to generate our newly defined
- topologyenables 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."
- #initializa topology
- Topo.__init__(self)
- L1 = 2
- L2 = L1 * 2
- L3 = L2
- cSwitch = []
- aSwitch = []
- eSwitch = []
- #add core ovs
- for i in range(L1):
- sw = self.addSwitch('c{}'.format(i+1))
- cSwitch.append(sw)
- #add aggregation ovs
- for i in range(L2):
- sw = self.addSwitch('a{}'.format(L1 + i+1))
- aSwitch.append(sw)
- #add edge ovs
- for in range(L2):
- sw = self.addSwitch('e{}'.format(L1 + L2 + i+1))
- eSwitch.append(sw)
- #add links between core aggregationovs
- for i in range(L1):
- for j in range(L2):
- # self.addLink(sw2, sw1, bw=10,delay='5ms', loss=10, max_queue_size=1000, use_htb=True)
- link = self.addLink(cSwitch[i],aSwitch[j])
- #add links between aggragation andedge ovs
- for i in range(L1):
- for j in range(L1):
- self.addLink(aSwitch[i],eSwitch[j])
- for i in range(L1):
- for j in range(L1):
- # self.addLink(sw2, sw1, bw=10,delay='5ms', loss=10, max_queue_size=1000, use_htb=True)
- self.addLink(aSwitch[L1 + i],eSwitch[L1 +j])
- #add hosts and its links with edgeovs
- count = 1
- for sw1 in eSwitch:
- for i in range(L1):
- host = self.addHost('h{}'.format(count))
- self.addLink(sw1,host)
- count += 1
- topos= {'mytopo':(lambda:MyTopo())}
通过 Mininet 命令控制台进行手动输入命令测试验证, 测试结果如下:
通过 Mininet 手动操作命令创建拓扑:
root@ubuntu:/home/wr/study/sdn#mn --custom FatTree.py --topo mytopo--controller=remote,ip=192.168.28.131,port=6633
1, 同一交换机内部的主机间连通性及通信带宽测试: h1 和 h2 之间进行 ping 操作. 经验证主机间能够 ping 通. 当操作 iperfh1 h2 命令时, h1 和 h2 的带宽性能测试结果为: 测试 TCP 带宽发送数据的速率为 16.1Gbit/s, 接收数据的速率为 16.1Gbit/s.
2, 相同汇聚交换机下不同机架的主机测试: h1 和 h3 之间进行 ping 操作, 经验证, 两主机间能够通信. h1 和 h3 的带宽性能测试结果为: 测试 TCP 带宽发送数据的速率为 91.6 Mbit/s, 接收数据的速率为 98.0Mbit/s.
3, 相同核心交换机不同汇聚交换机下的主机间测试: h1 和 h5 主机在相同核心交换机不同汇聚交换机下, h1 和 h5 之间进行 ping 操作, 经验证, 两个主机间能够通信. h1 和 h5 的带宽性能测试结果为: 测试 TCP 带宽发送数据的速率为 73.7Mbit/s, 接收数据的速率为 79.3Mbit/s.
来源: http://server.51cto.com/Datacenter-582934.htm