控制器負責整個SDN網絡的集中化控制,對于把握全網置資源視圖、改善網絡資源交付都具有非常重要的作用。但控制能力的集中化,也意味著控制器局的安全性和性能成為全網的瓶頸,一旦控制器在性能或安全性上得不到保障,隨之而來的是全網的服務能力的降級甚至是癱。;另外,單一的控制器也無法應對跨多個地域的SND網絡問題,需要多個SDN控制器組成的分布式集群,以避免單一的控制器節點在可靠性、擴展性、性能方面的問題。目前,用于多個控制器之間溝通和聯系的東西向接口還沒定義標準,但專家表示,一些非常成熟的集群技術可以被運用到SDN網絡中來解決上述難題。
控制器的軟件化讓服務器可以作為控制器的載體,控制器集群可以以服務器集群為基礎搭建。因為SDN控制器在SDN網絡中的重要作用,控制器集群的設計更具特殊性,例如要能夠支持正在運行的集群中增加新的控制器,以改善擴展性、保存失效控制器對應的交換機狀態一保證可靠性,特別是因為控制器掌握著全網的SDN交換設備,通過分布式的協作方式確保網絡狀態的一致性尤其重要,一個典型的基于控制器集群的SDN架構如圖所示。
基于控制器集群的SDN架構
如圖,SDN可充分利用服務器集群技術(例如Hazelcast)部署用軟件實現的控制器,而對一個分布式的集群而言,最關鍵的是控制器之間的協作,系統中需要專門設置集群通信機制用于控制器之間的信息傳遞,如JGroups通信庫已經成為了比較成熟的技術。
為保證控制器集群對SDN網絡的控制效果,有兩個方面的設計與實現非常重要。第一是主控制器的選舉,主控制器主要負責生成和維護全網范圍內的控制器和交換機狀態信息,一旦出現失效,就需要從集群的副控制器中選舉一個成為新的主控制器。第二是控制器集群對交換機的透明化,即在SDN網絡的運行過程中,交換機無需關心當前他接受的是哪一臺控制器發來的命令,同時在其向控制器發送數據包時,能保持之前單一控制器的操作方式,從而保證控制器在邏輯上的集中。為了實現上述目標,控制器集群設計的關鍵要素包含以下:
1. 主控制器選舉
在網絡運行過程中,集群的副控制器需要周期性的監控主控制器的工作狀態,一旦發現訪問不可達,就要啟動主控制器的選舉,集群中主控制器的選舉,業界已有不少算法,例如基于paxos的分布式選舉算法,在算法設計中,需要考慮算法實現的復雜度,特別是如果控制器集群部署在廣域網中,還要考慮帶寬延遲等網絡質量因素。
2. 集群虛擬地址
為了實現控制器之間的負載均衡,控制器集群可以利用傳統的負載均衡技術,例如在交換機向控制器進行注冊時,可以向某個靜態的虛擬IP地址發送,然后控制器集群會根據負載均衡算法,通過控制器間的通信確定并記錄該虛擬地址對應的控制器,并要求其負責對該交換機的控制,而控制器返回給交換機的數據包也將以虛擬IP地址為源地址,實現控制器集群對交換機的透明化。
3. 全網拓撲獲取
SDN網絡中的拓撲信息是實現資源優化調度的關鍵。為了獲得全網控制器和交換機的工作情況,需要各個控制器周期的進行鏈路發現,并將采集回來的網絡信息發送給主控制器匯總,再由主控制器統一下發給各個控制器。如果在定制數據流的轉發策略時,控制器發現數據流傳輸涉及的設備超過其控制的交換機范圍時,將會根據全網拓撲告知交換機對應的控制器,并通過協商制定一致的策略,進而統一下發給交換機。
4. 控制器失效應付
無論主控制器還是副控制器失效,集群都可以利用負載均衡技術,將此前指派失效服務器的虛擬IP地址映射到其他工作正常的控制器,同時觸發對全網拓普信息的更新和獲取。
利用集群化的控制器,SDN網路將能夠避免單一的控制器造成的單點失效問題,同時能夠具有良好的擴展性,以應對巨大的交換機流量。特別是在廣域網環境,多地部署的控制器可有效改善openflow數據包額傳輸延遲,提升網絡性能。
控制器集群是解決控制器東西向擴展的重要技術之一,雖然當前有很多成熟的技術和成功的經驗可供參考,但對SDN網絡而言,還有許多內容需要進一步研究,例如控制器之間東西向接口標準的指定,這將有助于在控制層面提供更好的開放性,實現控制器之間的兼容,更好的支持SDN部署規模的提升。