黃泰銘 王 雪 于 波 李道全
(青島理工大學信息與控制工程學院 青島266520)
軟件定義網(wǎng)絡(Software Defined Network)[1]是一種新型網(wǎng)絡體系架構,將傳統(tǒng)的網(wǎng)絡架構劃分為數(shù)據(jù)平面、控制平面和應用平面,具備數(shù)據(jù)轉發(fā)與規(guī)則控制相分離、軟件可編程等特點,成功地解決了傳統(tǒng)網(wǎng)絡的設計僵化問題。然而隨著網(wǎng)絡的規(guī)模日益增大,單一控制器的SDN架構無法滿足可擴展性需求,從而出現(xiàn)了邏輯上集中,物理上分布多控制器SDN網(wǎng)絡架構[2]。
在SDN多控制[3]架構中,每一個物理上分布的SDN控制器都可控制多個SDN交換機,而各個控制器之間是邏輯上集中的。然而,流量的變化易導致各個控制器之間的負載不平衡,這會嚴重影響多控制器SDN網(wǎng)絡架構的整體性能。如何實施多控制器之間的交換機遷移從而實現(xiàn)負載均衡目標,是未來網(wǎng)絡發(fā)展的重要研究方向[4]。
在初期階段,SDN架構通常只部署了單控制器來管理所有交換機,此架構雖然解決了網(wǎng)絡狀態(tài)的一致性問題,但是僅限用于小規(guī)模網(wǎng)絡環(huán)境,可擴展性低[5]。為解決此問題,近年來已有部分學者提出了多控制器的SDN架構,例如HyperFlow與Onix[6~7]。這些文獻研究了如何實現(xiàn)分布式的控制平面以及如何給應用平面提供一個全局的網(wǎng)絡拓撲,在一定程度上提高了多控制器的擴展性和穩(wěn)定性。但在多控制器SDN環(huán)境下,如何有效預防并解決多控制器之間的負載均衡,又是該領域所面對的新挑戰(zhàn)。
綜合近年來國內外研究現(xiàn)狀,針對多控制器SDN環(huán)境下的控制器負載均衡策略,主要以交換機遷移為主。文獻[5]設計了一個“超級控制器”來調度流量,從而達到多控制器之間的負載均衡。文獻[9]提出了COLBAS算法,每個控制器通過定期發(fā)布自己的負載,并與其它控制器相互配合來實現(xiàn)多控制器負載均衡。以上兩篇文獻雖然都對多控制器SDN的負載均衡問題提出了解決方案,但在收集負載信息和各控制器的交互方面有著較大的通信代價。在文獻[10]中,Advait等設計了名為Elasti?Con的分布式SDN控制器架構,并提出了一種符合OpenFlow標準的交換機遷移協(xié)議,該架構根據(jù)控制器負載閾值將交換機就近遷移至鄰居控制器。但其只考慮了單控制器過載的情況,若鄰居控制器也處于過載狀況,此架構將會失效。文獻[11]中,胡等提出了一種以交換機遷移策略為主的階段式控制器負載均衡策略,通過選取交換機遷入和遷出域,設定子域遷移度和交換機有效期的階段式算法實現(xiàn)了對交換機遷移的優(yōu)化,然而此策略提出的靜態(tài)負載信息采集方案會產(chǎn)生較大的通信代價和資源浪費。
總體來說,設計一個更好的交換機遷移策略來解決多控制器SDN的負載均衡問題,不但需要降低控制器之間的通信代價和資源消耗,而且需要提出合理的交換機遷移算法,避免遷移選擇僵化與遷移沖突問題。
針對多控制器SDN環(huán)境,本文提出了一種基于交換機遷移的動態(tài)負載均衡策略,能夠有效地解決多控制器SDN環(huán)境下的負載均衡問題。本文的貢獻和創(chuàng)新工作如下:
1)提出了一種自適應數(shù)據(jù)波動的動態(tài)負載信息采集算法,該算法能夠根據(jù)控制器的負載狀態(tài)自適應地調整數(shù)據(jù)收集的時間間隔,從而降低了負載信息采集的開銷。
2)構建具有中央控制器的分布式SDN網(wǎng)絡環(huán)境,并提出了更為高效的遷移交換機和遷移目標控制器的選取算法,提高了交換機的遷移效率,避免了遷移沖突。
在多域多控制器的SDN網(wǎng)絡環(huán)境下,各個分布式的控制器在時間和空間上會出現(xiàn)流量分布不均勻的情況,因此會出現(xiàn)個別控制器子域流量請求激增、控制器過載的情況,而其他控制器子域處理的流量請求較少,從而導致整個網(wǎng)絡的負載不均衡的問題。
針對此問題,本文提出了基于交換機遷移的動態(tài)負載均衡策略,流程如圖1所示,此策略共分為三個階段。首先通過動態(tài)信息采集算法(DIA)收集各控制器間的負載信息,以決定需要實施交換機遷移算法的過載控制器;隨后依據(jù)本文定義的遷移域及遷移交換機選取算法(MSS)決定遷移目標控制器以及需要遷移的交換機;最后依據(jù)交換機遷移協(xié)議完成交換機遷移,實現(xiàn)多控制器下的負載均衡。本部分內容將針對此策略的三個階段進行具體的算法設計與原理論證。

