

內(nèi)存快照,顧名思義,是包含云主機(jī)運(yùn)行時內(nèi)存狀態(tài)的快照。在近期發(fā)布的ZStack Cloud 4.4.24中,新增支持云主機(jī)內(nèi)存快照。該功能主要基于快照組實(shí)現(xiàn),在快照組已提供磁盤一致性的基礎(chǔ)上,新增提供應(yīng)用一致性,進(jìn)一步確保數(shù)據(jù)完整性。內(nèi)存快照支持以快照組為單位進(jìn)行恢復(fù),同時還能額外恢復(fù)當(dāng)時內(nèi)存快照中的網(wǎng)卡、光驅(qū)等配置。本文主要從技術(shù)實(shí)現(xiàn)出發(fā),帶您深入了解ZStack Cloud內(nèi)存快照功能。
一 技術(shù)背景
ZStack Cloud內(nèi)存快照主要基于Libvirt接口實(shí)現(xiàn),我們可通過virsh命令的幫助信息了解相關(guān)參數(shù)。
1、創(chuàng)建內(nèi)存快照

從上述命令可見,通過[--disk-only],可創(chuàng)建磁盤快照;通過[--memspec]以及[--diskspec],可指定對應(yīng)的快照類型、快照文件名等信息。在指定[memspec]的情況下,Libvirt會額外執(zhí)行一段保存云主機(jī)運(yùn)行時狀態(tài)信息的邏輯(實(shí)際上通過云主機(jī)熱遷移實(shí)現(xiàn)),最終將云主機(jī)對應(yīng)的元數(shù)據(jù)和運(yùn)行時狀態(tài)信息寫入到[memspec]指定的文件中。將該機(jī)制反推,即可將已保存的云主機(jī)運(yùn)行時狀態(tài)信息恢復(fù),云主機(jī)可恢復(fù)到快照創(chuàng)建時的狀態(tài)。
此外,也許您還會好奇,云主機(jī)運(yùn)行時創(chuàng)建快照如何保證內(nèi)存一致性?其實(shí),在創(chuàng)建內(nèi)存快照時,會在獲取內(nèi)存狀態(tài)之前暫停云主機(jī),由于服務(wù)暫停,從而保證了創(chuàng)建內(nèi)存快照那一時刻的內(nèi)存一致性。
2、恢復(fù)內(nèi)存快照

從上述命令可見,通過[--file],可指定待恢復(fù)的內(nèi)存快照文件路徑。
通過[--xml],可指定待恢復(fù)的云主機(jī)xml配置文件,該xml配置文件需與內(nèi)存快照已保存的xml配置文件保持一致,否則內(nèi)存快照恢復(fù)失?。蝗舨恢付╗--xml],則會按照內(nèi)存快照已保存的xml配置文件進(jìn)行恢復(fù)。
此外,還可通過[--running]或[--paused],指定恢復(fù)后的云主機(jī)狀態(tài)(運(yùn)行或暫停)。
二 技術(shù)原理
ZStack Cloud內(nèi)存快照技術(shù)原理可分為以下三個部分:
保存設(shè)備信息
創(chuàng)建內(nèi)存快照
恢復(fù)內(nèi)存快照
1、保存設(shè)備信息
在“技術(shù)背景”章節(jié)已提到,保存云主機(jī)運(yùn)行時狀態(tài)信息的邏輯,實(shí)際上通過云主機(jī)熱遷移實(shí)現(xiàn)。
基于該背景可得知,執(zhí)行創(chuàng)建/恢復(fù)快照組操作,其中已隱含云主機(jī)支持熱遷移的前提條件。若僅針對Libvirt層面,直接恢復(fù)內(nèi)存快照就能完成云主機(jī)的恢復(fù),但這樣會造成其它問題,比如在外部快照場合,若直接恢復(fù)內(nèi)存快照,將直接讀寫一個只讀的快照文件,這是我們不希望發(fā)生的。
因此,引入保存設(shè)備信息機(jī)制,可確?;謴?fù)的云主機(jī)配置是我們所需要的。云主機(jī)熱遷移對相應(yīng)設(shè)備的地址信息也有要求。
通過保存設(shè)備信息機(jī)制,云主機(jī)虛擬設(shè)備的地址信息被固定,結(jié)合之前物理設(shè)備地址信息保留的邏輯,從而實(shí)現(xiàn)設(shè)備定制信息的固定。
此外,保存設(shè)備信息機(jī)制還有存檔功能,支持保留創(chuàng)建內(nèi)存快照時刻對應(yīng)的云主機(jī)相關(guān)虛擬資源信息。在創(chuàng)建內(nèi)存快照后,即使云主機(jī)配置變化(比如修改網(wǎng)卡、光驅(qū)等),也可將云主機(jī)恢復(fù)到創(chuàng)建內(nèi)存快照時刻的狀態(tài)。
2、創(chuàng)建內(nèi)存快照
引入保存設(shè)備信息機(jī)制,創(chuàng)建內(nèi)存快照已具備實(shí)現(xiàn)基礎(chǔ),即:可以保存設(shè)備地址和設(shè)備配置信息。
創(chuàng)建包含內(nèi)存快照的快照組,實(shí)質(zhì)問題是:如何處理內(nèi)存快照在快照組中的映射關(guān)系?為解決該問題,我們新增Memory類型云盤作為內(nèi)存快照,考慮到內(nèi)存快照也通過主存儲保存,只需調(diào)整云盤邏輯,即可讓內(nèi)存快照與其它云盤保持邏輯抽象的統(tǒng)一。

