熊一才,張晶晶,劉 軼
1(青海省職業技能鑒定指導中心,西寧 810000) 2(北京航空航天大學 計算機學院,北京 100191)
軟件定義網絡(Software Defined Networking,SDN)[1,2]將網絡中的控制功能與數據轉發功能分離,通過控制器進行集中式的轉發控制,并允許上層應用對控制器的轉發策略等功能進行編程,因而實現了網絡的靈活配置與管理,并可實現新應用和服務功能的快速定制和部署.由于軟件定義網絡技術的諸多優點,近年來得到了快速的發展和應用.
在以大型數據中心和企業網絡為代表的大規模網絡中,單一集中式控制器難以滿足網絡的可擴展性需求,且控制器單點故障很容易導致整個網絡癱瘓.為了保證網絡性能和可靠性,人們進一步提出了分布式控制器[3-5],該技術通過使用多臺物理上分布的SDN控制器協同工作,實現邏輯上的集中式控制,以提高網絡的可擴展性和控制器的容錯能力.由于此類網絡多為長時間持續運行,控制器的硬件升級/更換、軟件升級等維護工作通常需要對分布式控制器中的指定節點進行在線更換,且須在不中斷服務的情況下完成.在控制器更換過程中,需解決兩個問題:首先,被更換的舊控制器的服務不能中斷,即交換機和其他控制器的請求在更換過程中必須得到及時響應;其次,由于計算機技術發展迅速,新更換節點的硬件資源和處理能力往往高于現有的其他控制器,這會導致分布式控制器間性能的差異,為充分利用新控制器的硬件資源,需在控制器更換后重新進行異構控制器間的負載均衡.
為了解決上述問題,本文提出了一種分布式控制器的在線更換機制,該機制通過控制器間的協同,可在不中斷控制器服務和不丟包的情況下實現指定控制器節點的更換,同時提出了一種更換后的控制器間負載均衡策略,以較低的開銷實現分布式異構控制器間的負載均衡.在線更換機制和負載均衡策略以應用程序形式運行在SDN控制器中,易于擴展和部署,實驗測試驗證了該機制的有效性.
本文提出的SDN控制器在線更換機制以應用模塊的形式運行在每個控制器上.圖1給出了控制器的更換過程.

圖1 SDN控制器的在線更換過程Fig.1 Online swap procedure of SDN controllers
假設要用一臺新的控制器Xnew更換現有的控制器X,更換過程包括以下三個步驟:
1)將新控制器Xnew加入到網絡中
管理員將新的控制器Xnew添加到被替換控制器X的位置,Xnew可以通過分布式數據存儲獲取當前網絡信息(如鏈路和拓撲信息等),并將其自身信息(如硬件性能、運行狀態等)存儲到分布式存儲中以供其它控制器訪問.
2)在異構分布式控制器間進行負載均衡
新加入的控制器Xnew根據當前網絡負載狀態和自身性能計算交換機的負載,并根據計算結果調整自身和相鄰控制器的管理范圍.
3)交換機平滑遷移和控制器角色更換
在確保網絡中的請求能被正常接收和處理前提下,將控制器X所管理的交換機遷移到Xnew,并根據上一步的負載均衡計算結果,將相鄰控制器的部分交換機遷移到Xnew.在此過程中,控制器和交換機間按照預先設計的角色切換流程和通信協議進行協同,以確保分布式控制器系統的服務不中斷.
交換機遷移完成后,管理員即可刪除被更換控制器X.
負載均衡計算由新控制器Xnew負責完成,在此期間,其他控制器正常處理網絡中的各種事件.所采用的負載均衡策略基本思路是:在滿足延遲需求的情況下,將盡可能多的負載分配給新控制器,這一方面是考慮到新控制器通常擁有更高的硬件性能,另一方面,其他控制器的工作負載不會因為本次負載均衡而增加,因而不會影響到現有的網絡性能.
負載均衡過程包括確定負載均衡范圍、負載信息收集、區域計算三個步驟.
1)確定負載均衡范圍
由于新加入控制器與被替換控制器處于同一位置,這樣可以只調整本控制器和相鄰區域的負載,而不必進行全網絡的負載均衡,這不但可以大幅降低本次負載均衡的開銷,還可減小在線更換對整個網絡的影響.
以圖2為例,圖2(a)給出了一個包含8個控制器的網絡,每個控制器管理其負責的網絡區域.對該網絡拓撲進行抽象后,得到如圖2(b)所示的控制器向量圖.該向量圖只包含控制節點和連線邊,其中控制節點對應控制器及其控制區域,如果兩個控制節點間有邊相連,表示這兩個控制器所管理的區域相鄰.在本例中,假設要更換控制器8,那么根據向量圖可以確定負載均衡范圍如虛線包含的區域所示.

