mininet+FlowVisor+OpenDayLight環境搭建及實驗一

*注:這是我在學習時整理的筆記,包含我遇到的問題已經一些需要注意的點。轉載請標明出處並附上原文連接,謝謝!http://blog.csdn.net/sherkyoung/article/details/38405907

1 mininet+FlowVisor+ODL

mininetFlowVisorODL連接起來進行實驗

1.1 mininet

Mininet作爲一個輕量級軟定義網絡研發和測試平臺,其主要特性包括:

1)靈活性。可通過軟件的方式簡單、迅速地創建一個用戶自定義的網絡拓撲,縮短開發測試周期,支持系統級的還原測試,且提供Python API,簡單易用;

2)可移植性。Mininet支持OpenFlowOVS等軟件定義網絡部件,在Mininet上運行的代碼可以輕鬆移植到支持OpenFlow的硬件設備上;

3)可擴展性。在一臺電腦上模擬的網絡規模可以輕鬆擴展到成百上千個節點;

4)真實性。模擬真實網絡環境,運行實際的網絡協議棧,實時管理和配置網絡,可以運行真實的程序,在Linux上運行的程序基本上都可以在Mininet上運行,如Wireshark

5)共享性。實現的原型系統可共享,任何人都可以在自己的筆記本上運行和開發自己的系統。

1.1.1安裝

mininet的安裝有三種方法一種是下載mininet虛擬機鏡像文件安裝一個虛擬機,一種是下載源代碼進行編譯安裝,最後一種是通過命令行安裝。這裏選用第三種安裝方式:輸入如下命令進行安裝:

$sudo apt-get install mininet

如果之前安裝過openvswitch將會報錯,這是只需要輸入以下命令刪除ovs殘存文件即可:

$sudo rm /usr/local/bin/ovs*

解決完錯誤之後再輸入安裝mininet的命令便不再報錯,但是使用mn創建命令的時會在報錯,提示6633端口已被佔用。這是因爲mininet安裝完畢之後會自行啓動,輸入以下命令關閉服務:

$sudo service openvswitch-controller stop

Miniet同時也是開機自啓動,關閉自啓動:

$sudo update-rc.d openvswitch-controller disable

這是在用mininet的創建命令就沒有任何問題了:

$sudo mn --controller,ip=172.168.1.2,port=6633

(此處的IP地址運行floodlight控制器的機器的IP地址,請根據自己的情況自行修改)

1.1.2 mininet啓動

mininet必須用root身份啓動:

$sudo mn

這樣使用默認方式創建虛擬網絡,默認情況下創建一個交換機(s1),兩個主機(h1h2)。當mininet指定或不指定遠程控制器的時候,h1h2之間都是可以ping通的,如圖:

 

1.1.3 Mininet連接到遠程控制器:

輸入如下命令啓動控制器

$sudo mn --controller=remote,ip=192.168.119.130,port=6633

注意此處的IP爲已經啓動的odl控制器所在主機的ip地址,端口號是控制器默認的web端口。

下圖爲mininet連接到遠程控制器時,瀏覽器登錄http:\\localhost:8080\顯示的網絡拓撲結構:

 

 

1.1.4 Mininet命令:

1)設置拓撲

--topo用於指定OpenFlow的網絡拓撲。Mininet已經爲大多數應用實現了五種類型的OpenFlow網絡拓撲,分別爲:treesinglereversedlinearminimal默認情況下,創建的是minimal拓撲。

設置自定義拓撲

--custom:在上述已有拓撲的基礎上,Mininet支持自定義拓撲,使用一個簡單的Python API即可,例如導入自定義的mytopo

$sudo mn --custom ~/mininet/custom/topo-2sw-2host.py –topo mytopo --test pingall 

2)設置交換機

--switch:可以有三類openflow交換機,分別是:kernel內核狀態、user用戶狀態以及ovsk Open vSwith狀態。當然kernerovsk的性能和吞吐量會高一些,通過運行命令

$sudo mn –switch ovsk –test iperf

可以進行iperf的測試結果得知。

3)設置控制器

--controller:通過參數設置的控制器可以是Mininet默認的控制器、NOX或者虛擬機之外的遠端控制器,如FloodlightPOX以及NOX等控制器都可以使用,指定遠端控制器的方法如下:

$sudo mn --controller=remote,ip=[controller IP],port=[controllerlistening port]

4)設置MAC地址

--mac:通過設置MAC地址的作用是增強設備MAC地址的易讀性,即將交換機和主機的MAC地址設置爲一個較小的、唯一的、易讀的ID,以便在後續工作中減少對設備識別的難度。

5)設置主機類型

--host:主機類型只要有兩種類型,分別是默認的Host類型以及CPULimitedHost類型,其中CPULimitedHost類型用於將CPU的部分資源分配給虛擬主機使用。

6)設置鏈路屬性

--link:鏈路屬性可以是默認LinkTCLink。將鏈路類型指定爲tc後,可以進一步指定具體參數。具體參數如下命令顯示:

--link tc,bw=<>,delay=<>,loss=<>,max_que_size=<>