圖1 多控制器SDN中基于交換機遷移的動態(tài)負載均衡策略流程圖
在傳統(tǒng)負載信息采集方法中,SDN控制器的數(shù)據(jù)采集模塊通常采用固定的時間間隔來收集負載信息,此方法的缺點在于當各控制器負載均較低時,容易造成不必要的信息采集開銷。為避免頻繁采集控制器負載信息造成的資源浪費,本部分提出了動態(tài)負載信息采集算法(DIA),部署并運行于中央控制器。該算法會根據(jù)各控制器在一定時間間隔內的負載變化而自適應地調整負載信息采集的時間間隔。在各控制器負載均較低時,增加負載信息采集的時間間隔;在各控制器出現(xiàn)負載波動較大時,降低負載信息采集的時間間隔,由此精確各控制器的實時負載情況,同時避免了頻繁采集控制器負載信息造成的資源浪費。
3.1.1 多控制SDN網(wǎng)絡模型
OpenFlow 1.3協(xié)議[12]中為SDN控制器定義了三種模式:master、slave和equal。該協(xié)議規(guī)定,任意一臺OpenFlow交換機可以與多臺SDN控制器相連,限制條件為該交換機有且僅有一臺master控制器,但同時可以存在多臺equal和slave控制器與其相連。其中,slave控制器對交換機僅有只讀權限,不能接受諸如Packet_in的同步消息。然而master和equal控制器可以更改交換機的狀態(tài)并接收交換機的同步消息。
為確保SDN網(wǎng)絡的可靠性,網(wǎng)絡中的每臺OpenFlow交換機在默認情況下連接一臺master控制器和一臺slave控制器,同時也擁有多臺不相連的equal控制器并存于整個多控制器網(wǎng)絡中[13]。在任意一臺OpenFlow交換機的master控制器出現(xiàn)過載或故障時,可通過實現(xiàn)交換機遷移,來實現(xiàn)負載均衡或故障恢復,其過程為更改當前交換機的mas?ter控制器角色為slave,同時將負載較低的equal控制器變更為其master控制器。
在多控制器SDN網(wǎng)絡中,為實時監(jiān)測各控制器的負載情況并動態(tài)地采集負載信息,本文部署了如圖2所示的簡單網(wǎng)絡模型,其中部署了一臺中央控制器來實現(xiàn)對各個SDN控制器負載信息的采集與交互。

圖2 多控制器SDN網(wǎng)絡模型,部署“中央控制器”來收集各控制器的負載信息
3.1.2 動態(tài)負載信息采集算法(DIA)
動態(tài)負載信息采集算法的原理是在中央控制器部署一個負載監(jiān)測模塊,周期性地收集各SDN控制器的負載數(shù)據(jù)以判定是否存在過載控制器。在SDN控制器中,對Packet_in消息的處理是影響其負載的主要因素。OpenFlow交換機若在本地預存的流表中找不到與收到的數(shù)據(jù)包相匹配的流表項,則會按照OpenFlow協(xié)議,把收到的數(shù)據(jù)包封裝到Packet_in消息中,并將Packet_in消息上傳到SDN控制器。控制器收到報文后決定如何處理當前流,并通過OpenFlow協(xié)議將處理結果轉化為新的流表,下發(fā)至OpenFlow交換機。其中控制器的CPU負責處理所有數(shù)據(jù)及接收到的Packet_in消息,控制器的內存負責數(shù)據(jù)的存儲。控制器接收的Pack?et_in消息越多,其CPU、內存和帶寬的使用率就越高,控制器的負載也會越大。因此DIA算法需要獲取SDN控制器的三種可直接收集到的負載數(shù)據(jù):CPU負載lcpu、內存負載lmem和帶寬使用率lbr。
DIA算法根據(jù)以上信息定義了SDN控制器的負載L由式(1)所示,ω1、ω2、ω3分別表示lcpu、lmem、lbr所占權重。

隨后定義任意SDN控制器m的負載信息采集的時間間隔Tm,如式(5)所示,其中t代表預設的負載信息采集的時間間隔,預設值為15s。

