接收了查詢消息的存儲節(jié)點報告其存儲有哪些虛擬機的虛擬機鏡像。由此,可獲得存儲了將要在計算節(jié)點上安裝的虛擬機的相同的虛擬機鏡像的多個存儲節(jié)點。
[0030]接著,在步驟S220,從多個存儲節(jié)點中確定至少兩個存儲節(jié)點,作為將要與安裝虛擬機的計算節(jié)點(在以下的描述中使用“計算節(jié)點”)建立連接的目的存儲節(jié)點。在本實施例中,目的存儲節(jié)點的選擇需要考慮將要建立的連接的高可用性和可靠性,并且使得計算節(jié)點與所確定的至少兩個目的存儲節(jié)點之間的連接的相關性最小。
[0031]在一個實施例中,至少兩個連接的相關性可以體現(xiàn)為從計算節(jié)點到至少兩個目的存儲節(jié)點的至少兩個路由路徑是否經過相同的中間路由設備。圖3示出了目的存儲節(jié)點的選擇的一個實施例的流程圖。如圖3所示,在步驟S301,獲取多個存儲節(jié)點的IP地址。在存儲節(jié)點報告所存儲的虛擬機鏡像時,該存儲節(jié)點的IP地址也一起提供。這樣,可從來自存儲節(jié)點的消息中獲取該存儲節(jié)點的IP地址。接著,在步驟S305,基于存儲節(jié)點的IP地址,可確定從計算節(jié)點到各個存儲節(jié)點的路由路徑,從而可獲得每個路由路徑所經過的中間路由設備。然后,在步驟S310,可判斷在所確定的多個路由路徑中是否存在不經過相同的中間路由設備的至少兩個路由路徑。如果存在至少兩個路由路徑不經過相同的中間路由設備(步驟S310的“是”),則在步驟S315,選擇不經過相同的中間路由設備的至少兩個路由路徑。然后在步驟S320,確定與這至少兩個路由路徑對應的至少兩個存儲節(jié)點,作為目的存儲節(jié)點。由于從計算節(jié)點到這樣選擇的目的存儲節(jié)點的路由路徑不經過相同的中間路由設備,因此,即使在計算節(jié)點與這些目的存儲節(jié)點之間建立的連接的任意一個連接斷開,其它連接也不會斷開,從而能夠確保高可用性和冗余的可靠性。
[0032]進一步地,在步驟S315中,還可以確定不經過相同的中間路由設備且響應時間最短的至少兩個路由路徑。
[0033]此外,如果在多個路由路徑中不存在不經過相同的中間路由設備的至少兩個路由路徑(步驟S310的“否”),則在這種情況下,至少兩個連接的相關性可以體現(xiàn)為路由路徑的響應時間。在本實施例中,響應時間是指從計算節(jié)點發(fā)送請求開始直到接收到來自存儲節(jié)點的響應為止所經過的時間。因此,在步驟S318,可根據(jù)每個路由路徑的響應時間,從多個路由路徑中選擇響應時間最短的至少兩個路由路徑。然后,在步驟S320,確定與這至少兩個路由路徑對應的至少兩個存儲節(jié)點,作為目的存儲節(jié)點。
[0034]在另一個實施例中,可以預先建立網段-位置區(qū)映射表,其記錄了分布式網絡可使用的IP地址的網段與位置區(qū)標識符的對應關系。在這種情況下,至少兩個連接的相關性可以體現(xiàn)為至少兩個目的存儲節(jié)點是否位于相同的位置區(qū)。分布式網絡可使用的IP地址可被劃分成多個網段,并且每個網段可被分配一個位置區(qū)標識符??蛇x地,也可以為幾個網段分配相同的位置區(qū)標識符。在選擇目的存儲節(jié)點時,首先,從來自多個存儲節(jié)點的消息可獲取相應的存儲節(jié)點的IP地址。根據(jù)所獲取的存儲節(jié)點的IP地址,可確定該存儲節(jié)點的IP地址所屬的網段。然后,通過查找網段-位置區(qū)映射表,可以獲得存儲節(jié)點的位置區(qū)標識符。然后,從多個存儲節(jié)點中確定位置區(qū)標識符不同的至少兩個存儲節(jié)點,作為目的存儲節(jié)點。
[0035]返回到圖2,在步驟S230,在計算節(jié)點與作為目的存儲節(jié)點的至少兩個存儲節(jié)點之間分別建立連接。在本實施例中,連接是指按照基于IP網絡的存儲協(xié)議而建立的用于在計算節(jié)點與目的存儲節(jié)點之間傳輸數(shù)據(jù)的連接?;贗P網絡的存儲協(xié)議可以是iSCSI協(xié)議或者以太網光纖通道(Fibre Channel over Ethernet,縮寫為FCoE)協(xié)議。因此,連接可以是iSCSI連接或者FCoE連接。在建立iSCSI連接時,計算節(jié)點作為啟動器,而所選擇的存儲節(jié)點作為目標器。
[0036]通過以上描述可以看出,本實施例的建立用于虛擬機的冗余連接的方法能夠在計算節(jié)點與存儲了相同的虛擬機鏡像的至少兩個存儲節(jié)點之間建立連接,以提供連接的冗余,防止由于連接的斷開而導致計算節(jié)點上的虛擬機的崩潰。另外,本實施例的方法通過優(yōu)先選擇位于不同網段的存儲節(jié)點作為目的存儲節(jié)點,提高了連接的高可用性和冗余的可靠性。
[0037]圖4示出了根據(jù)本發(fā)明的另一個實施例的建立用于虛擬機的冗余連接的方法的流程圖。以下結合附圖,對本實施例進行詳細描述,其中,對于與前面實施例相同的部分,使用相同的附圖標記,并適當省略其說明。
[0038]在本實施例的方法中,除了包括圖3所示的步驟S210至S230之外,還包括冗余連接的維護。
[0039]如圖4所示,在建立了至少兩個連接(步驟S230)之后,在步驟S410,響應于所建立的連接的任意一個連接斷開,查看在步驟S210中獲取的多個存儲節(jié)點中是否存在除了用于當前建立的連接的存儲節(jié)點之外的剩余存儲節(jié)點。
[0040]如果存在剩余存儲節(jié)點,則在步驟S420,從剩余存儲節(jié)點中確定一個存儲節(jié)點,作為新的目的存儲節(jié)點。在該步驟中,可以使用前面描述的根據(jù)路由路徑或者位置區(qū)標識符確定目的存儲節(jié)點的方法,也可以確定任意一個剩余存儲節(jié)點作為目的存儲節(jié)點。然后,在步驟S430,在計算節(jié)點與所確定的一個存儲節(jié)點之間建立新的連接。
[0041]進一步地,如果沒有剩余存儲節(jié)點,則在步驟S440,在計算節(jié)點的本地磁盤上創(chuàng)建虛擬機鏡像的本地副本。在建立了連接之后,存儲節(jié)點上的虛擬機鏡像可以通過連接傳輸?shù)接嬎愎?jié)點以用于創(chuàng)建本地副本。然后,在步驟S450,基于所創(chuàng)建的虛擬機鏡像的本地副本,在計算節(jié)點上建立指向該本地副本的新的連接。在該步驟中,在連接是iSCSI連接的情況下,存儲了虛擬機鏡像的本地副本的本地磁盤可作為目標器,從而能夠在計算節(jié)點上建立iSCSI連接。由于本地磁盤相對于存儲節(jié)點具有較高的可靠性,因此,指向本地副本的連接也具有較高的可靠性。
[0042]為了節(jié)約本地磁盤的使用,當在計算節(jié)點上安裝的虛擬機終止時,計算節(jié)點將清除在本地磁盤上創(chuàng)建的虛擬機鏡像的本地副本。
[0043]此外,進一步地,當沒有剩余存儲節(jié)點時,還可以獲取存儲有所需的虛擬機鏡像的副本的另一個計算節(jié)點。該步驟可通過向其它計算節(jié)點發(fā)送查詢消息,然后,其它計算節(jié)點報告其存儲了哪些虛擬機鏡像的副本。該步驟也可與前面所述的步驟S210同時執(zhí)行,SP,可向分布式網絡中的存儲節(jié)點和計算節(jié)點都發(fā)送查詢消息,然后響應于接收查詢消息,存儲節(jié)點和計算節(jié)點報告其存儲的虛擬機鏡像或虛擬機鏡像的副本。由此,可獲得存儲了所需的虛擬機鏡像的多個存儲節(jié)點或計算節(jié)點。然后,在計算節(jié)點與存儲有所需的虛擬機鏡像的另一個計算節(jié)點之間建立新的連接。如果沒有其它計算節(jié)點存儲有所需的虛擬機鏡像的副本,則可執(zhí)行步驟S440。
[0044]通過以上描述可以看出,本實施例的建立用于虛擬機的冗余連接的方法能夠進一步在已建立的連接斷開時維護連接的冗余,并且按照存儲節(jié)點優(yōu)先于計算節(jié)點的本地磁盤的策略來建立新的連接。此外,本實施例的方法在沒有剩余存儲節(jié)點的情況下,還通過在本地創(chuàng)建虛擬機鏡像的本地副本或者利用存儲有所需的虛擬機鏡像的副本的另一個計算節(jié)點,建立新的連接。
[0045]在相同的發(fā)明構思下,圖5示出了根據(jù)本發(fā)明的一個實施例的建立用于虛擬機的冗余連接的裝置500的示意性框圖。以下結合附圖,對本實施例進行詳細描述,其中,對于與前面實施例相同的部分,適當省略其說明。
[0046]如圖5所示,本實施例的裝置500可包括:節(jié)點獲取模塊501,其被配置為獲取存儲虛擬機的相同的虛擬機鏡像的多個存儲節(jié)點;確定模塊502,其被配置為從通過節(jié)點獲取模塊501獲取的多個存儲節(jié)點中確定至少兩個存儲節(jié)點,以使得安裝虛擬機的計算節(jié)點與所確定的至少兩個存儲節(jié)點各自之間的連接的相關性最?。灰约斑B接建立模塊503,其被配置為在計算節(jié)點與由確定模塊502確定的至少兩個存儲節(jié)點之間分別建立連接。
[0047]在本實施例的裝置500中,首先,節(jié)點獲取模塊501可通過向分布式網絡中的存儲節(jié)點發(fā)送查詢消息來獲取存儲了所需的虛擬機鏡像的多個存儲節(jié)點。
[004