专利名称:一种使用虚拟机来实现系统的备份以及灾难恢复的方法
技术领域:
本发明涉及计算机系统相关领域,尤其是涉及到一种使用虚拟机来实现系统的备份以及灾难恢复的方法。
背景技术:
在计算机系统的运行过程当中,计算机系统以及它的组件会遭受到各种各样的故障,这些故障会导致计算机系统数据的丢失。例如,一个计算机系统的一个存储设备也许会突然发生故障(如突然停电),会导致存储在设备上的数据无法读取。对软件或硬件错误的操作会导致存储设备上数据的错误,并且任何其它和该存储设备有关联的计算机系统或组件也许都会因为该数据错误而出现故障。为了减少数据丢失的风险,计算机系统的使用者会将数据拷贝成多份并保存到不同的存储设备上。另一方面,使用者会经常的将一些相应的备份软件安装到计算机系统当中,在计算机系统的使用过程当中,备份软件会自动定时的对计算机系统进行备份。但是在很多情况下,某一个或多个应用也许正在被使用,这个时候备份程序忽然执行了,这些应用程序也许正打开一个或多个文件,这时备份程序想要访问这些文件是不被允许的,从而导致备份文件的失败。因此,一些备份软件会为各种应用程序定义很多代码库,通过代码库,备份程序尝试与应用程序进行通信或者通过产生一些触发装置致使应用程序将数据提交给文件从而使得这些文件可以被备份软件进行备份。但是,当应用程序发生改变的时候(例如应用程序版本发生改变),备份程序也要进行相应的改变。另一方面,一些其它文件(例如windows的注册表)会被经常的打开,因此很难进行备份。在很多情况下,灾难恢复配置被用来对于因为故障而产生的数据丢失提供额外的保护,这些故障不仅仅是由计算机系统本身产生还包括系统周围的环境因素(例如忽然断电,发生火灾)。在灾难恢复配置中,数据的状态会通过状态检测包周期性的从某一计算机系统发送到另一计算机系统,在某些情况下,第二个计算机系统在物理位置上会远离第一个计算机系统。假如第一个计算机系统发生了故障不能使用,数据会安全的存储到第二个计算机系统当中。还有在一些情况下,当第一个计算机系统发生了故障不能使用时,运行在第一个计算机系统上的应用会自动在第二个计算机系统当中重启并继续处理数据。但是, 运行在计算机系统上的灾难恢复软件会遇到一些问题,这些问题与备份软件有着相似的情况。当应用程序正打开或使用某些文件的时候,灾难恢复软件同时对该文件进行读取并生成检测包,从而会有冲突发生,应用程序会阻止灾难恢复软件对文件读取,导致生成状态检测包失败。除此之外,如果要在第二个计算机系统重启运行在第一个计算机系统上的应用, 需要将该应用的所有运行状态复制到第二个计算机系统上,而这个过程是非常复杂的。
发明内容
鉴于现有计算机系统备份以及灾难恢复的缺陷,本发明的目的是提出使用Xen虚拟机来实现计算机系统的备份以及灾难恢复。—种使用虚拟机来实现系统的备份以及灾难恢复的方法,在Iinux操作系统上安装有Xen虚拟机,此方法包括灾难恢复步骤
(21)对虚拟机进行监控,捕获虚拟机当前的状态;
(22)拷贝需要进行灾难恢复的虚拟机镜像至灾难恢复节点;
(23)周期性拷贝当前虚拟机状态至灾难恢复节点;
(24)虚拟机发生故障,灾难恢复节点恢复虚拟机状态。上述方法还包括备份步骤
(11)对虚拟机进行监控,捕获虚拟机当前的状态;
(12)对虚拟机进行挂起操作;
(13)拷贝虚拟机镜像;
(14)恢复虚拟机运行状态。所述计算机的操作系统包含一个域0,域0是一个修改过的Linux内核,是唯一运行在Xen管理程序之上的虚拟机,它拥有访问物理I/O资源的权限,同时和系统上运行的其他虚拟机进行交互,可以构建多个虚拟机,并管理虚拟设备,能够对虚拟机进行挂起等管理任务;在本系统当中,将用户需要使用的计算机系统安装到虚拟机域1上,在域1上可以运行一个或多个应用程序,将备份程序和策略执行程序安装到域0的虚拟机当中。其中步骤(11)中,通过Xen虚拟机域0对各个虚拟机进行监控,并周期性的获取各虚拟机运行状态。其中步骤(12)中,通过Xen虚拟机域0对各个虚拟机进行管理,当需要对虚拟机状态进行备份的时候,对虚拟机进行挂起操作。其中步骤(14)中,当(13)步骤完成后,通过Xen虚拟机域0恢复虚拟机运行状态。其中步骤(22)中,在进行灾难恢复前,需要事先将虚拟机的镜像拷贝至灾难恢复节点上,当灾难恢复开始进行的时候,灾难恢复节点可以通过该镜像创建一个新的虚拟机, 当原虚拟机发生故障的时候,新的虚拟机能够接管原虚拟机的运行状态,从而保证运行在原虚拟机上的应用程序不间断的运行。其中步骤(23)中,灾难恢复节点上的新虚拟机要与原虚拟机状态保持一致,因此需要将原虚拟机的运行状态复制到新虚拟机上,通过状态检测包周期性的将原虚拟机状态拷贝到新虚拟机上,通过状态检测包还可以判定原虚拟机是否发生故障。其中步骤(24)中,当步骤(23)中周期性检测包中断后,系统会判定原虚拟机以及发生故障,系统会自动激活新虚拟机来接管原虚拟机的运行状态,从而保证系统正常运行。本发明通过Xen虚拟机对计算机系统进行备份和灾难恢复,在备份和灾难恢复的过程当中,只需要对运行计算机系统的虚拟机进行备份和灾难恢复即可,不需要额外的安装备份软件以及灾难恢复软件,减少了对于备份软件以及灾难恢复软件的维护与升级所带来的时间和成本支出,能够有效的避免对于传统的备份和灾难恢复方法过程当中遇到的例如文件读取冲突等问题。
图1为单一计算机系统结构示意图;图2为图1计算机系统备份过程详细流程图3为双计算机系统结构示意图,其中计算机系统2为计算机系统1的灾难恢复节点; 图4为图3系统灾难恢复过程详细流程图。
具体实施例方式为了使本发明的特征及优点得到更清楚的了解,以下结合附图,作详细说明如下 如图1所示,描述了在Iinux操作系统上安装完Xen虚拟机后单一计算机系统结构示意图, 该系统包含一个域0 (Domain 0),域0是一个修改过的Linux kernel (内核),是唯一运行在Xen Hypervisor (管理程序)之上的虚拟机,它拥有访问物理I/O资源的权限,同时和系统上运行的其他虚拟机进行交互,它拥有特殊的管理权限,它可以构建多个虚拟机,并管理虚拟设备,能够对虚拟机进行挂起等管理任务。在本系统当中,将用户需要使用的计算机系统安装到虚拟机域1上,在域1上可以运行一个或多个应用程序。将备份程序和策略执行程序安装到域O的虚拟机当中,策略执行程序可以使用C语言或脚本语言进行编写, 主要负责执行用户自定义的备份策略,通过读取备份策略信息定时的调用域O上的备份程序。备份程序可以使用C语言进行编写,使用C语言能够很好的对libvirt(虚拟化工具的 C函数库)库中的函数进行调用,操作虚拟机比较方便,备份程序需要实现以下几个动作监控虚拟机状态、备份虚拟机、恢复虚拟机,自动拷贝虚拟机镜像等。其具体步骤说明如下
1) 如图2所示,当对虚拟机应用程序进行备份时,其根据定义的备份策略进行操作,在这个备份策略当中,定义备份程序的开启时间,以及每天备份的次数,哪些虚拟机需要进行备份,制定完备份策略后,将备份策略的信息保存到域O中的策略备份文件上,该文件可以是普通的文件,也可以是XML类型的文件,使用XML文件保存策略信息比较规范,程序读取比较方便。运行策略执行程序,策略执行程序会读取策略备份文件上的信息,从而计算出备份程序需要开启时间,通过定时机制,程序在开启时间点自动启动域O上的备份程序。2 ) 通过步骤1开启域O虚拟机上的备份程序以后,为了保证虚拟机状态的完整性,备份程序会首先调用libvirt (虚拟化工具的C函数库)库中virDomainSuspend (控制域)函数对运行在系统中的虚拟机进行挂起操作。3) 步骤2中挂起操作完成后,域0虚拟机上的备份程序会通过SSH (安全外壳协议)方式将该虚拟机的镜像文件拷贝至备份存储设备上。4) 当步骤3中将虚拟机镜像拷贝完成后,域0上的备份程序会调用libvirt库中VirDomainResume函数恢复虚拟机,虚拟机正常运行。5) 通过域O虚拟机上的备份程序判断是否所有虚拟机都已完成备份,若都已完成,则退出,否则选择下一个虚拟机,重复2-4步骤。其中,在步骤1当中,用户可以根据自身的需求以及所拥有的硬件条件制定出适合自己的备份策略,每天一次或多次开启备份程序对虚拟机进行备份。其中,在步骤2当中,备份程序可以通过1 ibvirt虚拟化库提供的接口对虚拟机进行挂起操作,除此之外,用户也可以通过调用命令方式对虚拟机进行挂起操作,使用virsh 命令行或者使用)(en自带的命令行进行操作。其中,步骤3拷贝虚拟机镜像文件至备份存储设备上,备份存储设备为外部存储设备,如图1所示,为了防止计算机系统本身的存储磁盘发生故障,备份存储设备要与原虚拟机镜像存储设备进行分离,两者不能存放在一起。如图3所示,描述了在Iinux操作系统上安装完Xen虚拟机后双计算机系统结构示意图,计算机系统1、2都包含一个域0 (Domain 0),域0是一个修改过的Linux kernel,是唯一运行在Xen Hypervisor之上的虚拟机,它拥有访问物理I/O资源的权限, 同时和系统上运行的其他虚拟机进行交互,它拥有特殊的管理权限,它可以构建多个虚拟机,并管理虚拟设备,能够对虚拟机进行挂起等管理任务。其中计算机系统2为计算机系统 1的灾难恢复节点,计算机系统2与计算机系统1有着相似的运行环境,当计算机系统1上的虚拟机域1发生故障的时候,计算机系统2上的虚拟机域1可以接管运行在计算机系统 1上的虚拟机域1的应用,从而使得应用能够不间断的运行。在计算机系统1中域O当中安装周期性状态检测程序,镜像拷贝程序。计算机系统2中域O运行虚拟机灾难恢复程序。 在实际应用部署当中,计算机系统2作为灾难恢复节点,可以对多个计算机系统1这样的系统节点进行灾难恢复,但是为了简化说明,在本文当中,计算机系统2只对计算机系统1进行灾难恢复,其具体步骤如下所示
1) 如图4所示,首先开启系统灾难恢复程序,选定需要进行灾难恢复保护的虚拟机,如图3所示需要进行保护的虚拟机为计算机系统1上的虚拟机域1,开启灾难保护后, 计算机系统2上新建虚拟机域1作为虚拟机灾难恢复节点。运行在计算机系统1域O上的镜像自动拷贝程序会通过SSH方式将运行在计算机系统1上的虚拟机域1的镜像拷贝到计算机系统2上的存储设备上。在计算机系统2上启动虚拟机域1,设其状态为暂停状态。2) 步骤1完成后,在计算机系统1中域O上,启动发送检测包程序,在第一次发送过程,需要复制计算机系统1域1的完整状态(包括CPU指令、磁盘缓存请求、内存事件、网络包等),拷贝至计算机系统2上域1上,加载至计算机系统域1内存中。3) 步骤2完成后,计算机系统1域O上检测包发送程序会周期性的复制计算机系统域1上修改过的内存页,加载到状态检测包当中,并将状态检测包发送至计算机系统2虚拟机域1上。4) 计算机系统2虚拟机域1周期性的接收状态检测包,加载状态检测包中的内存页信息,根据状态检测包,可以判定计算机系统1域1是否发生故障,当状态包停止发送,则激活灾难恢复节点上的虚拟机。其中,步骤1将虚拟机镜像拷贝到计算机系统2上的存储设备上,拷贝到计算机系统2上的镜像的存放路径必须与计算机系统1存放路径一致。随着Xen虚拟机的不断发展,Xen虚拟机的性能方面也在不断的提升,在Xen虚拟机上运行系统和应用与在实际物理机上运行系统和应用在性能方面差距正在不断减少,特别是在Xen4. 0版本开始,Xen虚拟机增加了 Remus模块,提供了热备的相关功能,对于系统的灾难恢复提供了很大的帮助。其中,步骤2、3可以使用Xen的Remus模块来实现,使用 Remus可以对虚拟机的运行状态进行精确的拷贝,Remus通过缓存在200毫秒间隔内将所有网络数据包发送到目的地。其中,步骤4可以使用Xen自带虚拟机恢复模块来实现,当在指定时间内没有接收到计算机系统1发送过来的状态检测包时,此时系统会判定计算机系统1已经发生故障。计算机系统2会自动调用虚拟机恢复模块来激活虚拟机,从而实现系统的灾难恢复。
以上所述的实例对本发明的各个部分的实现方式作了详细的说明,但是本发明的具体实现形式并不局限于此,对于本技术领域的一般技术人员来说,在不背离本发明所述方法的精神和权利要求范围的情况下对它进行的各种显而易见的改变都在本发明的保护范围之内。
权利要求
1.一种使用虚拟机来实现系统的备份以及灾难恢复的方法,其特征是=Iinux操作系统上安装有Xen虚拟机,操作系统进行了备份操作,灾难恢复方法包括步骤(21)对虚拟机进行监控,捕获虚拟机当前的状态;(22)拷贝需要进行灾难恢复的虚拟机镜像至灾难恢复节点;(23)周期性拷贝当前虚拟机状态至灾难恢复节点;(24)虚拟机发生故障,灾难恢复节点恢复虚拟机状态。
2.如权利要求1所述方法,其特征在于备份步骤为(11)对虚拟机进行监控,捕获虚拟机当前的状态;(12)对虚拟机进行挂起操作;(13)拷贝虚拟机镜像;(14)恢复虚拟机运行状态。
3.如权利要求2所述方法,其特征在于所述操作系统包含一个域0,域0是一个修改过的Linux内核,是唯一运行在Xen管理程序之上的虚拟机,它拥有访问物理I/O资源的权限,同时和系统上运行的其他虚拟机进行交互,构建多个虚拟机,并管理虚拟设备,对虚拟机进行挂起等管理任务;在本系统当中,将用户需要使用的计算机系统安装到虚拟机域 1上,在域1上运行一个或多个应用程序,将备份程序和策略执行程序安装到域0的虚拟机当中。
4.如权利要求3所述方法,其特征在于步骤(11),通过Xen虚拟机域0对各个虚拟机进行监控,并周期性的获取各虚拟机运行状态。
5.如权利要求3所述方法,其特征在于步骤(12)中,通过Xen虚拟机域0对各个虚拟机进行管理,对虚拟机状态进行备份时,调用虚拟化工具的C函数库中控制域函数对虚拟机进行挂起操作。
6.如权利要求3所述方法,其特征在于步骤(14)中,当(13)步骤完成后,通过Xen虚拟机域0调用虚拟化工具的C函数库中控制域函数恢复虚拟机运行状态。
7.如权利要求3所述方法,其特征在于步骤(22)中,在进行灾难恢复前,需要事先将虚拟机的镜像拷贝至灾难恢复节点上,当灾难恢复开始进行的时候,灾难恢复节点可以通过该镜像创建一个新的虚拟机,当原虚拟机发生故障的时候,新的虚拟机能够接管原虚拟机的运行状态,从而保证运行在原虚拟机上的应用程序不间断的运行。
8.如权利要求3所述方法,其特征在于步骤(23)中,灾难恢复节点上的新虚拟机要与原虚拟机状态保持一致,因此需要将原虚拟机的运行状态复制到新虚拟机上,通过状态检测包周期性的将原虚拟机状态拷贝到新虚拟机上,通过状态检测包还可以判定原虚拟机是否发生故障。
9.如权利要求3所述方法,其特征在于步骤(24)中,当步骤(23)中周期性检测包中断后,系统会判定原虚拟机以及发生故障,系统会自动激活新虚拟机来接管原虚拟机的运行状态,从而保证系统正常运行。
10.如权利要求3所述方法,其特征在于步骤(13)中,所述域0虚拟机上的备份程序会通过安全外壳协议方式将该虚拟机的镜像文件拷贝至备份存储设备上。
全文摘要
本发明提出了一种使用虚拟机来实现系统的备份以及灾难恢复的方法。本发明利用Xen虚拟机的Remus模块对计算机系统进行灾难恢复,利用所有虚拟机通用的libvirt库对计算机系统进行备份,对运行计算机系统的虚拟机进行灾难恢复和备份时,不需要额外的安装灾难恢复以及备份软件,减少了对于灾难恢复程序以及备份程序的维护与升级所带来的时间和成本支出,能够有效的避免对于传统的灾难恢复和备份方法过程当中遇到的例如文件读取冲突等问题。
文档编号G06F9/455GK102541686SQ20111038720
公开日2012年7月4日 申请日期2011年11月29日 优先权日2011年11月29日
发明者兰雨晴, 夏颖, 宋潇豫, 蒋涛 申请人:中标软件有限公司