對(duì)應(yīng)的虛擬機(jī)迀移前的流表刪除,從而避免舊的虛擬機(jī)流表影響該虛擬機(jī)的業(yè)務(wù)轉(zhuǎn)發(fā)。
[0064]在本發(fā)明可選的實(shí)施例中,當(dāng)所述SDN控制器為控制器集群時(shí),所述控制器集群中可以包括用于管理源端虛擬交換機(jī)的控制器、用于管理目標(biāo)端虛擬交換機(jī)的的控制器。此時(shí),當(dāng)管理目標(biāo)端虛擬交換機(jī)的控制器通過端口增加消息獲知虛擬機(jī)預(yù)迀移事件時(shí),該管理目標(biāo)端虛擬交換機(jī)的控制器可以將該端口增加消息發(fā)送到管理源端虛擬交換機(jī)的控制器,以使管理源端虛擬交換機(jī)的控制器根據(jù)所述端口增加消息將端口標(biāo)識(shí)對(duì)應(yīng)的虛擬機(jī)的迀移狀態(tài)標(biāo)記為迀移開始。同理,當(dāng)管理源端虛擬交換機(jī)的控制器通過端口刪除消息獲知迀移結(jié)束時(shí),該管理源端虛擬交換機(jī)的控制器可以將該端口刪除消息發(fā)送到管理目標(biāo)端虛擬交換機(jī)的控制器,以使所述管理目標(biāo)端虛擬交換機(jī)的控制器根據(jù)所述端口刪除消息,將端口標(biāo)識(shí)對(duì)應(yīng)的虛擬機(jī)的迀移狀態(tài)標(biāo)記為迀移結(jié)束。
[0065]此外,當(dāng)該控制器集群中還存在第三控制器時(shí),管理目標(biāo)端虛擬交換機(jī)的控制器和管理源端虛擬交換機(jī)的控制器還可以分別將端口增加消息和端口刪除消息發(fā)送給所述第三控制器,以實(shí)現(xiàn)在SDN集群中的虛擬機(jī)迀移。
[0066]為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下基于圖3的SDN集群的虛擬網(wǎng)絡(luò)架構(gòu)圖,對(duì)本發(fā)明所述方案作進(jìn)一步地詳細(xì)說明。
[0067]如圖3所示,SDN集群中包括源端SDN控制器、目標(biāo)端SDN控制器和第三方SDN控制器,其中源端SDN控制器管理源端Hypervisor以及源端vSwitch ;目標(biāo)端SDN控制器管理目標(biāo)端Hypervisor以及目標(biāo)端vSwitch ;第三方SDN控制器管理第三方Hypervisor以及第三方vSwitch。當(dāng)虛擬機(jī)要從源端Hypervisor迀移到目標(biāo)端Hypervisor時(shí),根據(jù)本發(fā)明提供的虛擬機(jī)迀移方案,該虛擬機(jī)迀移的交互流程如圖4所示,其中包括:
[0068]首先Hypervisor控制器會(huì)通知目標(biāo)端Hypervisor新添端口,而目標(biāo)端vSwitch會(huì)為該虛擬機(jī)創(chuàng)建一個(gè)新的虛擬端口,其對(duì)應(yīng)的端口標(biāo)識(shí)為vportl,及迀移后的DPID和Ofport0之后,目標(biāo)端vSwitch會(huì)通過Openflow的Port add消息發(fā)送到目標(biāo)端SDN控制器。該P(yáng)ort add消息中包括該端口標(biāo)識(shí)vportl及其對(duì)應(yīng)的迀移后的DPID和Ofport。
[0069]目標(biāo)端SDN控制器收到Port add消息后,可判斷Port add消息中的vportl對(duì)應(yīng)迀移后的DPID和Ofport與當(dāng)前記錄的DPID和Ofport是否相同,若vportl對(duì)應(yīng)迀移后的DPID和Ofport與當(dāng)前記錄的DPID和Ofport不相同,則確認(rèn)vportl對(duì)應(yīng)的虛擬機(jī)的迀移狀態(tài)為迀移開始,并將該迀移開始事件通知源端SDN控制器和第三方SDN控制器。
[0070]當(dāng)該虛擬機(jī)在源端與目標(biāo)端Hypervisor之間進(jìn)行虛擬機(jī)的熱迀移后,Hpervisor控制器通知源端Hypervisor迀移結(jié)束,此時(shí)源端vSwitch會(huì)刪除對(duì)應(yīng)虛擬端口 vportl及其對(duì)應(yīng)的迀移前的DPID和Ofport,并通過Openflow的Port delete消息通知源端SDN控制器,該P(yáng)ort delete消息中包括該端口標(biāo)識(shí)vportl及其對(duì)應(yīng)的迀移前的DPID和Ofport。
[0071]源端SDN控制器收到該P(yáng)ort delete消息后,可以判斷Port delete消息中vportl對(duì)應(yīng)的虛擬機(jī)是否處于迀移狀態(tài),若是,則進(jìn)一步判斷該vportl對(duì)應(yīng)迀移前DPID和Ofport與當(dāng)前記錄的DPID和Ofport是否相同,若迀移前DPID和Ofport與當(dāng)前記錄的DPID和Ofport相同,則可確認(rèn)該vportl對(duì)應(yīng)的虛擬機(jī)的迀移狀態(tài)為迀移結(jié)束,并將該迀移結(jié)束事件通知目標(biāo)端SDN控制器和第三方SDN控制器。
[0072]目標(biāo)端SDN控制器在確定迀移結(jié)束后,可以為迀移后的虛擬機(jī)創(chuàng)建新的流表,并將該新的流表下發(fā)到目標(biāo)端vSwitch。
[0073]第三方SDN控制器在確定迀移結(jié)束后,也會(huì)創(chuàng)建新的流表,并將該流表下發(fā)到第三方 vSwitch。
[0074]之后,源端SDN控制器可以下發(fā)流表刪除指令來清除源端vSwitch中的該虛擬機(jī)迀移前的流表。
[0075]由此可見,本發(fā)明可以使SDN控制器通過接收端口增加消息和端口刪除消息來及時(shí)獲知虛擬機(jī)預(yù)迀移事件,并準(zhǔn)確標(biāo)記虛擬機(jī)的迀移狀態(tài),從而可以使虛擬機(jī)的迀移時(shí)序得到保證,并能夠?qū)崿F(xiàn)在SDN集群中的虛擬機(jī)迀移。
[0076]基于相同的構(gòu)思,本發(fā)明還提供一種虛擬機(jī)迀移裝置,所述裝置可以通過軟件實(shí)現(xiàn),也可以通過硬件或者軟硬件結(jié)合的方式實(shí)現(xiàn)。以軟件實(shí)現(xiàn)為例,本發(fā)明的虛擬機(jī)迀移裝置作為一個(gè)邏輯意義上的裝置,是通過其所在SDN控制器的CPU將存儲(chǔ)器中對(duì)應(yīng)的計(jì)算機(jī)程序指令讀取后運(yùn)行而成。
[0077]請(qǐng)參考圖5及圖6,是本發(fā)明一種示例性實(shí)施方式中的一種虛擬機(jī)迀移裝置600,所述裝置應(yīng)用于SDN控制器,所述裝置基本運(yùn)行環(huán)境包括CPU,存儲(chǔ)器以及其他硬件,從邏輯層面上來看,所述裝置600包括:
[0078]第一標(biāo)記單元601,用于接收目標(biāo)端虛擬交換機(jī)發(fā)送的端口增加消息,所述端口增加消息中攜帶迀移的虛擬機(jī)的端口標(biāo)識(shí),將所述端口增加消息中的端口標(biāo)識(shí)對(duì)應(yīng)的虛擬機(jī)的迀移狀態(tài)標(biāo)記為迀移開始;
[0079]第二標(biāo)記單元602,用于接收源端虛擬交換機(jī)發(fā)送的端口刪除消息,所述端口刪除消息中攜帶迀移的虛擬機(jī)的端口標(biāo)識(shí),將所述端口刪除消息中的端口標(biāo)識(shí)對(duì)應(yīng)的虛擬機(jī)的迀移狀態(tài)標(biāo)記為迀移結(jié)束;
[0080]流表創(chuàng)建單元603,用于為所述虛擬機(jī)創(chuàng)建新的流表,并將所述新的流表下發(fā)到所述目標(biāo)端虛擬交換機(jī);
[0081]指令下發(fā)單元604,用于向源端虛擬交換機(jī)下發(fā)流表刪除指令,所述流表刪除指令用于刪除所述源端虛擬交換機(jī)中該虛擬機(jī)迀移前的流表。
[0082]可選的,所述第一標(biāo)記單元601,具體用于接收目標(biāo)端虛擬交換機(jī)發(fā)送的端口增加消息,所述端口增加消息中包括虛擬機(jī)的端口標(biāo)識(shí)及其迀移后的DPID和Ofport ;根據(jù)所述端口標(biāo)識(shí)查找是否存在與所述端口標(biāo)識(shí)對(duì)應(yīng)的迀移后的DPID和Ofport相同的DPID和Ofport,若不存在與所述迀移后的DPID和Ofport相同的DPID和Ofport,則將所述端口標(biāo)識(shí)對(duì)應(yīng)的虛擬機(jī)的狀態(tài)標(biāo)記為迀移開始;
[0083]所述第二標(biāo)記單元602,具體用于接收源端虛擬交換機(jī)發(fā)送的端口刪除消息,所述端口刪除消息中包括虛擬機(jī)的端口標(biāo)識(shí)及迀移前的DPID和Ofport ;根據(jù)所述端口標(biāo)識(shí)查找是否存在與所述端口標(biāo)識(shí)對(duì)應(yīng)的迀移前的DPID和Ofport相同的DPID和Ofport,若存在與所述迀移前的DPID和Ofport相同的DPID和Ofport,則將所述端口標(biāo)識(shí)對(duì)應(yīng)的虛擬機(jī)的狀態(tài)標(biāo)記為迀移結(jié)束。
[0084]可選的,所述流表創(chuàng)建單元603,具體用于根據(jù)所述端口標(biāo)識(shí)為所述虛擬機(jī)創(chuàng)建新的流表,所述新的流表中包括所述端口標(biāo)識(shí)為和所述虛擬機(jī)的虛擬IP地址;
[0085]所述指令下發(fā)單元604,具體用于向源端虛擬交換機(jī)下發(fā)流表刪除指令,所述流表刪除指令包括所述端口標(biāo)識(shí)為,以使所述源端虛擬交換機(jī)刪除與所述端口標(biāo)識(shí)為對(duì)應(yīng)的虛擬機(jī)迀移前的流表。
[0086]可選的,當(dāng)所述SDN控制器為控制器集群中管理源端虛擬交換機(jī)的控制器時(shí),當(dāng)收到所述源端虛擬交換機(jī)發(fā)送的端口刪除消息后,所述裝置600還包括:
[0087]第一發(fā)送