圖2 確定負載均衡范圍示例Fig.2 Determine load-balancing scope
2)收集負載信息
在確定負載均衡范圍后,需要收集本次負載均衡范圍內每個控制器的負載信息,為后續的負載均衡計算提供依據.這通過每個控制器上運行的負載測量模塊來完成,該模塊周期性地記錄控制器的CPU利用率、平均消息到達速率、控制器最大吞吐率、控制器間及控制器與交換機間距離.這些參數將被收集用作后續負載均衡算法的輸入.
3)區域計算
圖3以偽代碼形式給出了計算各控制器區域的算法流程.算法的輸入為所收集的負載信息和拓撲,輸出為需要遷移的交換機集合.
算法的基本思想是以被更換控制器的現有控制區域為基礎,逐層向外擴展,在可能的情況下,加入盡可能多的交換機.首先,新控制器預接管被更換控制器X管理的區域Rx,然后計算其邊界交換機集合Sborder(第1-3行),Sborder是那些和區域邊界相連但不屬于該區域的交換機的集合,也就是和管理區域相鄰一跳的交換機集合;然后,從邊界控制器集合中選擇合適的交換機(9行)分配給新控制器Xnew(4-15行);最后更新Sborder和新控制器的信息,進行下一次循環,直到找不到合適的交換機為止.可以看出,該算法的計算復雜度最高為O(n2),其中n為控制器的邊界交換機個數.
對于一個交換機s來說,綜合考慮控制器負載、通信延遲和鏈路數三方面的因素來決定其是否被新控制器管理.這三方面因素的計算公式如下:
控制器負載因子Fu:
(1)
式中的Uori為交換機s當前主控制器的CPU利用率,Unew為新控制器的CPU利用率.該比值越大,說明越應該將該交換機遷移到新控制器.
延遲因子Fd:
(2)
上式中的Ds,ori和Ds,new分別是交換機s到當前主控制器和新控制器的距離,Dori,new指兩個控制器之間的距離.考慮到控制器位置的重要性,盡量選擇距離控制器較近的交換機進行遷移.另外由于交換機的遷移需要兩個控制器間的通信,因此兩個控制器間的距離也作為考慮因素.為簡單起見,此處用跳數來衡量距離.
鏈路因子Fl:
(3)
上式中的n是與交換機s直連的鏈路數,m是連接交換機s和新控制器區域的鏈路數.對于交換機s來說,m與n的值越大,說明該交換機和新控制器的親密度越高,該交換機越應該被分配給新控制器.
綜合考慮以上三方面的因素,得出交換機s的遷移指數計算公式如下:
M=w1×Fu+w2×Fd+w3×Fl
(4)
上式中的w1、w2和w3分別是負載、延遲、鏈路三個因子在遷移指數中所占的權重比例系數,取值范圍在0—1之間,且三個權重之和為1.對于一個交換機s來說,其遷移指數越高,說明在當時的網絡狀況下,新控制器管理這個交換機越合理.為控制交換機遷移的數量,設置一個閾值α,當遷移指數M>α時,交換機才會被遷移.
算法1.選擇需遷移交換機
輸入:Network=(V,E),負載信息f
輸出:應由控制器管理的交換機集合Rx

圖3 負載均衡算法
Fig.3 Load-balance algorithm
在負載均衡計算完成后,就可以根據新的區域劃分方案進行交換機的遷移,并完成新舊控制器的在線更換.這一過程按照控制器角色切換流程和通信協議,通過新舊控制器之間以及與其他控制器間的控制消息傳輸實現角色切換,以確保在更換過程中網絡中的各種請求能被正常接收和及時處理,即網絡服務不中斷.
圖4給出了切換過程中控制器間以及控制器-交換機之間通過消息傳輸進行協同以實現角色切換的流程.如圖4(a)所示,角色切換過程分為三個階段,在不同的階段,明確定義了由新/舊控制器中的哪一方負責接收和處理網絡請求,并且在舊控制器內的請求被處理完畢之前,其角色不能改變.在交換機遷移開始前(第1階段),來自其他控制器的請求仍然被發送給舊控制器;交換機遷移開始時,新控制器向除舊控制器外的其他控制器發送遷移信息,包括新舊控制器的地址、需遷移交換機集合等;其他控制器收到遷移信息后(第2階段),向新舊控制器發送消息,獲取交換機的主控制器,主控制器(可能是新控制器或舊控制器)在收到消息后返回應答;其他控制器在得知交換機的主控制器信息后,在替換過程的后續階段將請求發送給主控制器.

