本发明涉及云计算领域,特别是一种对在线虚拟机的磁盘进行快照的方法。
背景技术:
云计算平台中,对虚拟机进行快照是一种备份虚拟机状态的重要操作,其中对虚拟机的磁盘进行快照又是其中的重点。
常规的快照手段存在以下不足:
一、如果要保证数据安全和一致性,通常要关闭虚拟机再进行快照,而这对于某些无法中断的业务来说,是不可接受的;
二、如果不能关闭虚拟机导致业务中断,只能直接对磁盘进行快照,而这个操作很容易导致磁盘的数据一致性损坏,轻则会导致要进行文件系统修复,重则会导致文件系统直接损坏,系统无法引导,数据丢失。
技术实现要素:
本发明解决的技术问题在于提供一种对在线虚拟机的磁盘进行快照的方法;确保可以安全地进行虚拟机磁盘的在线快照。
本发明解决上述技术问题的技术方案是:
包括如下步骤:
步骤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冻结文件系统