一個檢測到該虛擬機迀入,因此該xTR在下發(fā)的該虛擬機的迀入路由信息中不攜帶首先獲知的標志信息。
[0073]對于虛擬機迀出信息,當xTR通過單播通知消息例如單播Map Notify消息檢測到虛擬機迀出信息時,確定該xTR是第一個檢測到該虛擬機迀出,因此在該xTR下發(fā)的該虛擬機的迀出路由信息中攜帶首先獲知的標志信息,當xTR通過組播通知消息例如組播MapNotify消息檢測到虛擬機迀出信息時,確定該xTR不是第一個檢測到該虛擬機迀出,因此該xTR在下發(fā)的該虛擬機的迀出路由信息中不攜帶首先獲知的標志信息。
[0074]作為一種實施方式,在線隧道路由器可以在所述隧道路由器通過虛擬機的報文檢測到虛擬機迀入時,將所述虛擬機的迀入路由信息中的所述預(yù)設(shè)標志位的取值設(shè)置為第一值,在所述隧道路由器通過組播通知消息檢測到虛擬機迀入時,將所述虛擬機的迀入路由信息中的所述預(yù)設(shè)標志位的取值設(shè)置為第二值,在所述隧道路由器通過單播通知消息檢測到虛擬機迀出時,將所述虛擬機的迀出路由信息中的所述預(yù)設(shè)標志位的取值設(shè)置為第一值,在所述隧道路由器通過組播通知消息檢測到虛擬機迀出時,將所述虛擬機的迀出路由信息中的所述預(yù)設(shè)標志位的取值設(shè)置為第二值。
[0075]下面結(jié)合圖1來詳細描述這個選擇過程:
[0076]如圖1所示,虛擬機VMB從DCl迀移到DC2,如果迀入數(shù)據(jù)報文是發(fā)給xTR2的,那么xTR2檢測到虛擬機VMB的迀入,然后由xTR2發(fā)送組播Map Notify來通知本數(shù)據(jù)中心的其它xTR虛擬機VMB迀入。本發(fā)明實施例在xTR下發(fā)VMB的迀入路由時,進行特殊處理:通過虛擬機VMB的報文檢測到VMB迀入的xTR2在下發(fā)迀入主機路由時,記錄一個特殊標記First表示是首次檢測到迀入,其它xTR是通過組播MapNotify檢測到迀入的,此時下發(fā)的迀入主機路由不帶First標記。
[0077]當有虛擬機從數(shù)據(jù)中心迀出時,MS會向該數(shù)據(jù)中心中最后注冊的xTR發(fā)送單播Map Notify通知虛擬機迀出事件,然后由該最后注冊的xTR通過組播Map Notify將該虛擬機迀出事件通知該數(shù)據(jù)中心其他xTR。
[0078]比如,虛擬機VMC從DC2迀移到DCl,假設(shè)最后向MS注冊DC2的EID空間、即最后向MS注冊10.18.1.0/24EID前綴的是xTR4。當虛擬機VMC迀出后,MS會向xTR4發(fā)送單播Map Notify通知VMC迀出。然后xTR4向本數(shù)據(jù)中心的其它xTR發(fā)送組播Map Notify通知VMC迀出。
[0079]與前面VMB的迀入處理類似,收到單播Map Notify檢測到迀出的xTR4下發(fā)的迀出NULLO路由帶First標記;收到組播Map Notify迀出的xTR下發(fā)迀出NULLO路由不帶First標記。
[0080]新上線的xTR5在上線后,遍歷本數(shù)據(jù)中心的與該新上線的xTR5同組的RLOC空間向所有本數(shù)據(jù)中心所有同組的xTR發(fā)送帶OL比特的Map Request報文。xTR2收到該帶OL比特的Map Request報文后,遍歷迀移路由表,發(fā)現(xiàn)VMB的迀入主機路由帶First標記,因此將VMB的EID地址填入Map Reply報文中,并置上OL標記,同時將MoveFag的值置I表示迀入。xTR2上VMC的迀出路由不帶First標記,因此不打包到Map Reply報文中。同理,xTR4收到帶OL比特的Map Request報文后,只將置上First標記的VMC迀出NULLO路由打包到Map Reply報文中,Move Flag值置位2,表示VMC迀出。新上線的xTR5收到這兩個Map R印Iy報文后,完成VMB的迀入和VMC的迀出處理。從而解決了新上線xTR無法感知到虛擬機迀移而導(dǎo)致的斷流問題。
[0081]下面參照圖1,說明采用本發(fā)明實施例對圖1所示的迀移事件進行處理的詳細處理過程:
[0082]首先,新上線xTR遍歷本數(shù)據(jù)中心與該新上線xTR同組的所有已存在xTR的RLOC地址,發(fā)送帶OL比特位的Map Request報文作為上線通知消息。同時,將該報文以RLOC地址為Key加入重傳鏈表,等待應(yīng)答報文。
[0083]xTR2收到該帶OL比特的Map Request報文后,并不去請求Map Cache路由,而是遍歷自己的虛擬機迀移路由表,發(fā)現(xiàn)VMB的迀入主機路由帶First標記,因此將VMB的EID地址填入Map Reply報文Record的EID字段中,且置上OL比特,MoveFlag值設(shè)置為I表示迀入。xTR2上VMC的迀出路由不帶First標記,因此不打包到Map Reply報文中。然后,xTR2將該帶OL比特的Map Reply報文單播發(fā)給xTR5。
[0084]xTR5收到xTR2發(fā)送的帶OL比特的Map Reply報文,解析該Map Reply報文得知收到上線通知應(yīng)答報文,因此先從重傳鏈表摘除到xTR2的用作上線通知消息的Map Requset報文。然后,xTR2提取Map Reply中VMB的EID地址和MoveFlag的取值,判斷VMB迀入。xTR5檢測到VMB迀入后,下發(fā)迀入主機路由;但是不發(fā)送組播Map Notify去通知本數(shù)據(jù)中心的其它xTR。新上線的xTR在下發(fā)虛擬機迀入路由時不發(fā)送組播Map Notify去通知本數(shù)據(jù)中心的其它xTR,這是因為,其它xTR此時已經(jīng)有VMB的迀入信息。
[0085]xTR4收到上線通知消息后,并不去請求Map Cache路由,而是遍歷自己的虛擬機迀移路由表。xTR4發(fā)現(xiàn)VMC的迀出NULLO路由置上了 First標記,因此將VMC的EID地址填入Map Reply報文的Record EID字段,且置上OL比特,MoveFlag值設(shè)置為2表示迀出。xTR4上VMB的迀入路由不帶First標記,因此不打包到Map Reply中。然后,xTR4將該帶OL比特的Map Reply報文單播給xTR5。
[0086]xTR5收到xTR4發(fā)送的帶OL比特的Map Reply報文,表示收到上線通知應(yīng)答報文,因此先從重傳鏈表摘除發(fā)送到xTR4的Map Request報文。然后,xTR5提取Map Reply報文的Record字段中VMC的EID地址,并提取MoveFlag的取值,判斷出VMC迀出。xTR5檢測到VMC迀出后,下發(fā)迀出NULLO路由,但是不發(fā)送組播Map Notify去通知本數(shù)據(jù)中心的其它xTR。新上線的xTR在下發(fā)虛擬機迀出路由時不發(fā)送組播Map Notify去通知本數(shù)據(jù)中心的其它xTR,這是因為,其它xTR已經(jīng)有VMC的迀出信息。
[0087]如果數(shù)據(jù)中心還有其它與該新上線的xTR5同組的xTR,比如xTR6,假設(shè)xTR6上的虛擬機迀移路由都不帶First標記,則xTR6直接反饋帶OL比特的Map Reply報文,且Record的EID地址填為O等預(yù)設(shè)值,MoveFlag填3表示沒有迀移信息。
[0088]xTR5收到xTR6的帶OL比特的Map Reply報文,表示收到上線通知應(yīng)答報文,因此先從重傳鏈表摘除發(fā)送到xTR6的上線通知消息即Map Request報文。然后讀取MoveFlag標識,發(fā)現(xiàn)MoveFlag取值為3,表示沒有迀移信息,直接結(jié)束處理。
[0089]如果新上線的xTR5在向本數(shù)據(jù)中心有某個在線xTR發(fā)送帶OL比特的MapRequest報文預(yù)定時長(比如40秒)后,還沒有收到該在線xTR反饋的帶OL比特的MapReply報文,則xTR5在重傳定時器超時后,會重新向該在線xTR發(fā)送帶OL的Map Requset報文作為上線通知消息。
[0090]可見本發(fā)明實施例提供了一套有效的交互機制,能穩(wěn)定高效地完成迀移信息交互,使新上線xTR能正確地獲取到虛擬機迀移信息,從而解決了新上線xTR感知不到虛擬機迀移信息,導(dǎo)致到達已迀移的虛擬機的流量不通的問題。
[0091]針對上述方法,本發(fā)明實施例還公開了一種路由器設(shè)備,該路由器設(shè)備中包括的虛擬機迀移信息處理裝置。
[0092]圖4是本發(fā)明實施例提供的路由器設(shè)備的硬件結(jié)構(gòu)連接圖。
[0093]如圖4所示,該路由器設(shè)備包括處理器、網(wǎng)絡(luò)接口、內(nèi)存和非易失性存儲器,且上述各硬件通過總線連接,其中:
[0094]非易失性存儲器,用于存儲指令代碼;所述指令代碼被處理器執(zhí)行時完成的操作主要為內(nèi)存中的虛擬機迀移信息處理裝置完成的功能。
[0095]處理器,用于與非易失性存儲器通信,讀取和執(zhí)行非易失性存儲器中存儲的所述指令代碼,完成上述的虛擬機迀移信息處理裝置完成的功能。
[0096]內(nèi)存,當非易失性存儲器中的所述指令代碼被執(zhí)行時完成的操作主要為內(nèi)存中的虛擬機迀移信息處理裝置完成的功能。
[0097]從軟件層面而言,應(yīng)用于路由器設(shè)備的虛擬機迀移信息處理裝置如圖5所示。
[0098]圖5是本發(fā)明實施例提供的虛擬機迀移信息處理裝置的結(jié)構(gòu)示意圖。圖5中所示裝置位于隧道路由器中。
[0099]如圖5所示,該裝置包括虛擬機迀移路由表處理模塊501、接收模塊502和虛擬機迀移信息發(fā)布模塊503。
[0100]虛擬機迀移路由表處理模塊501,用于在所述隧道路由器在檢測到虛擬機迀移時,判斷該隧道路由器是否是首先獲知該虛擬機迀移的信息,在虛擬機迀移路由表中設(shè)置標識信息用于記錄所述判斷結(jié)果。
[0101]接收模塊502,用于接收上線通知消息,所述上線通知消息由其他隧道路由器在上線時發(fā)送。
[0102]虛擬機迀移信息發(fā)布模塊503,用于在所述接收模塊接收到上線通知消息時,查詢虛擬機迀移路由表,根據(jù)所述虛擬機迀移路由表中的標識信息篩選出首先獲知的虛擬機迀移信息,將所述首先獲知的虛擬機迀移信息攜帶在上線通知應(yīng)答消息中,反