圖4 在線更換過程中的協同和消息傳輸Fig.4 Coordination messages during the swapping
圖4(b)給出了在控制器角色切換過程中交換機的切換流程,該流程由新控制器向舊控制器發送啟動替換消息開始,舊控制器完成準備操作后回應確認消息,隨后,新控制器向需遷移的交換機發送Role-Request消息,將其角色改變為equal,其后的交換機切換流程與文獻[6]中的方法一致,該流程可避免切換過程中出現丟包.
在交換機遷移完成后,新控制器向其他控制器發送消息,通知更換結束.至此,舊控制器退出分布式控制器的協同控制,可以由管理員將其從控制平面中刪除.
本文所提出的控制器在線更換機制可用于平面式的分布式控制器系統.基于Openflow實現在線更換機制的系統結構如圖5所示,系統主要包括以下四部分:
1)底層物理網絡設施:包括網絡交換機及鏈路.從OpenFlow1.3協議開始,為了避免單臺控制器和交換機的連接中斷,一個交換機可以同時連接到多個控制器上,但是只有一個是master控制器,其余的是slave控制器,該項功能是實現交換機遷移的基礎.
2)控制器節點:每個控制器管理SDN網絡的不同部分,控制器之間通過通信模塊傳遞消息.在線更換功能主要由控制器中實現的三個模塊實現:負責收集本控制器負載信息的負載收集模塊,根據所收集信息進行負載均衡計算的計算模塊,以及根據負載計算結果進行交換機遷移的遷移模塊.
3)分布式數據存儲:負責收集集群節點的信息,為上層應用提供一個全局的邏輯視圖,它存儲所有控制器以及其管理的交換機的特定信息,如控制器負載信息、鏈路信息、拓撲信息等.

圖5 系統結構Fig.5 System architecture
4)分布式協同服務Zookeeper[7]:負責SDN分布式控制器系統的成員管理,如實例變化的檢測和應對等.
本文在開源的Floodlight[8]控制器中實現了在線更換機制,包括負載信息收集、負載均衡計算、交換機遷移等模塊,這些模塊以應用程序的形式運行在控制器中.Zookeeper用來實現分布式數據存儲以及提供協同服務,它可向所有的分布式控制器提供網絡的全局邏輯視圖.
實驗環境包括一臺服務器和一臺PC機,兩者之間通過萬兆以太網互連.服務器上運行所有的SDN控制器實例,PC機上運行一種SDN網絡模擬軟件Mininet[9],它可以按照設定的網絡參數(交換機臺數、拓撲等)模擬SDN網絡中交換機的工作,并通過網絡接口發送/接收交換機-控制器間的消息.因此,該實驗平臺為SDN控制器提供了與真實SDN網絡一致的網絡環境.表1給出了實驗環境的硬軟件參數.
首先使用隨機網絡拓撲測試負載調整算法的時間開銷.在隨機的拓撲中,假設有N個節點,那么邊的個數為Nx,其中x是變量.在實驗中,選擇x=1.25和x=1.15兩個數值,交換機節點的個數為0~3000.邊的位置隨機生成.公式(4)中的三個權值參數w1、w2、w3分別設置為0.8、0.1、0.1.

表1 實驗環境配置Table 1 Configuration of experimental environment
圖6給出了在不同網絡拓撲下負載均衡算法的計算時間.從圖中可以看出,隨著交換機個數的增加,計算時間呈線性增長.在交換機個數一定時,x=1.25的時間花銷明顯比x=1.15的時間開銷大,這是因為算法在尋找邊界交換機和計算交換機花銷時,都需要使用鏈路進行計算.此外,對同一拓撲,閾值α的取值也會對計算時間產生影響.當α值較大時,滿足遷移條件的交換機較少,反之亦然.