bw表示鏈路帶寬,使用 Mb/s爲單位表示;時延delay以字符串形式表示,如'5ms'、 '100us''1s'loss表示數據丟包率的百分比,用0100之間的一個百分數表示;max_queue_size表示最大排隊長度,使用數據包的數量表示。

創建Mininet拓撲成功後,一般可用nodesdumpnet等基本命令查看詳細信息。

常用CLI命令

功能

dump

打印節點信息

gterm

給定節點上開啓gnome‐terminal

xterm

給定節點上開啓xterm

intfs

列出所有的網絡接口

iperf

兩個節點之間進行簡單的iperf TCP測試

iperfudp

兩個節點之間用指定帶寬udp進行測試

net

顯示網絡連接情況

noecho

運行交互式窗口,關閉迴應(echoing

pingpair

在前兩個主機之間互ping測試

source

從外部文件中讀入命令

dpctl

在所有交換機上用dptcl 執行相關命令,本地爲tcp 127.0.0.1:6634

link

禁用或啓用兩個節點之間的鏈路

nodes

列出所有的節點信息

pingall

所有host節點之間互ping

py

執行python表達式

sh

運行外部shell命令

quit/exit

退出

(7)其他注意:mininet遠程連接FlowVisor之後如果需要斷開連接,直接在mininet>命令行輸入quitexit即可。但有時會出現即便退出mininet但是仍然顯示有ovs連接到FlowVisor,這時只需要輸入以下命令刪除一下mn的緩存配置信息即可:

$sudo mn -c


1.2 OpenDayLight

這裏的ODLOpenDayLight)指的是ODL中的Controller這一源碼包。不包含其他的如openflowjava等。

1.2.1 ODL安裝、啓動

l 獲取ODL代碼

$git clone https://git.opendaylight.org/gerrit/p/controller.git 

l 編譯Controller

$cd controller/opendaylight/distribution/opendaylight

$mvn clean install

l 執行controller

$cd controller/opendaylight/distribution/opendaylight/target/distributions.oepndaylight-OSGIpackage/opendaylight

$./run.sh

這樣每次啓動controller需要cd目錄十分麻煩。可以自己寫一個啓動腳本來管理ODL控制器的運行:

$cd controller

$vim odlStart.sh

輸入以下內容:

#/bin/bash

./opendaylight/distribution/opendaylight/target/distribution.opendaylight-osgipackage/opendaylight/run.sh

文件創建完畢之後需要修改權限將其改爲可執行文件:

$sudo chmod a+x odlStart.sh

這樣每次只要執行odlStart.sh文件即可運行ODL Controller了。

啓動ODL Controller之後可以從網頁登錄http:\\localhost:8080進行驗證:

 

1.4 聯機實驗

FlowVisor作爲透明的中間層,對於mininet來說FlowVisor就是控制器,而對於ODL控制器來說FlowVisor就是OVS

1.4.1 mininet連接FlowVisor

(1)修改FlowVisor配置文件

FlowVisor的配置文件是/etc/flowvisor/config.json圖中標出的兩個修改後的值,一個是監聽端口6666,原默認值爲6633;一個是web端口8888,源默認端口是8081。這樣修改是爲了防止以後與控制器端口混淆。

 

(2)啓動FlowVisor

可以採用以下命令啓動FlowVisor

$cd flowvisor

$nohup flowvisor /etc/flowvisor/config.json > /etc/null &

以上的命令可以讓FlowVisor後臺啓動並且不再控制檯輸出任何信息

(1)啓動mininet

輸入以下命令:

$sudo mn --controller=remote,ip=192.168.119.129,port=6666

注:這裏的端口是監聽端口,而不是web端口(8888),web端口在FlowVisor查看信息時會經常使用到。

這時新開一個控制檯輸入如下命令,查看datapaths信息,可以看到mininet虛擬的交換機已經連接到FlowVisor上:

$fvctl -p 8888 list-datapaths

注意這裏的端口號是web端口號

 

再輸入以下命令查看6666監聽端口情況:

$netstat -an | grep 6666

 

這時在返回mininet中使用ping命令,用h1 ping h2,就會發現兩者已經無法ping通而且無法使用mininetlink命令建立h1h2之間的鏈路:

 

4.4.2 FlowVisor連接控制器

這裏爲了更提高實驗的可靠性,我運行了兩個控制器:floodlightopendaylight

(1)創建切片

使用FlowVisor創建切片,這裏兩個ip分別對應兩個不同主機的控制器,192.168.119.130對應的是ODL控制器,192.168.5.79對應的是Floodlight控制器。

Opendaylightfloodlight默認的端口都是6633,這裏並未做修改

 

(2)查看slice信息

 

(3)創建flowspace

 

(4)驗證連接

opendaylight控制器所在主機打開控制檯輸入以下命令:

$netstat -an | grep 6633

 

floodlight控制器所在的主機打開控制檯輸入以下命令:

$netstat -an 

 

(5)登錄控制器頁面

此時登錄控制器頁面查看連接設備信息只能看到交換機信息,需要在mininet中執行pingall命令,才能顯示主機信息:

 

然後分別打開控制器頁面查看信息:

Opendaylight

 

 

Floodlight

 


 

問題:floodlight中無法正常顯示主機信息



 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章