根據(jù)式(1)~(5),在DIA算法中,控制器m的時間間隔動態(tài)調整可如式(6)表示。一般情況下,網(wǎng)絡設備的負載在80%以上時會出現(xiàn)丟包現(xiàn)象,因此算法規(guī)定在控制器負載值Lm在不超過0.8時為正常負載情況,當負載值大于0.8時會判定該控制器處于過載情況,并運行后文提出的遷移域及遷移交換機選取算法。

中央控制器運行DIA算法時,若未監(jiān)測到過載控制器,將會持續(xù)動態(tài)收集負載信息,若監(jiān)測并判斷出過載的SDN控制器,此時根據(jù)圖1所示流程,中央控制器會進行階段2的遷移交換機及遷移域選取算法(MSS)。MSS算法分為兩步:第一步是要確定交換機遷移的目標子域,也就是遷移域的選取;第二步是從過載SDN控制器子域中選擇出負載較高的交換機來執(zhí)行交換機遷移操作。
3.2.1 遷移域選取
傳統(tǒng)交換機遷移方案在選擇遷移域時多采用隨機選取原則,沒有綜合考慮遷移域的負載,這樣的交換機遷移過程容易出現(xiàn)遷移后再次過載的情況。本文提出的遷移域選取方案將設置并計算所有可遷移域的控制器負載值,優(yōu)先選取負載值最低的控制器作為遷移域。控制器負載值定義如下。
對于一個包含M臺控制器和N臺OpenFlow交換機的多控制SDN網(wǎng)絡,其控制器集合可表示為交 換 機 集 合 可 表 示 為。且由OpenFlow協(xié)議規(guī)定的連接關系可構造一個控制器與交換機的連接關系矩陣A=(aij)m×n,如圖3所示,其中矩陣內元素aij的描述如式(7)所示:

對于圖2所示的控制器與交換機的連接關系,可用圖3所示的關系矩陣表示。

圖3 控制器與交換機的連接關系矩陣
在多控制器環(huán)境下,每臺SDN控制器對于Packet_in數(shù)據(jù)包的處理能力都不一樣,其處理能力可以用單位時間內能處理Packet_in數(shù)據(jù)包的最大值來衡量,該數(shù)值可通過專業(yè)測試工具測得,本文假設該數(shù)值已知,并定義控制器i的負載值Ldi如式(8)所示:

其中Pi為控制器Ci在單位時間處理Packet_in數(shù)據(jù)包的最大值,pj為交換機Sj在單位時間內發(fā)送到控制器的Packet_in數(shù)據(jù)包數(shù)量。
完成該計算后,擁有最低負載值的控制器將被選取為遷移域。
3.2.2 遷移交換機選取
遷移交換機的選取范圍是在過載控制器的子域內。控制器通過負載信息采集監(jiān)測出每個交換機向過載控制器發(fā)出的Packet_in消息的平均請求速率來選取需要遷移的交換機,Packet_in消息的平均請求速率Rn定義如式(9)所示,其中MsgPacket_in代表交換機Sn每秒產(chǎn)生的Packet_in消息的數(shù)量。

Rn的值越大,則過載控制器需要處理的流表請求越多,表示該交換機在過載控制器子域內產(chǎn)生的負載越高。為了盡可能降低過載控制器的負載,中央控制器將Rn的值進行降序排序并優(yōu)先選取Rn值最大的交換機作為遷移交換機。
在交換機的遷移階段,必須要注意的問題是:要始終保持有且只有一個控制器處理遷移交換機的消息,以保證遷移過程不丟包以及交換機遷移的安全性[14]。過載控制器與遷移目標控制器通過如圖4所示的消息傳遞過程完成最終的交換機遷移,該過程可以保證交換機在遷移過程中不出現(xiàn)丟包情況。

圖4 交換機遷移所需消息傳遞過程
首先,過載域控制器A發(fā)送一個交換機遷移請求消息給遷移域控制器B。在交換機遷移期間為了維持遷移交換機SA流表的一致性,保證一直有且只有一個控制器處理交換機的消息,控制器A下發(fā)一個偽流表給交換機SA。因為偽流表不匹配任何數(shù)據(jù)流,所以不會影響OpenFlow網(wǎng)絡[15]。隨后,控制器B發(fā)送一個更改器角色為equal的消息至交換機SA,且控制器B會收到交換機SA的回復消息,并告知A自己的角色已經(jīng)變更為equal。為確保交換機中所有消息都已經(jīng)處理完畢,A發(fā)送Barrier消息至交換機SA。交換機SA在處理完Barrier消息后回復A。最后,控制器A下發(fā)偽流表刪除消息至交換機SA,SA刪除偽流表后通知所有與之相連的控制器進行角色變更。在收到通知消息后,控制器A將變更其角色為slave,同時控制器B將變更其角色為master,并開始負責管理交換機SA。
為驗證前面提出的SDN交換機遷移負載均衡策略,本部分對該策略進行了仿真實驗與結果分析。本實驗共使用了五臺處理器為Intel i5 6500,主頻為3.2GHz,4G內存的計算機,所有實驗主機連接于同一局域網(wǎng)環(huán)境下。主機分配與實驗環(huán)境配置信息如表1所示。實驗使用Floodlight作為SDN控制器,miniedit軟件搭建SDN網(wǎng)絡拓撲,并借助思博倫測試工具(Spirent TestCenter),測試方案的吞吐量、帶寬使用率和時延等性能參數(shù)。