內(nèi)存快照-Memory類型
此外,在創(chuàng)建快照組時,需再次建立快照組和設(shè)備信息的關(guān)聯(lián)關(guān)系,用于快照組恢復(fù)。該關(guān)聯(lián)關(guān)系在刪除內(nèi)存快照時連帶刪除。
3、恢復(fù)內(nèi)存快照
內(nèi)存快照需基于快照組進(jìn)行恢復(fù)。恢復(fù)內(nèi)存快照與恢復(fù)其它快照在實(shí)現(xiàn)邏輯上差別不大。唯一不同的是,恢復(fù)內(nèi)存快照,會根據(jù)快照組和設(shè)備信息的關(guān)聯(lián)關(guān)系,先將存檔設(shè)備信息還原到當(dāng)前云主機(jī)上,并對云主機(jī)配置及設(shè)備做一系列檢查,當(dāng)云主機(jī)配置及設(shè)備還原后,再進(jìn)行正式的數(shù)據(jù)面恢復(fù)。
三 技術(shù)特色
1、易用性
創(chuàng)建內(nèi)存快照并未新增功能入口,可直接通過創(chuàng)建快照組的功能入口實(shí)現(xiàn)。在創(chuàng)建快照組界面,選擇創(chuàng)建內(nèi)存快照,創(chuàng)建出的快照組將包含內(nèi)存快照?;謴?fù)快照組,也可選擇是否同時恢復(fù)內(nèi)存快照,針對不同使用場景靈活選擇。

圖2 創(chuàng)建內(nèi)存快照
2、實(shí)用性
內(nèi)存快照本身是確保虛擬化場景具備更好可用性的基礎(chǔ)功能。此外,通過內(nèi)存快照,可讓云主機(jī)在一定程度上規(guī)避因變更配置帶來的風(fēng)險。
3、擴(kuò)展性
恢復(fù)內(nèi)存快照,支持額外恢復(fù)當(dāng)時內(nèi)存快照中的云主機(jī)配置(比如網(wǎng)卡、光驅(qū)等)。
4、適用性
目前,除Ceph之外的其它主存儲類型均支持內(nèi)存快照功能。
四 技術(shù)價值
內(nèi)存快照支持捕獲某一精確時刻的云主機(jī)內(nèi)存狀態(tài)。比如正在升級中的軟件,若具備內(nèi)存快照,當(dāng)升級未按預(yù)期完成,或升級后不符合預(yù)期,可直接恢復(fù)內(nèi)存快照,將軟件快速回滾至升級之前的狀態(tài)。
對于業(yè)務(wù)連續(xù)性要求苛刻的系統(tǒng),如需進(jìn)行升級或調(diào)整(不關(guān)機(jī)),可先創(chuàng)建內(nèi)存快照,保證應(yīng)用一致性,再開始進(jìn)行業(yè)務(wù)變更。若突發(fā)異常,則可直接恢復(fù)內(nèi)存快照,將業(yè)務(wù)系統(tǒng)快速恢復(fù)至升級或調(diào)整之前的狀態(tài)。
五 結(jié)束語
云軸科技ZStack作為一家自主創(chuàng)新、專注產(chǎn)品化的云計算公司,打造好用的云產(chǎn)品,降低用戶云計算使用門檻,是我們一直以來秉持的理念和踐行方向。內(nèi)存快照功能的推出,讓ZStack Cloud快照功能更加完善,進(jìn)一步保證用戶數(shù)據(jù)完整性。未來,我們會繼續(xù)推出更多豐富好用的云計算產(chǎn)品功能,為用戶創(chuàng)造價值。