圖6 負載均衡算法在不同網絡規模和拓撲下的計算時間Fig.6 Computation cost of load-balancing
該實驗測試在不同消息速率下交換機遷移所用時間.實驗使用兩個控制器實例A和B,首先把所有交換機連接到A和B上,并設置A為Master控制器,B為Slave控制器.然后計算不同條件下把所有交換機從控制器A遷移到B所用的時間.定義控制器A、B的遷移時間為從發出/收到start消息開始到收到所有交換機的role_reply消息為止的時間;總的遷移時間從B發出start消息開始,結束時間從控制器B接收到end消息的時間和B的結束時間中取最大值.
實驗測試分為兩組.第一組實驗中,每個交換機的發送速率固定(100res/s),改變交換機個數;第二組實驗中,交換機個數固定(50個),改變每個交換機的發送速率(1000res/s~10000res/s).實驗結果如圖7所示.
從圖 7(a)可以看出,當每個交換機的發送速率固定時,隨著交換機個數的增加,遷移時間呈上升趨勢.并且當交換機個數達到一定數值時,遷移時間有一個快速上升.這說明當遷移的交換機達到一定規模時,需要的遷移時間也會很長.其次,從每組的三個數據來看,當所有的控制器實例運行在一個服務器上時,網絡節點之間的通信開銷,包括控制器之間以及控制器和交換機之間的通信,對于遷移交換機影響很小.實驗中通信的花銷一般是幾毫秒,但是當多個控制器運行在不同的服務器上時,控制器間的通信開銷值會達到幾十毫秒甚至幾百毫秒,這與設備的性能有很大的關聯.在圖7(b)所示的第二組實驗結果中,在交換機個數固定情況下,遷移時間隨著包速率的增加而增加,但是增長的速度小于圖 7(a)中的速度,這說明在總速率相同的情況下,交換機個數對于遷移時間的影響要大于消息速率.

圖7 交換機遷移時間Fig.7 Migration time of switches
本實驗測試控制器在更換前后的性能變化.使用Mininet模擬的SDN網絡拓撲如圖8所示,圖中包含64個節點(交換

圖8 實驗網絡拓撲圖Fig.8 Topology of SDN network
機)和77條鏈路,這些交換機分由4個控制器C1~C4控制,初始時各控制器負責的區域如圖中虛線所示,每個區域中的交換機均為16.實驗中,4個控制器實例運行在一臺服務器中,每個控制器實例綁定一個處理器核運行,每個交換機每秒發送固定數量的packet-in消息,然后用一臺擁有四核處理器的新控制器更換當前控制器C1.

圖9 替換前后控制器的CPU利用率和管理區域的變化Fig.9 CPU utilization and area of controllers
圖9給出了控制器吞吐率、負載和管理區域的變化.在更換之前,每個控制器的處理能力相同,且管理的交換機數量相同,由于交換機發送的流量請求超過控制器的處理能力,四個控制器的吞吐率相同,且cpu利用率均達到100%.控制器更換完成后,由于新控制器C1的處理能力更高,經過負載均衡,其管理區域內的交換機個數由16個增加到31個,吞吐率也相應增加,同時其他三臺控制器管理的交換機數量都從16減少到11,吞吐率也隨之下降.
通過本實驗可以看出,在一個控制器負載較高的網絡中,使用一臺硬件性能更高的控制器更換原有控制器后,網絡的綜合狀況得到明顯改善.
針對SDN網絡中控制器軟件更新問題,文獻[10]提出了HotSwap,該系統首先記錄網絡事件,并把這些事件回放給新控制器,然后比較新舊控制器轉發規則,進行規則的更新,最后完成新舊機器的替換.HotSwap能夠在不中斷服務的情況下完成控制器軟件系統的更新,同時保證軟件更新的正確性.HotSwap的更新過程主要針對控制器軟件的更新,并不考慮設備的硬件性能的提升,以及在SDN異構環境下設備性能提升后對整個網絡帶來的影響.
針對控制器與交換機之間靜態的映射關系難以適應網絡中控制平面負載變化的問題,現有的關于多控制器的研究提出多種解決方案[6,11-14].這些方案是根據網絡中負載的實時變化,利用不同的負載均衡策略,動態地均衡控制器之間的負載.它們主要是通過定期收集交換機和控制器的負載信息,對信息進行整合計算,并根據不同的負載策略通過改變交換機和控制器的映射關系進行負載調整.如ElastiCon[6]周期性的檢測每個控制節點的負載并進行記錄.每隔一段時間執行負載調整算法,以cpu利用率為衡量指標查找是否有需要遷移的交換機,根據返回的結果調整交換機和控制器之間的映射關系,從而達到負載均衡的目的.根據上述分析,現有的負載均衡方法無法滿足管理員對指定網絡范圍進行調整的需求.例如,當管理員希望對某控制器進行硬件升級時,現有方法無法根據管理員的意愿對指定機器進行操作,并在沒有觸發負載調整的條件下,升級的控制器需要等待一段時間才能獲取足夠的負載.
分布式SDN控制器是提高SDN網絡可擴展性和可靠性的有效途徑,在系統的長時間持續運行過程中,控制器的硬軟件維護和升級在所難免.針對這一問題,本文提出了一種分布式SDN控制器的在線更換機制,實現了分布式控制器的在線更換和不中斷服務,同時針對控制器更換后性能異構帶來的負載不均衡問題,給出了異構控制器間的負載均衡算法.實驗測試表明該機制可高效地完成新舊控制器的在線更換,以及交換機的平滑遷移和負載均衡調整.