本發明涉及云計算領域,特別是一種對在線虛擬機的磁盤進行快照的方法。
背景技術:
云計算平臺中,對虛擬機進行快照是一種備份虛擬機狀態的重要操作,其中對虛擬機的磁盤進行快照又是其中的重點。
常規的快照手段存在以下不足:
一、如果要保證數據安全和一致性,通常要關閉虛擬機再進行快照,而這對于某些無法中斷的業務來說,是不可接受的;
二、如果不能關閉虛擬機導致業務中斷,只能直接對磁盤進行快照,而這個操作很容易導致磁盤的數據一致性損壞,輕則會導致要進行文件系統修復,重則會導致文件系統直接損壞,系統無法引導,數據丟失。
技術實現要素:
本發明解決的技術問題在于提供一種對在線虛擬機的磁盤進行快照的方法;確保可以安全地進行虛擬機磁盤的在線快照。
本發明解決上述技術問題的技術方案是:
包括如下步驟:
步驟1:云平臺控制器發送控制指令到虛擬機內部的執行代理程序;
步驟2:如果條件允許,虛擬機內部的代理程序凍結相關應用的IO并把應用層的緩存刷寫進磁盤;
步驟3:虛擬機內部的代理程序凍結虛擬機文件系統的IO,并把文件系統的緩存同步入磁盤里面;
步驟4:在宿主機對虛擬機磁盤快照完后,云平臺控制再次發送指令到虛擬機內部的代理,指示其解除對應用和文件系統IO的凍結。
2、根據權利要求1所述的方法,其特征在于:所述的云平臺控制器指的是IaaS平臺;可以通過是網絡、虛擬機串口或者直接通過類似virtio這種類虛擬化驅動框架直接傳給虛擬機操作系統指令;指令包含指示停止IO及同步緩存相關命令。
3、根據權利要求1所述的方法,其特征在于:所述的凍結相關應用由應用層面提供支持,包括glibc庫;以控制其IO緩存及讀寫動作。
4、根據權利要求2所述的方法,其特征在于:所述的凍結相關應用由應用層面提供支持,包括glibc庫;以控制其IO緩存及讀寫動作。
5、根據權利要求1至4任一項所述的方法,其特征在于:所述的凍結虛擬機文件系統IO及同步緩存由文件系統支持;linux平臺下使用sync及fsfreeze命令實現;windows平臺則使用VSS框架完成相關操作。
6、根據權利要求1至4任一項所述方法,其特征在于:所述的宿主機對虛擬機磁盤進行快照的方法取決于虛擬機磁盤格式或者虛擬機磁盤實現方案,基于LVM的方案可使用LVM本身的快照操作;基于ceph的方案可以采用rbd快照相關操作。
本發明的方法在不中斷業務情況下,安全的實現在線快照,可以保證在線備份也不會導致磁盤數據不一致;解決了數據不一致可能導致的數據損壞問題。
附圖說明
下面結合附圖對本發明進一步說明:
圖1為本發明的操作方法流程圖。
具體實施方式
本發明提出操作流程如下:
首先,云平臺控制器通過某種途徑發送控制指令到虛擬機內部的執行代理程序;某種途徑可以是通過網絡、通過虛擬機串口、或者通過類似virtio這類安裝在虛擬機內部的類虛擬化框架,把要執行IO凍結、緩存同步相關命令發送到虛擬機內部運行的一個代理程序;
然后,如果條件允許,虛擬機內部的代理程序執行命令,凍結相關應用的IO并把應用層的緩存刷寫進磁盤;條件允許指的是,不是所有虛擬機上的應用都有進行修改和被控制的條件。如果有條件,則執行此步操作,可以使數據一致性保證到應用層面;如果不做此操作,則只是保證達到系統層面;
再然后,虛擬機內部的代理程序執行命令,凍結虛擬機文件系統的IO,并把文件系統的緩存同步入磁盤里面;以linux平臺為例子,可以直接執行fsfreeze命令凍結文件系統,再執行sync同步緩存;
最后,在宿主機對虛擬機磁盤快照完后,云平臺控制再次發送指令到虛擬機內部的代理,指示其解除對應用和文件系統IO的凍結;
云平臺控制器指的是IaaS平臺;通過某種途徑發送指令,途徑可以是網絡,虛擬機串口或者直接通過類似virtio這種類虛擬化驅動框架直接傳給虛擬機操作系統;指令包含指示停止IO及同步緩存相關命令。
凍結虛擬機內部關鍵應用是需要應用層面支持的,比如應用使用我們改造過glibc庫(windows平臺同理),這樣就可以控制其IO緩存及讀寫動作了。
凍結虛擬機文件系統IO及同步緩存,需要文件系統支持,linux平臺下一般都可以用sync及fsfreeze命令來實現,windows平臺則可以使用VSS(卷影復制服務)框架來完成相關操作。
在宿主機對虛擬機磁盤進行快照的方法,取決于虛擬機磁盤格式,或者虛擬機磁盤實現方案,比如基于LVM的方案可以使用LVM本身的快照操作,基于ceph的方案可以采用rbd快照相關操作。
如圖1所示,云平臺控制器在不同階段發送命令到虛擬機內部代理,執行不同的操作,代碼如下:
在云平臺控制器端的邏輯,發送命令控制文件系統IO:
虛擬機內部agent凍結文件系統