2019 SDNの主要なオペレーション - ネットワークトポロジ構造に接続され、データセンターのタイプと
比例貢献
学生ID | 割合 |
---|---|
031702345 | 28% |
031702311 | 18% |
031702428 | 18% |
031702309 | 18% |
131700101 | 18% |
実験の概要
二つの相互バックアップセンタースイッチ
合計で相互バックアップ接続二十から二4つのスイッチ
次いで、2つのホストがスイッチに接続された四つのグループのそれぞれ
小型の実現のデータセンターのタイプのネットワークトポロジとして、
上段、中段及び下層階級は、より多くのネットワークホストのサポートを実装するために拡張することができます
ネットワークセンターエリアネットワークの停止中に、単一のデバイスによる誤動作を防ぐために実装
ラボトポロジ
実験トポロジは、以下の
図面minieditを
NSPによって描かれました
実験的なネットワークを構築
次のような手順である確立
1.リモコンとしてOpenDayLigthtを回すか、あるいはmininetを実行するコントローラに接続することはできません
このような操作コードのような2ランmininetビルドトポロジ、sudo mn --custom datacenter.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow13
3. [ http://127.0.0.1:8181/index.html#/topology
トポロジを表示します
髪のフローテーブルの基礎としてmininet取得ネットワークインタフェース情報でネットを入力します
Pythonコードトポロジmininetは次のとおりです。
#!/usr/bin/python
#创建网络拓扑
"""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.
"""
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import RemoteController,CPULimitedHost
from mininet.link import TCLink
from mininet.util import dumpNodeConnections
class MyTopo( 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
for i in range( L1 ):
sw = self.addSwitch( 'c{}'.format( i + 1 ) )
c.append( sw )
# add aggregation ovs
for i in range( L2 ):
sw = self.addSwitch( 'a{}'.format( L1 + i + 1 ) )
a.append( sw )
# add edge ovs
for i in range( L3 ):
sw = self.addSwitch( 'e{}'.format( L1 + L2 + i + 1 ) )
e.append( sw )
# add links between core and aggregation ovs
for i 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
for i in range( 0, L2, 2 ):
for sw1 in a[i:i+2]:
for sw2 in e[i:i+2]:
self.addLink( sw2, sw1 )
#add hosts and its links with edge ovs
count = 1
for sw1 in e:
for i in range(2):
host = self.addHost( 'h{}'.format( count ) )
self.addLink( sw1, host )
count += 1
topos = { 'mytopo': ( lambda: MyTopo() ) }
OpenDayLigthtリモコンコード次のように
コンソールでの最初の実行./karaf
開放容器
そして、マウント機能の順序を次の
install odl-restconf
install odl-l2switch-switch-ui
install odl-openflowplugin-all
install odl-mdsal-apidocs
install odl-dlux-core
install odl-dlux-node
install odl-dlux-yangui
終了する前に実行logout
終了を
動作後の図では見えトポロジYangUI。
ノード番号と次の表の関係のノード名(負荷に失敗したすべての理由アウト負荷)
発行された初期の流れ接続リンクテーブル
すべてのフローエントリを空に1
sudo ovs-ofctl -O Openflow13 del-flows c1
sudo ovs-ofctl -O Openflow13 del-flows c2
sudo ovs-ofctl -O Openflow13 del-flows a3
sudo ovs-ofctl -O Openflow13 del-flows a4
sudo ovs-ofctl -O Openflow13 del-flows a5
sudo ovs-ofctl -O Openflow13 del-flows a6
sudo ovs-ofctl -O Openflow13 del-flows e7
sudo ovs-ofctl -O Openflow13 del-flows e8
sudo ovs-ofctl -O Openflow13 del-flows e9
sudo ovs-ofctl -O Openflow13 del-flows e10
2.層状テーブル発行
#e7
sudo ovs-ofctl -O OpenFlow13 add-flow e7 priority=2,in_port=1,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow e7 priority=2,in_port=2,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow e7 priority=2,in_port=3,actions=output:1,output:2,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow e7 priority=2,in_port=4,actions=output:1,output:2,output:3
#e8
sudo ovs-ofctl -O OpenFlow13 add-flow e8 priority=2,in_port=1,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow e8 priority=2,in_port=2,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow e8 priority=2,in_port=3,actions=output:1,output:2,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow e8 priority=2,in_port=4,actions=output:1,output:2,output:3
#e9
sudo ovs-ofctl -O OpenFlow13 add-flow e9 priority=2,in_port=1,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow e9 priority=2,in_port=2,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow e9 priority=2,in_port=3,actions=output:1,output:2,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow e9 priority=2,in_port=4,actions=output:1,output:2,output:3
#e10
sudo ovs-ofctl -O OpenFlow13 add-flow e10 priority=2,in_port=1,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow e10 priority=2,in_port=2,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow e10 priority=2,in_port=3,actions=output:1,output:2,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow e10 priority=2,in_port=4,actions=output:1,output:2,output:3
発行した3層流テーブル
#a3
sudo ovs-ofctl -O OpenFlow13 add-flow a3 priority=2,in_port=1,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow a3 priority=2,in_port=2,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow a3 priority=2,in_port=3,actions=output:1,output:2,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow a3 priority=2,in_port=4,actions=output:1,output:2,output:3
#a4
sudo ovs-ofctl -O OpenFlow13 add-flow a4 priority=2,in_port=1,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow a4 priority=2,in_port=2,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow a4 priority=2,in_port=3,actions=output:1,output:2,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow a4 priority=2,in_port=4,actions=output:1,output:2,output:3
#a5
sudo ovs-ofctl -O OpenFlow13 add-flow a5 priority=2,in_port=1,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow a5 priority=2,in_port=2,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow a5 priority=2,in_port=3,actions=output:1,output:2,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow a5 priority=2,in_port=4,actions=output:1,output:2,output:3
#a6
sudo ovs-ofctl -O OpenFlow13 add-flow a6 priority=2,in_port=1,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow a6 priority=2,in_port=2,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow a6 priority=2,in_port=3,actions=output:1,output:2,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow a6 priority=2,in_port=4,actions=output:1,output:2,output:3
上側のフローテーブルを適用します。4.
#c1
sudo ovs-ofctl -O OpenFlow13 add-flow c1 priority=2,in_port=1,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow c1 priority=2,in_port=2,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow c1 priority=2,in_port=3,actions=output:1,output:2
sudo ovs-ofctl -O OpenFlow13 add-flow c1 priority=2,in_port=4,actions=output:1,output:2
#c2
sudo ovs-ofctl -O OpenFlow13 add-flow c2 priority=2,in_port=1,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow c2 priority=2,in_port=2,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow c2 priority=2,in_port=3,actions=output:1,output:2
sudo ovs-ofctl -O OpenFlow13 add-flow c2 priority=2,in_port=4,actions=output:1,output:2
5.シェル・ドキュメントにカプセル化上記のコードが発行されたキーを実装し、フローテーブルを空にすることができます
テストリンクの可用性
pingall 1.ファイル名を指定して実行コマンドmininet
これは、リンクが正常に接続されていることを示します
2. OpenDayLigthtトポロジマップは明らかにそのすべてのクライアントを見ることができます
iperfのリンク性能試験
H1 H2接続テスト:
私たちは、帯域幅9.92Gbits /秒を見ることができます
H1 H3接続テスト:
私たちは、帯域幅2.41Gbits /秒を見ることができます
H1接続H8試験:
私たちは、122Mbits /秒の帯域幅を見ることができます
结论是随着跨交换机网络的转发,性能随着跨交换机网络而减弱,解决方法是用分时间片的方法来负载均衡。
负载均衡的实现
通过将某段时间流表设置成c1,a3,a5一组和c2,a4,a6一组来达到交换机的负载均衡,以提高性能。
负载均衡后再次执行链路性能测试
h1连接h2因为没有链路变化所以带宽基本不变
h1连接h3可以看到带宽从2.41Gbit/sec提高到了3.87Gbit/sec
h1连接h8可以看到带宽从122Mbit/sec提升到了292Mbit/sec
成组打开并关闭代码:
import os
import time
def runteam1():
os.system("./addt1.sh")
time.sleep(1)
os.system("./delt2.sh")
return 1;
def runteam2():
os.system("./addt2.sh")
time.sleep(1)
os.system("./delt1.sh")
return 1;
os.system("./delflows.sh")
os.system("./inite.sh")
while(True):
runteam1()
runteam2()
addt1.sh代码:
#c1
sudo ovs-ofctl -O OpenFlow13 add-flow c1 priority=2,in_port=1,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow c1 priority=2,in_port=2,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow c1 priority=2,in_port=3,actions=output:1,output:2
sudo ovs-ofctl -O OpenFlow13 add-flow c1 priority=2,in_port=4,actions=output:1,output:2
#a3
sudo ovs-ofctl -O OpenFlow13 add-flow a3 priority=2,in_port=1,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow a3 priority=2,in_port=2,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow a3 priority=2,in_port=3,actions=output:1,output:2,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow a3 priority=2,in_port=4,actions=output:1,output:2,output:3
#a5
sudo ovs-ofctl -O OpenFlow13 add-flow a5 priority=2,in_port=1,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow a5 priority=2,in_port=2,actions=output:3,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow a5 priority=2,in_port=3,actions=output:1,output:2,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow a5 priority=2,in_port=4,actions=output:1,output:2,output:3
delt1.sh代码:
sudo ovs-ofctl -O Openflow13 del-flows c1
sudo ovs-ofctl -O Openflow13 del-flows a3
sudo ovs-ofctl -O Openflow13 del-flows a5
addt2.sh、delt2.sh、inite.sh、delflows.sh的代码和上述示例十分接近,故不在赘述
本次实验因为是在本机进行,所以使用的是ovs-ofctl命令,若要进行远程的流表的下发,则需要使用Restful接口远程下发流表,下发内容与以上近似。
实验总结
经过本次实验,对OpenFlow、Mininet、OpenDayLight、OVS控制器等有了更加深入的理解,对软件定义网络也更加熟悉和清晰。
代码链接
https://github.com/opsiff/SDNExample