許逸飛
(中國(guó)電信系統(tǒng)集成公司 北京 100035)
在近年來飛速發(fā)展的數(shù)據(jù)中心技術(shù)中,虛擬化技術(shù)是一種底層的重要支撐技術(shù)。通過虛擬化,系統(tǒng)資源可以得到隔離,并且能夠彈性和動(dòng)態(tài)分配。然而,很多年來虛擬化技術(shù)的熱點(diǎn)一直都在于計(jì)算機(jī)虛擬化,直到這兩年數(shù)據(jù)中心規(guī)模急劇增大,多租戶的問題更加嚴(yán)重,網(wǎng)絡(luò)虛擬化才得到足夠的重視。
傳統(tǒng)TCP/IP網(wǎng)絡(luò)經(jīng)過30多年的發(fā)展已經(jīng)過度僵化。同時(shí),TCP/IP網(wǎng)絡(luò)也無法提供很好的資源劃分方法,這在當(dāng)前的數(shù)據(jù)中心應(yīng)用中都是十分嚴(yán)重的缺陷。【1】為了應(yīng)對(duì)TCP/IP網(wǎng)絡(luò)的挑戰(zhàn),學(xué)術(shù)界與工業(yè)界紛紛推出自己的標(biāo)準(zhǔn)來構(gòu)建一種具備彈性、可操作的新型網(wǎng)絡(luò),如可編程ASIC技術(shù)【2】,juniper公司提出的QFabric架構(gòu)【3】等。
OpenFlow網(wǎng)絡(luò)是一種對(duì)于傳統(tǒng)TCP/IP網(wǎng)絡(luò)的升級(jí)與補(bǔ)充,是一種重要的SDN(軟件定義網(wǎng)絡(luò))的解決方案【4】。它的基本思想是將網(wǎng)絡(luò)的控制平面與數(shù)據(jù)平面互相分離,來實(shí)現(xiàn)集中的轉(zhuǎn)發(fā)規(guī)則與網(wǎng)絡(luò)拓?fù)涞目刂啤?/p>
由于該特性,OpenFlow被廣泛用于網(wǎng)絡(luò)虛擬化技術(shù)。然而,目前的OpenFlow虛擬化網(wǎng)絡(luò)仍然面臨很多問題。如同計(jì)算機(jī)虛擬化一樣,網(wǎng)絡(luò)虛擬化應(yīng)當(dāng)具備伸縮性、彈性地分配資源的能力,實(shí)現(xiàn)這種能力,一個(gè)必備的機(jī)制是遷移機(jī)制。本文接下來的部分就會(huì)介紹通過修改一種主流的OpenFlow虛擬化層模塊FlowVisor【5】來實(shí)現(xiàn)一種虛擬網(wǎng)絡(luò)的遷移機(jī)制。
OpenFlow在2008年由斯坦福大學(xué)的clean slate項(xiàng)目組提出,是當(dāng)今主流的SDN解決方案。傳統(tǒng)的TCP/IP網(wǎng)絡(luò)將進(jìn)入交換設(shè)備的包在交換設(shè)備上確定轉(zhuǎn)發(fā)規(guī)則。而OpenFlow由一個(gè)控制器決定轉(zhuǎn)發(fā)規(guī)則,所有交換設(shè)備都連接到這個(gè)控制器上,并且部署控制器所確定的轉(zhuǎn)發(fā)規(guī)則。
OpenFlow網(wǎng)絡(luò)將進(jìn)入交換設(shè)備的包的所有的包頭進(jìn)行通配。滿足一系列特定要求的包為一個(gè)流,區(qū)別一個(gè)流可以通過一到四層網(wǎng)絡(luò)的任何包頭項(xiàng),即:mac地址、IP地址、TCP端口號(hào)等。對(duì)于一個(gè)流,控制器可以在交換設(shè)備上部署一條規(guī)則來決定它的轉(zhuǎn)發(fā)規(guī)則。此規(guī)則包含三部分:通配規(guī)則、轉(zhuǎn)發(fā)規(guī)則和統(tǒng)計(jì)數(shù)據(jù)?!?】
FlowVisor是一種OpenFlow網(wǎng)絡(luò)中的網(wǎng)絡(luò)虛擬化層實(shí)現(xiàn)。在IaaS云平臺(tái)中,不同租戶的隔離與資源分配問題一直是一個(gè)重要課題。租戶之間需要?jiǎng)澐值馁Y源不僅僅是計(jì)算和存儲(chǔ)資源,也包括網(wǎng)絡(luò)資源。通過FlowVisor,一個(gè)完整的OpenFlow網(wǎng)絡(luò)可以劃分成多個(gè)邏輯網(wǎng)絡(luò),每一個(gè)邏輯網(wǎng)絡(luò)被稱為一個(gè)分片(slice)。
FlowVisor對(duì)OpenFlow網(wǎng)絡(luò)進(jìn)行分片的主要資源包括:帶寬,拓?fù)?,流表?xiàng)的個(gè)數(shù),設(shè)備CPU。目前在系統(tǒng)中主要體現(xiàn)的是流表項(xiàng)個(gè)數(shù)和帶寬。
對(duì)分片的區(qū)別是用流空間的概念來實(shí)現(xiàn)的,每一個(gè)流空間是一系列統(tǒng)配規(guī)則。與流表項(xiàng)不同的是它并沒有轉(zhuǎn)發(fā)規(guī)則。
對(duì)于進(jìn)入交換設(shè)備的數(shù)據(jù)包,F(xiàn)lowVisor首先要將其攔截并且確定它屬于哪一個(gè)分片。每一個(gè)分片都有其可見范圍和權(quán)限,這需要交換設(shè)備對(duì)每個(gè)分片內(nèi)的包進(jìn)行改寫。比如,一個(gè)分片內(nèi)進(jìn)行廣播的包,離開交換設(shè)備時(shí)需要將廣播域從整個(gè)網(wǎng)絡(luò)改為該分片。
正如虛擬機(jī)的遷移,虛擬網(wǎng)絡(luò)分片的遷移其本質(zhì)是在透明與平滑的過程中,將在一定的物理設(shè)備上運(yùn)行的系統(tǒng)遷移到新的設(shè)備上運(yùn)行。在虛擬機(jī)的遷移過程中,我們需要遷移的包括CPU、虛擬內(nèi)存、虛擬網(wǎng)卡等等資源【7】,與此類似,在進(jìn)行更深入的研究之前,首先要明確需要遷移的資源包括哪些。
如前所述,F(xiàn)lowVisor對(duì)一個(gè)網(wǎng)絡(luò)的如下幾種資源進(jìn)行了劃分:①帶寬。②最大流表項(xiàng)個(gè)數(shù)。③拓?fù)浣Y(jié)構(gòu)。④設(shè)備CPU占有率。
其中,帶寬和最大流表項(xiàng)個(gè)數(shù)是通過一個(gè)叫做sliceLimits的數(shù)據(jù)結(jié)構(gòu)規(guī)定的,拓?fù)浣Y(jié)構(gòu)是自然的,設(shè)備CPU的限制在當(dāng)前版本中體現(xiàn)得并不明顯。
我們的目標(biāo)就是將一個(gè)虛擬網(wǎng)絡(luò)分片在不修改其流量帶寬和最大流表項(xiàng)個(gè)數(shù)的情況下,從原本的物理拓?fù)溥w移到新的物理拓?fù)渖稀?/p>
另外,我們的遷移機(jī)制必須滿足一些要求,包括:①遷移對(duì)每個(gè)網(wǎng)絡(luò)分片的管理員必須是透明的。②遷移過程必須是安全的,保證遷移前后拓?fù)浣Y(jié)構(gòu)和物理帶寬相同。③必須判斷哪些節(jié)點(diǎn)是可遷移的,哪些節(jié)點(diǎn)是不可遷移的。
對(duì)于第一個(gè)要求,我們通過擴(kuò)展FlowVisor的API來實(shí)現(xiàn)。只有FlowVisor管理員有權(quán)限進(jìn)行遷移。遷移過程中,需要重寫流空間,而不要求修改每個(gè)網(wǎng)絡(luò)分片上運(yùn)行的網(wǎng)絡(luò)操作系統(tǒng)(NOX,floodlight等)的轉(zhuǎn)發(fā)規(guī)則。
對(duì)于第二個(gè)和第三個(gè)要求,自動(dòng)選擇一個(gè)合法的網(wǎng)絡(luò)分片進(jìn)行遷移需要非常復(fù)雜的算法。當(dāng)前我們采用比較簡(jiǎn)單的手工指定的方法,如果選擇的新的分片無法滿足要求則拋出異常。
FlowVisor是一個(gè)事件驅(qū)動(dòng)的系統(tǒng),它對(duì)交換機(jī)和控制器之間的消息進(jìn)行攔截和處理,分為兩個(gè)模塊,F(xiàn)VSlicer負(fù)責(zé)對(duì)進(jìn)出控制器的消息進(jìn)行處理,F(xiàn)VClassifier對(duì)進(jìn)出交換設(shè)備的消息進(jìn)行處理。他們的目的是讓一個(gè)對(duì)用戶來說全局可見的消息最終精確改寫并發(fā)送到特定的分片交換機(jī)二元組上。
FVClassifier和FVSlicer都實(shí)現(xiàn)了兩個(gè)函數(shù),handleIOEvent和sendMsg。handleIOEvent是每次收到一條消息時(shí)觸發(fā),在進(jìn)行改寫之前,由它來確定如何改寫,往往是調(diào)用調(diào)用classifyFromSwitch和sliceFromController兩個(gè)函數(shù)進(jìn)行改寫,返回后調(diào)用sendMsg發(fā)送到交換設(shè)備或控制器上。FlowVisor對(duì)事件的處理流程如下:
圖1 FlowVisor控制器與交換設(shè)備的事件處理邏輯
我們通過修改FlowVisor的代碼來擴(kuò)展出虛擬分片的遷移規(guī)則。需要實(shí)現(xiàn)兩個(gè)功能:
1、把一個(gè)slice上的所有已經(jīng)部署的規(guī)則遷移到另一個(gè)slice上。
2、保證新的分片可以與控制器交互,也就是說,控制器對(duì)自己原有拓?fù)浣Y(jié)構(gòu)的所有操作,都會(huì)被透明地重新定向到新的分片上。
由以上,虛擬分片遷移主要經(jīng)過如下步驟:
1、新建一個(gè)分片,資源分配與之前的分片相同。
2、將新建的分片與原有分片各個(gè)交換設(shè)備一一匹配(也包括端口號(hào)和flow space的匹配),建立三個(gè)哈希表,key和value分別是源分片的所有交換設(shè)備和與之對(duì)應(yīng)的新分片的資源。這一步驟主要是為之后復(fù)制流表項(xiàng)和鏈接提供條件。
3、將原有分片上所有的流表項(xiàng)復(fù)制到新分片上。在這里,需要實(shí)現(xiàn)一個(gè)通過FVClassifier和FVSlicer來獲取一個(gè)交換機(jī)上屬于一個(gè)分片的所有流表項(xiàng)的函數(shù),我們?cè)贔VClassifier中實(shí)現(xiàn),它返回一個(gè)FVFlowStatisticsReply列表,表示所有的流表項(xiàng)。在將源分片的流表項(xiàng)復(fù)制到新分片的過程中,需要檢查所有匹配規(guī)則和操作所對(duì)應(yīng)的資源是否需要用映射中的目的資源來取代。比如,在源分片中存在流表項(xiàng):
在目的分片中要修改成:
其中,IPAddr_1和IPAddr_2是源分片與目的分片中對(duì)應(yīng)的兩個(gè)IP地址。
4、需要在虛擬化層將底層新分片的交換設(shè)備對(duì)上層暴露的信息修改為源分片的信息,并且對(duì)控制器發(fā)送到源分片的信息進(jìn)行IP地址和端口的改寫使他們對(duì)應(yīng)到新分片的對(duì)應(yīng)物理資源上。如之前的分析,在每一個(gè)message從源發(fā)送到目的地的過程中首先會(huì)被FVClassifier或FVSlicer攔截,并且調(diào)用handleIOEvent來確定是否需要進(jìn)行改寫與如何改寫。所以,在我們的系統(tǒng)中,借鑒這種方法,在handleIOEvent中加入一個(gè)功能,判斷是否需要對(duì)目的地進(jìn)行改寫。為了實(shí)現(xiàn)這個(gè)目的,設(shè)計(jì)了如下機(jī)制:
(1)在遷移完成后,不刪除源分片,而是刪除上面所有的流表項(xiàng)和流空間,并且在FVSlicer這一數(shù)據(jù)結(jié)構(gòu)內(nèi)加入一個(gè)字段,叫做isZombie。如果一個(gè)分片被遷移,則它所對(duì)應(yīng)的所有FVSlicer將isZombie設(shè)置為true。另外加入一個(gè)字段redirection,指向在遷移過程中與其對(duì)應(yīng)的新的FVSlicer。此外,我們還需要建立在該FVSlicer和遷移后的FVSlicer中的具體端口和兩個(gè)分片的對(duì)應(yīng)關(guān)系。如之前所述建立三個(gè)哈希表,將規(guī)則按照哈希表中的對(duì)應(yīng)關(guān)系復(fù)制到新的FVSlicer中。需要指出的是,這是一種暫行的低效方法,未來需要有一種徹底的改寫方式,而非僅僅依靠這種偽裝方法。
(2)在FVSlicer的handleIOEvent中加入代碼判斷它是否為zombie slicer,如果是,則需要調(diào)用其redirection的handleIOEvent。在調(diào)用之前對(duì)該信息進(jìn)行改寫,改寫邏輯與之前的復(fù)制邏輯相同。改寫結(jié)束后調(diào)用其redirection的handleIOEvent。
(3)與FVSlicer類似,在FVClassifier中也設(shè)置一個(gè)isRedirectable字段,與FVSlicer中的isZombie對(duì)應(yīng)。收到控制器發(fā)送的消息時(shí)處理過程與FVSlicer互逆,不再贅述。
為了驗(yàn)證這套機(jī)制是否有效,本文設(shè)計(jì)了如下實(shí)驗(yàn):
首先,建立了一個(gè)簡(jiǎn)單的OpenFlow網(wǎng)絡(luò),其拓?fù)浣Y(jié)構(gòu)如下:
圖2 虛擬網(wǎng)絡(luò)分片遷移實(shí)驗(yàn)拓?fù)?/p>
拓?fù)浣Y(jié)構(gòu)如上圖的網(wǎng)絡(luò)中,定義兩個(gè)分片,slice1包括S1,S2,S3,S6,slice2包括S1,S4,S5,S6。首先,S1向S6發(fā)送一個(gè)無終止的ping命令,我們?cè)赟1中預(yù)設(shè)一個(gè)流,并且關(guān)閉S4與S1的連接,保證ICMP包的鏈路路徑為:S1-S2-S3-S6,遷移后為S1-S4-S5-S6。在實(shí)驗(yàn)過程中,我們用S1發(fā)送ping命令到S6,然后發(fā)送遷移指令,節(jié)點(diǎn)的對(duì)應(yīng)關(guān)系為(S2,S4)和(S3,S5)。在S1上運(yùn)行tcpdump,觀察遷移前后ICMP包的轉(zhuǎn)發(fā)路徑。此外,為了驗(yàn)證新的規(guī)則能否正確部署到遷移后的分片上,在控制器端給S6增加一條規(guī)則,丟棄所有的源地址為S1的IP地址的包,驗(yàn)證ping的ICMP流量是否停止。結(jié)果證明我們?cè)O(shè)計(jì)的遷移機(jī)制沒有停機(jī)時(shí)間,并且所有遷移都成功進(jìn)行。并且新增丟棄原地址為S1的包的命令后,發(fā)現(xiàn)ping命令的流量停止。
通過上述方法,本文成功實(shí)現(xiàn)了OpenFlow網(wǎng)絡(luò)中基于FlowVisor網(wǎng)絡(luò)虛擬化層的虛擬網(wǎng)絡(luò)分片遷移。
在成文過程中,對(duì)于遷移后的廢棄分片,本文采用了對(duì)其進(jìn)行標(biāo)示并且進(jìn)行重定向的方法,這是一種不完全并且相對(duì)低效的方法,在接下來的工作中,可以通過修改FlowVisor底層代碼實(shí)現(xiàn)對(duì)交換設(shè)備端口虛擬化的方式,來實(shí)現(xiàn)一種根本的重定向機(jī)制。
此外,由于缺少實(shí)際物理環(huán)境,本文的測(cè)試都在虛擬環(huán)境中完成,希望在未來的相關(guān)工作中能夠在生產(chǎn)環(huán)境下部署該應(yīng)用并且測(cè)試結(jié)果。
在虛擬化數(shù)據(jù)中心中,網(wǎng)絡(luò)的劃分問題一直是一個(gè)十分關(guān)鍵的核心問題。SDN技術(shù)能夠給虛擬化數(shù)據(jù)中心網(wǎng)絡(luò)架構(gòu)的部署提供彈性,對(duì)每一個(gè)用戶提供可自定義的安全可控的網(wǎng)絡(luò)。但是目前的數(shù)據(jù)中心中網(wǎng)絡(luò)架構(gòu)一旦確定很難動(dòng)態(tài)更改。如同虛擬機(jī)的動(dòng)態(tài)遷移一樣,虛擬網(wǎng)絡(luò)的動(dòng)態(tài)遷移可以帶來一系列好處,包括:物理資源升級(jí)無宕機(jī)時(shí)間、收到攻擊時(shí)保證業(yè)務(wù)連續(xù)性、新用戶加入時(shí)可以動(dòng)態(tài)擴(kuò)容等。本文中所討論的虛擬網(wǎng)絡(luò)遷移技術(shù),在未來的數(shù)據(jù)中心組網(wǎng)中可以提供一種更加動(dòng)態(tài)、安全的思路。
[1]Rodrigues H,Santos J R,Turner Y,et al.Gatekeeper: Supporting bandwidth guarantees for multi-tenant datacenter networks[J].USENIX WIOV,2011.
[2]Watkins D.Programmable ASIC: U.S.Patent 6,588,006[P].2003-7-1.
[3]Poellabauer C.Q-fabric: system support for continuous online quality management[J].2004.
[4]McKeown N,Anderson T,Balakrishnan H,et al.OpenFlow:enabling innovation in campus networks[J].ACM SIGCOMM Computer Communication Review,2008,38(2): 69-74.
[5]Sherwood R,Gibb G,Yap K K,et al.FlowVisor: A network virtualization layer[J].OpenFlow Switch Consortium,Tech.Rep,2009.
[6]OpenFlow Switch Consortium.OpenFlow Switch Specification Version 1.3.0[J].2012.
[7]Clark C,Fraser K,Hand S,et al.Live migration of virtual machines[C]//Proceedings of the 2nd conference on Symposium on Networked Systems Design & Implementation-Volume 2.USENIX Association,2005: 273-286.