加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

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

发布时间:2018-09-08 20:50:17 所属栏目:业界 来源:老王学网络
导读:9月15日技术沙龙 | 与东华软件、AWS、京东金融、饿了么四位大咖探讨精准运维! 真实的SDN网络需要很多OpenFlow设备包括控制器、交换机、功能虚拟化等一系列设备共同依赖搭建并应用,但因条件有限,每一位实验者不可能有真实的环境来验证或者实验。使用Minin
副标题[/!--empirenews.page--] 9月15日技术沙龙 | 与东华软件、AWS、京东金融、饿了么四位大咖探讨精准运维!

真实的SDN网络需要很多OpenFlow设备包括控制器、交换机、功能虚拟化等一系列设备共同依赖搭建并应用,但因条件有限,每一位实验者不可能有真实的环境来验证或者实验。使用Mininet设计模拟不同网络数据中心拓扑,可以用来分析网络的总流量,而且此外,还可以通过负载均衡策略来保证数据中心的可用性。不同数据中心网络拓扑管理设计,主要是基于Fat-Tree拓扑来创建网络,Fat-Tree网络的好处是具有一个多层次的树状拓扑结构固有容错能力。

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

使用Mininet设计模拟一个多数据中心网络。用Mininet模拟仿真测试,主要是用Mininet中的OpenFlow交换机和自己提供的ODL控制器进行测试。一个简单的基于两个数据中心的网络拓扑,如图所示:

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

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

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

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

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

  1. #FatTree.py  
  2. """Customtopology example 
  3. Addingthe 'topos' dict with a key/value pair to generate our newly defined 
  4. topologyenables one to pass in '--topo=mytopo' from the command line. 
  5. """ 
  6.   
  7. frommininet.topo import Topo 
  8.   
  9. classMyTopo(Topo): 
  10.     "Simple topology example." 
  11.       def __init__(self): 
  12.          "create custom topo." 
  13.              #initializa topology 
  14.              Topo.__init__(self) 
  15.              L1 = 2 
  16.              L2 = L1 * 2 
  17.              L3 = L2 
  18.              cSwitch = [] 
  19.              aSwitch = [] 
  20.              eSwitch = [] 
  21.              
  22.          #add core ovs 
  23.          for i in range(L1): 
  24.                 sw = self.addSwitch('c{}'.format(i+1)) 
  25.                     cSwitch.append(sw) 
  26.              
  27.              #add aggregation ovs 
  28.              for i in range(L2): 
  29.                 sw = self.addSwitch('a{}'.format(L1 + i+1)) 
  30.                     aSwitch.append(sw) 
  31.                     
  32.              #add edge ovs 
  33.              for in range(L2): 
  34.                 sw = self.addSwitch('e{}'.format(L1 + L2 + i+1)) 
  35.                     eSwitch.append(sw) 
  36.                     
  37.              #add links between core aggregationovs 
  38.              for i in range(L1): 
  39.                 for j in range(L2): 
  40.                         # self.addLink(sw2, sw1, bw=10,delay='5ms', loss=10, max_queue_size=1000, use_htb=True) 
  41.                         link = self.addLink(cSwitch[i],aSwitch[j]) 
  42.                            
  43.              #add links between aggragation andedge ovs 
  44.              for i in range(L1): 
  45.                 for j in range(L1): 
  46.                         self.addLink(aSwitch[i],eSwitch[j]) 
  47.              
  48.              for i in range(L1): 
  49.                 for j in range(L1): 
  50.                         # self.addLink(sw2, sw1, bw=10,delay='5ms', loss=10, max_queue_size=1000, use_htb=True) 
  51.                         self.addLink(aSwitch[L1 + i],eSwitch[L1 +j]) 
  52.                            
  53.              #add hosts and its links with edgeovs 
  54.              count = 1 
  55.              for sw1 in eSwitch: 
  56.                 for i in range(L1): 
  57.                         host = self.addHost('h{}'.format(count)) 
  58.                            self.addLink(sw1,host) 
  59.                            count += 1 
  60.                            
  61. topos= {'mytopo':(lambda:MyTopo())} 

通过Mininet命令控制台进行手动输入命令测试验证,测试结果如下:

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读