表1 主機分配與實驗環(huán)境配置
本實驗采用的網(wǎng)絡拓撲如圖5所示,其中包含一個中央控制器,管控三個Ryu網(wǎng)絡控制器C={C1,C2,C3},每個控制器域內包含三個交換機,交換機集合為S={S1,…S9},每個交換機下綁定一臺虛擬主機,所有鏈路的帶寬默認值為10Mbit/s。

圖5 多控制器SDN實驗拓撲
本實驗主要分為兩大測試內容:網(wǎng)絡性能測試和控制器平均負載。實驗操作及結果分析如下。
1)網(wǎng)絡性能測試
本部分的網(wǎng)絡性能測試目的在于對比動態(tài)負載均衡前后,SDN交換機吞吐率的變化,以此證明該動態(tài)負載均衡策略的優(yōu)越性。
實驗首先測試負載均衡前的網(wǎng)絡性能。啟動Floodlight+mininet的SDN環(huán)境后,在裝有思博倫測試工具的主機上啟動STCa(Spirent TestCenter Ap?plication),將 如 圖6所 示 拓 撲 中 的S1_eth1和S2_eth1兩個端口綁定為測試端口port1和port2。在STCa完成網(wǎng)絡ARP學習后,啟動STCa中的RFC2544性能中的吞吐率測試,給port1-port2端口間添加h1~h2的單向流量供給負載,以此觀察S2交換機的吞吐率變化。測試參數(shù)配置如表2所示。由于流量負載是單向的,交換機S1會不斷產(chǎn)生Packet_in數(shù)據(jù)包到控制器C1,到達一定時間會導致控制器C1過載,從而影響到其域內S2交換機的吞吐率。

圖6 網(wǎng)絡性能測試綁定端口
完成以上測試后,接下來開啟動態(tài)負載均衡,并再次測試網(wǎng)絡性能,測試參數(shù)配置與表2一致。測試完成后將負載均衡前后的吞吐率數(shù)據(jù)進行對比。如圖7所示對比結果可以看出,動態(tài)負載均衡后,C1控制器在面臨高流量負載的情況下,其域內S2交換機的吞吐率較負載均衡前顯著提高。

圖7 負載均衡前后S2交換機吞吐率對比

表2 RFC2544網(wǎng)絡性能測試參數(shù)配置
2)控制器平均負載
控制器負載的主要來源是Packet_in數(shù)據(jù)包,要模擬出各控制器負載不均衡的情況需要在各控制器中產(chǎn)生不同數(shù)量的Packet_in數(shù)據(jù)包,因此本部分實驗在圖5所示拓撲基礎上添加6臺虛擬主機到C1控制器與內,分別綁定在S1-S3交換機上。隨后使用mininet命令行持續(xù)執(zhí)行pingall功能。此時SDN網(wǎng)絡中會產(chǎn)生大量包含ICMP協(xié)議的Pack?et_in數(shù)據(jù)包。
在pingall的同時啟用DIA算法,采集到各控制器的負載信息變化如圖8所示。由圖可發(fā)現(xiàn),因C1控制器內主機數(shù)量大,隨著互ping時間的增加,控制器的負載會遠超C2和C3控制器。但伴隨著交換機遷移策略的執(zhí)行,C1控制器將負載高的交換機遷移至C2和C3控制器域內,其負載值逐漸降低,C2和C3控制器的負載值逐漸增高,且隨時長增加,各控制器的負載逐漸趨于均衡。

圖8 高負載下各控制器負載變化
本文針對現(xiàn)有的多控制器SDN網(wǎng)絡環(huán)境面臨的負載均衡問題,提出了一種基于交換機遷移的動態(tài)負載均衡策略,主要包含了動態(tài)負載信息采集算法(DIA)和遷移域及遷移交換機選取算法(MSS)。結合使用了網(wǎng)絡性能測試工具進行了模擬仿真實驗,結果證明該策略可有效提高SDN交換機在高負載狀態(tài)下的吞吐率,并均衡多個控制器的負載。