一种虚拟机存储同步方法
【专利摘要】本发明涉及一种基于共享虚拟磁盘的虚拟机存储同步方法。本发明首先把虚拟磁盘镜像存储于共享存储中,采用快照的方式运行虚拟机;然后,获取内存脏页位图,获取脏页位图在虚拟机逻辑空间中的地址;得到该页面在物理机内存空间中的真实地址,将这些内存脏页封装成数据包发送至备虚拟机;将该页面映射到虚拟机的逻辑空间的相同地址;最后,备虚拟机向主虚拟机返回信息,完成此次同步。本发明提出的基于虚拟磁盘的虚拟机存储同步方法,解决了目前虚拟机容错时存储同步过程中发生的拷贝时间长、系统开销大的问题;可以应用在虚拟机容错技术中。
【专利说明】
一种虚拟机存储同步方法
技术领域
[0001]本发明涉及云计算技术领域,特别是一种基于共享虚拟磁盘的虚拟机存储同步方法。
【背景技术】
[0002]随着虚拟化技术运用于服务器中,越来越多的企业选择在虚拟化服务器上运行关键业务,以提尚关键业务运彳丁效率。人们在广泛使用虚拟机的同时,开始对虚拟机提出更尚的要求,高可靠性正是其中一个重要要求,虚拟机容错技术目前得到了广泛的应用。在虚拟机容错过程中对内存和存储的同步是两个最主要的方面。内存同步目前多采用定时内存脏页数据拷贝的方式,是一种比较成熟的技术。存储的同步由于双机热备方法要求主虚拟机和备虚拟机各自拥有独立的虚拟磁盘,因此备份时两块磁盘通过网络不断进行同步,保持内容的一致性。由于虚拟磁盘文件通常比较大,拷贝磁盘文件无疑要花费大量时间,这就增加了虚拟机容错的时间代价与空间代价,影响了系统的正常运行。
【发明内容】
[0003]本发明解决的技术问题在于一种基于共享虚拟磁盘的虚拟机存储同步方法;解决目前虚拟机容错时存储同步过程中发生的拷贝时间长、系统开销大的问题。
[0004]本发明解决上述技术问题的技术方案是,所述的方法包括以下步骤:
[0005]步骤1:把虚拟磁盘镜像存储于共享存储中,将此磁盘镜像文件作为母镜像;采用快照的方式运行虚拟机,子镜像数据保存在内存中;
[0006]步骤2:主虚拟机获取上一次同步后到这次同步时刻的虚拟机内存发生改变的内存脏页位图;
[0007]步骤3:获取步骤2中内存脏页位图在虚拟机逻辑空间中的地址;
[0008]步骤4:根据逻辑地址与物理机实际地址的对应表得到该页面在物理机内存空间中的真实地址,通过地址在物理机的内存空间中读出这些页面的数据后,将这些内存脏页封装成数据包发送至备虚拟机;
[0009]步骤5:备虚拟机收到主虚拟机传来的内存脏页数据包,保存在物理机的内存空间中,通过填写物理机实际地址与逻辑地址对应表,将该页面映射到虚拟机的逻辑空间的相同地址;
[0010]步骤6:备虚拟机向主虚拟机返回信息,完成此次同步。
[0011]所述内存脏页指的是相对于备虚拟机的内存来说,在主虚拟机上由于程序运行而导致的数据被重写过的内存页;
[0012]所述内存脏页位图指的是保存内存页面开始地址在虚拟机内存中偏移的数据结构;
[0013]所述获取内存脏页位图指的是通过对写内存的操作进行记录,得到每次写入的内存页的相对偏移并进行记录。
[0014]所述逻辑地址与物理机实际地址对应表指的是虚拟机内存地址到物理机内存地址的对照表,通过查询逻辑地址与物理机实际地址对应表可以把虚拟机内存地址转换成实际的物理机内存地址;
[0015]所述物理机实际地址与逻辑地址对应表指的是物理机内存地址到虚拟机内存地址的对照表,通过查询物理机实际地址与逻辑地址对应表可以把实际的物理机内存地址转换成虚拟机内存地址。
[0016]本发明采用共享虚拟磁盘的方式,对内存脏页进行拷贝;解决了虚拟机容错的时间与空间需求大,容易影响系统正常运行的问题。
【附图说明】
[0017]下面结合附图对本发明进一步说明:
[0018]图1是本发明的流程图;
[0019]图2是本发明内存的增量拷贝原理图。
【具体实施方式】
[0020]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0021 ]本实现在双机热备工具remus的基础上基于Xen虚拟机实现虚拟机磁盘数据的同步。
[0022]首先仿照xc_domain_save()函数实现一个新的内存拷贝函数remus_domain_save()函数。到达某一同步时刻,双机开始进行同步,主虚拟机调用remus_domain_save(),备虚拟机仍调用1(3_(1011^;[11_^81:0^()函数。为了减少内存同步花费的时间代价,^1]1118_d0main_saVe()采用增量拷贝的方式,获取上一次同步后到这次同步时刻的虚拟机内存发生改变的内存脏页,将这些脏页封装成ckpt包发送至备虚拟机;备虚拟机接收ckpt包,并调用xc_domain_restore()函数将这些内存页面映射到自己的内存空间中,向主虚拟机返回信息,完成这次同步。内存的增量拷贝充分降低了为了同步的内存页面传输的时间代价。
[0023]内存的增量拷贝的实现主要用到Xen虚拟机的影子页表技术,原理见图2。
[0024]影子页表对于DomU是只读的,当Dom U对内存页内容进行修改时,页表脏位将会改变,影子页表也要进行相应的改变,但Dom U无权修改影子页表,所以会触发页错误。XenHypervisor检测到页错误,对页表进行检查,Dom U是否有权对相应页表项对应的内存页面进行修改。如果允许Dom U对页面进行修改,则将影子页表中对应页表项对Dom U的权限改为可写,同时在影子页表的脏页位图中记录被修改的内存脏页。Dom U才可以对相应内存页面进行修改。通过影子页表的机制,Xen虚拟机将所有修改过的内存脏页都进行了记录。并且提供了xc_shadow_control ()函数对脏页位图进行读取和清空操作。使用参数Xen_001?:11_3说00¥_0?_0^4奶周用1(3_81^(10¥_(3011壮01()函数时将会把脏页位图读取到指定的位图结构中,同时清空影子页表的脏页位图。通过影子页表机制和xc_shadow_control()函数可以获得两次同步时刻之间的内存脏页,在进行内存的每次同步时不需拷贝全部内存页面,只要拷贝两次同步时刻之间改变的内存脏页即可,这种内存拷贝方法就是内存的增量拷贝。
[0025]得到脏页位图后根据位图中的位置可以得到被修改的内存页面在虚拟机逻辑空间中的地址。然后查询Xen虚拟机提供的p2m表,即逻辑地址与物理机实际地址的对应表,通过查询p2m表可得到该页面在物理机内存空间中的真实地址,可以进行该页面的传输。备虚拟机收到主虚拟机传来的内存页面,保存在物理机的内存空间中,通过填写m2p表,将该页面映射到虚拟机的逻辑空间的相同地址,以后当备份虚拟机开始运行时即可被正常使用。
【主权项】
1.一种虚拟机存储同步方法,其特征在于,所述的方法包括以下步骤: 步骤1:把虚拟磁盘镜像存储于共享存储中,将此磁盘镜像文件作为母镜像;采用快照的方式运行虚拟机,子镜像数据保存在内存中; 步骤2:主虚拟机获取上一次同步后到这次同步时刻的虚拟机内存发生改变的内存脏页位图; 步骤3:获取步骤2中内存脏页位图在虚拟机逻辑空间中的地址; 步骤4:根据逻辑地址与物理机实际地址的对应表得到该页面在物理机内存空间中的真实地址,通过地址在物理机的内存空间中读出这些页面的数据后,将这些内存脏页封装成数据包发送至备虚拟机; 步骤5:备虚拟机收到主虚拟机传来的内存脏页数据包,保存在物理机的内存空间中,通过填写物理机实际地址与逻辑地址对应表,将该页面映射到虚拟机的逻辑空间的相同地址; 步骤6:备虚拟机向主虚拟机返回信息,完成此次同步。2.根据权利要求1所述的虚拟机存储同步方法,其特征在于,所述内存脏页指的是相对于备虚拟机的内存来说,在主虚拟机上由于程序运行而导致的数据被重写过的内存页; 所述内存脏页位图指的是保存内存页面开始地址在虚拟机内存中偏移的数据结构; 所述获取内存脏页位图指的是通过对写内存的操作进行记录,得到每次写入的内存页的相对偏移并进行记录。3.根据权利要求1或2所述的虚拟机存储同步方法,其特征在于,所述逻辑地址与物理机实际地址对应表指的是虚拟机内存地址到物理机内存地址的对照表,通过查询逻辑地址与物理机实际地址对应表可以把虚拟机内存地址转换成实际的物理机内存地址; 所述物理机实际地址与逻辑地址对应表指的是物理机内存地址到虚拟机内存地址的对照表,通过查询物理机实际地址与逻辑地址对应表可以把实际的物理机内存地址转换成虚拟机内存地址。
【文档编号】G06F3/06GK105824689SQ201610196623
【公开日】2016年8月3日
【申请日】2016年3月30日
【发明人】莫展鹏, 杨松, 季统凯
【申请人】国云科技股份有限公司