S210,可以在檢查點(diǎn)將數(shù)據(jù)寫入主虛擬機(jī)的磁盤,例如周期性地寫入磁盤。這樣,即使數(shù)據(jù)丟失也僅僅是在一個(gè)較小的檢查點(diǎn)間隔內(nèi)的數(shù)據(jù)丟失,從而有效降低了數(shù)據(jù)丟失量。在本發(fā)明的實(shí)施例中,檢查點(diǎn)可以是本領(lǐng)域技術(shù)人員根據(jù)需要預(yù)先設(shè)置的。
[0029]根據(jù)本發(fā)明的實(shí)施例,在鏡像虛擬機(jī)處,也可以在預(yù)定的檢查點(diǎn)將數(shù)據(jù)寫入鏡像虛擬機(jī)的磁盤。由此,可以減少在鏡像虛擬機(jī)處的數(shù)據(jù)丟失。
[0030]然后,方法200進(jìn)行到步驟S220,響應(yīng)于主虛擬機(jī)丟失數(shù)據(jù),基于鏡像虛擬機(jī)的存儲(chǔ)器中的數(shù)據(jù)來(lái)恢復(fù)數(shù)據(jù)。
[0031]主虛擬機(jī)丟失數(shù)據(jù)可能由于多種原因引起。例如,當(dāng)主虛擬機(jī)意外斷電、系統(tǒng)崩潰等時(shí),主虛擬機(jī)通常沒(méi)有機(jī)會(huì)對(duì)文件系統(tǒng)進(jìn)行清理即會(huì)關(guān)閉,因此主虛擬機(jī)的存儲(chǔ)器中的數(shù)據(jù)可能會(huì)丟失。在這種情況下,在本發(fā)明的實(shí)施例中可以基于鏡像虛擬機(jī)的存儲(chǔ)器中的數(shù)據(jù)來(lái)恢復(fù)數(shù)據(jù)。特別地,主虛擬機(jī)可以首先重啟,然后在主虛擬機(jī)處執(zhí)行初始化,以便預(yù)留用于恢復(fù)數(shù)據(jù)的主存儲(chǔ)空間,繼而主虛擬機(jī)可以與鏡像虛擬機(jī)重新建立連接,讀取在鏡像虛擬機(jī)的存儲(chǔ)器中存儲(chǔ)的數(shù)據(jù),之后主虛擬機(jī)可以將讀取的數(shù)據(jù)存儲(chǔ)到用于恢復(fù)數(shù)據(jù)的主存儲(chǔ)空間中。
[0032]可選地,根據(jù)本發(fā)明的實(shí)施例的用于支持對(duì)數(shù)據(jù)的非易失性隨機(jī)訪問(wèn)的方案還可以包括對(duì)存儲(chǔ)系統(tǒng)中的若干情況的處理,例如初始化、鏡像虛擬機(jī)不可達(dá)、主虛擬機(jī)正常關(guān)機(jī)、鏡像虛擬機(jī)正常關(guān)機(jī)的情況等等。相關(guān)細(xì)節(jié)將結(jié)合以下實(shí)施例進(jìn)行描述。
[0033]下面參考圖3,其示出了根據(jù)本發(fā)明一個(gè)示例性實(shí)施例的用于支持對(duì)數(shù)據(jù)的非易失性隨機(jī)訪問(wèn)的方法300的流程圖。方法300是結(jié)合圖2所述的方法200的一種具體實(shí)現(xiàn)方式,在方法300中,數(shù)據(jù)先從主虛擬機(jī)傳到鏡像虛擬機(jī)中,在數(shù)據(jù)寫入鏡像虛擬機(jī)的存儲(chǔ)器后鏡像虛擬機(jī)向主虛擬機(jī)發(fā)送一個(gè)確認(rèn)消息,主虛擬機(jī)響應(yīng)于該確認(rèn)消息來(lái)將該數(shù)據(jù)寫入本地存儲(chǔ)器,從而完成完整的數(shù)據(jù)寫入操作。方法300可以由主虛擬機(jī)110或以其他方式與之關(guān)聯(lián)的設(shè)備來(lái)執(zhí)行。
[0034]方法300開始之后,在步驟S310,響應(yīng)于接收到來(lái)自客戶端的數(shù)據(jù),從主虛擬機(jī)向鏡像虛擬機(jī)傳輸數(shù)據(jù),以便數(shù)據(jù)被寫入鏡像虛擬機(jī)的存儲(chǔ)器中。在步驟S320,響應(yīng)于來(lái)自鏡像虛擬機(jī)的對(duì)成功寫入數(shù)據(jù)的確認(rèn)消息,將數(shù)據(jù)寫入主虛擬機(jī)的存儲(chǔ)器。根據(jù)本發(fā)明的實(shí)施例,在主虛擬機(jī)突然掉電或者系統(tǒng)崩潰后,鏡像虛擬機(jī)無(wú)法接收到來(lái)自主虛擬機(jī)的heartbeat消息,此時(shí)它會(huì)保持本地存儲(chǔ)器中的數(shù)據(jù),用于主虛擬機(jī)恢復(fù)數(shù)據(jù)所用。在主虛擬機(jī)重啟之后,關(guān)于主虛擬機(jī)由于突然掉電或者系統(tǒng)崩潰等原因而丟失的數(shù)據(jù),主虛擬機(jī)可以基于鏡像虛擬機(jī)的存儲(chǔ)器中的數(shù)據(jù)來(lái)進(jìn)行恢復(fù),例如可以通過(guò)如下的步驟S330-S350來(lái)執(zhí)行該恢復(fù)過(guò)程。在步驟S330,響應(yīng)于主虛擬機(jī)丟失數(shù)據(jù),在主虛擬機(jī)處執(zhí)行初始化,以便預(yù)留用于恢復(fù)數(shù)據(jù)的主存儲(chǔ)空間。在步驟S340,讀取在鏡像虛擬機(jī)的存儲(chǔ)器中存儲(chǔ)的數(shù)據(jù)。在步驟S350,將讀取的數(shù)據(jù)存儲(chǔ)到用于恢復(fù)數(shù)據(jù)的主存儲(chǔ)空間中。
[0035]可選地,根據(jù)本發(fā)明的實(shí)施例的方法還可以包括初始化的過(guò)程。在一個(gè)實(shí)施例中,可以在主虛擬機(jī)處執(zhí)行初始化,以便為數(shù)據(jù)預(yù)留主存儲(chǔ)空間,然后主虛擬機(jī)可以通知鏡像虛擬機(jī)為數(shù)據(jù)預(yù)留鏡像存儲(chǔ)空間,其中主存儲(chǔ)空間與鏡像存儲(chǔ)空間具有相同結(jié)構(gòu)。根據(jù)本發(fā)明的實(shí)施例,主存儲(chǔ)空間和鏡像存儲(chǔ)空間的結(jié)構(gòu)可以具有多種實(shí)現(xiàn)形式,其可以由本領(lǐng)域技術(shù)人員根據(jù)實(shí)際需要或系統(tǒng)要求來(lái)預(yù)先設(shè)計(jì),例如可以將存儲(chǔ)空間設(shè)計(jì)為具有頭部和多個(gè)數(shù)據(jù)段,其中該頭部中可以存儲(chǔ)相關(guān)信息。存儲(chǔ)空間的結(jié)構(gòu)的細(xì)節(jié)是本領(lǐng)域中已知的,在此不再以避免混淆本發(fā)明的實(shí)質(zhì)。
[0036]在初始化過(guò)程結(jié)束后,可選地,可以對(duì)主存儲(chǔ)空間和鏡像存儲(chǔ)空間進(jìn)行一致性校驗(yàn),從而保障初始化之后主存儲(chǔ)空間和鏡像存儲(chǔ)空間保持一致。在根據(jù)本發(fā)明的實(shí)施例中,一致性校驗(yàn)可以通過(guò)多種方式進(jìn)行。在一個(gè)實(shí)施例中,可以例如通過(guò)檢查主存儲(chǔ)空間和鏡像存儲(chǔ)空間的結(jié)構(gòu)、大小、頭部信息、數(shù)據(jù)段長(zhǎng)度,等等,來(lái)確定二者是否具有一致性。應(yīng)當(dāng)注意的是,上述舉例僅僅是示意性的,而不是對(duì)本發(fā)明的限制,本領(lǐng)域技術(shù)人員完全可以通過(guò)已知的其他技術(shù)手段來(lái)完成一致性校驗(yàn)。
[0037]在執(zhí)行初始化過(guò)程之前,可選地,可以在主虛擬機(jī)與鏡像虛擬機(jī)之間進(jìn)行信息交換,這例如可以通過(guò)發(fā)送心跳(heartbeat)消息來(lái)實(shí)現(xiàn)。通過(guò)各自發(fā)送heartbeat消息,主虛擬機(jī)和鏡像虛擬機(jī)可以彼此知道對(duì)方的存在,并可以交換各自的狀態(tài)信息。
[0038]可選地,根據(jù)本發(fā)明的實(shí)施例的方法還可以包括對(duì)鏡像虛擬機(jī)不可達(dá)的情況的處理過(guò)程。鏡像虛擬機(jī)不可達(dá)的情況可能由于網(wǎng)絡(luò)連接延遲或故障等多種原因引起,在該情況下,主虛擬機(jī)可能無(wú)法正常連接到鏡像虛擬機(jī),從而認(rèn)為鏡像虛擬機(jī)不可達(dá)。在一個(gè)實(shí)施例中,在鏡像虛擬機(jī)不可達(dá)的情況下,主虛擬機(jī)停止將數(shù)據(jù)向鏡像虛擬機(jī)進(jìn)行寫入,并將數(shù)據(jù)存儲(chǔ)到主虛擬機(jī)的磁盤中。在鏡像虛擬機(jī)不可達(dá)的情況結(jié)束后,主虛擬機(jī)可以通知鏡像虛擬機(jī)對(duì)數(shù)據(jù)進(jìn)行重新同步,將數(shù)據(jù)從主虛擬機(jī)的磁盤復(fù)制到主虛擬機(jī)的存儲(chǔ)器中,并且向鏡像虛擬機(jī)傳輸主虛擬機(jī)的存儲(chǔ)器中的數(shù)據(jù)。對(duì)于鏡像虛擬機(jī)而言,在此情況下,鏡像虛擬機(jī)可以檢測(cè)主虛擬機(jī)的可達(dá)性,并可以響應(yīng)于主虛擬機(jī)通知對(duì)數(shù)據(jù)進(jìn)行重新同步,將來(lái)自主虛擬機(jī)的數(shù)據(jù)存儲(chǔ)到鏡像虛擬機(jī)的存儲(chǔ)器中。在一種【具體實(shí)施方式】中,對(duì)于4Gb的數(shù)據(jù)而言,例如可能需要大約20秒鐘來(lái)將數(shù)據(jù)從磁盤拷貝到存儲(chǔ)器中,并且可能以不到10秒鐘的時(shí)間通過(guò)1Gb網(wǎng)絡(luò)將該數(shù)據(jù)從主虛擬機(jī)傳輸?shù)界R像虛擬機(jī)。
[0039]作為備選方案,在另一個(gè)實(shí)施例中,在鏡像虛擬機(jī)不可達(dá)的情況下,主虛擬機(jī)停止將數(shù)據(jù)向鏡像虛擬機(jī)進(jìn)行寫入的同時(shí),并不將數(shù)據(jù)存儲(chǔ)到主虛擬機(jī)的磁盤中。也就是說(shuō),在鏡像虛擬機(jī)不可達(dá)時(shí)不對(duì)該數(shù)據(jù)進(jìn)行備份。此時(shí)若掉電或者系統(tǒng)崩潰,則主虛擬機(jī)無(wú)法利用鏡像虛擬機(jī)來(lái)恢復(fù)該數(shù)據(jù)。
[0040]可選地,根據(jù)本發(fā)明的實(shí)施例的方法還可以包括對(duì)主虛擬機(jī)正常關(guān)機(jī)的情況的處理過(guò)程。在一個(gè)實(shí)施例中,在主虛擬機(jī)正常關(guān)機(jī)的情況下,主虛擬機(jī)可以將數(shù)據(jù)存儲(chǔ)到主虛擬機(jī)的磁盤中,并且可以通知鏡像虛擬機(jī)停止檢測(cè)主虛擬機(jī)是否存在。在此情況下,鏡像虛擬機(jī)可以停止發(fā)送heartbeat消息,并等待主虛擬機(jī)開機(jī)后發(fā)送的同步消息進(jìn)行重新同止/J/ O
[0041]可選地,根據(jù)本發(fā)明的實(shí)施例的方法還可以包括對(duì)鏡像虛擬機(jī)正常關(guān)機(jī)的情況的處理過(guò)程。在一個(gè)實(shí)施例中,在鏡像虛擬機(jī)正常關(guān)機(jī)的情況下,主虛擬機(jī)可以將數(shù)據(jù)存儲(chǔ)到主虛擬機(jī)的磁盤中,并且可以檢測(cè)鏡像虛擬機(jī)的啟動(dòng)情況。在鏡像虛擬機(jī)重新啟動(dòng)后,主虛擬機(jī)可以通知鏡像虛擬機(jī)對(duì)數(shù)據(jù)進(jìn)行重新同步,將數(shù)據(jù)從主虛擬機(jī)的磁盤復(fù)制到主虛擬機(jī)的存儲(chǔ)器中,并且向鏡像虛擬機(jī)傳輸主虛擬機(jī)的存儲(chǔ)器中的數(shù)據(jù)。根據(jù)本發(fā)明的實(shí)施例,在鏡像虛擬機(jī)重新啟動(dòng)后,鏡像虛擬機(jī)可以響應(yīng)于主虛擬機(jī)通知對(duì)數(shù)據(jù)進(jìn)行重新同步,而將來(lái)自主虛擬機(jī)的數(shù)據(jù)存儲(chǔ)到鏡像虛擬機(jī)的存儲(chǔ)器中。
[0042]可選地,根據(jù)本發(fā)明的實(shí)施例的方法還可以包括對(duì)鏡像虛擬機(jī)突然掉電或系統(tǒng)崩潰的處理過(guò)程。在鏡像虛擬機(jī)突然掉電或系統(tǒng)崩潰的情況下,主虛擬機(jī)可以按照鏡像虛擬機(jī)不可達(dá)的情況來(lái)進(jìn)行處理。例如,主虛擬機(jī)可以停止將數(shù)據(jù)向鏡像虛擬機(jī)進(jìn)行寫入,并將數(shù)據(jù)存儲(chǔ)到主虛擬機(jī)的磁盤中。在鏡像虛擬機(jī)重啟后,主虛擬機(jī)可以通知鏡像虛擬機(jī)對(duì)數(shù)據(jù)進(jìn)行重新同步,將數(shù)據(jù)從主虛擬機(jī)的磁盤復(fù)制到主虛擬機(jī)的存儲(chǔ)器中,并且向鏡像虛擬機(jī)傳輸主虛擬機(jī)的存儲(chǔ)器中的數(shù)據(jù)。鏡像虛擬機(jī)可以在重啟后響應(yīng)于接收到來(lái)主虛擬機(jī)的重新同步通知,執(zhí)行與主虛擬機(jī)的重新同步。
[0043]現(xiàn)在參考圖4,其示出了根據(jù)本發(fā)明一個(gè)示例性實(shí)施例的用于支持對(duì)數(shù)據(jù)的非易失性隨機(jī)訪問(wèn)的設(shè)備400的框圖。根據(jù)本發(fā)明的實(shí)施例,設(shè)備400可以駐留在上文參考圖1描述的主虛擬機(jī)中或以其他方式與之關(guān)聯(lián)。
[0044]如圖所示,設(shè)備400包括數(shù)據(jù)存儲(chǔ)單元410,被配置為響應(yīng)于接收到來(lái)自客戶端的數(shù)據(jù),使得數(shù)據(jù)被分別寫入主虛擬機(jī)的存儲(chǔ)器和鏡像虛擬機(jī)的存儲(chǔ)器中;以及數(shù)據(jù)恢復(fù)單元420,被配置為響應(yīng)于主虛擬機(jī)丟失數(shù)據(jù),基于鏡像虛擬機(jī)的存儲(chǔ)器中的數(shù)據(jù)來(lái)恢復(fù)數(shù)據(jù)。
[0045]根據(jù)本發(fā)明的實(shí)施例,數(shù)據(jù)存儲(chǔ)單元410可以包括:第一數(shù)據(jù)傳輸單元,被配置為響應(yīng)于接收到來(lái)自客戶端的數(shù)據(jù),從主虛擬機(jī)向鏡像虛擬機(jī)傳輸數(shù)據(jù),以便數(shù)據(jù)被寫入鏡像虛擬機(jī)的存儲(chǔ)器中;以及第一數(shù)據(jù)記錄單元,被配置為響應(yīng)于來(lái)自鏡像虛擬機(jī)的對(duì)成功寫入數(shù)據(jù)的確認(rèn)