发明内容
本发明实施例提供本发明提出一种虚拟机的状态信息同步的方法,可以缩短主虚拟机的暂停时间,提高主虚拟机的计算性能。本发明实施例还提供了相应的装置及***。
本发明第一方面提供一种虚拟机的状态信息同步的方法,所述方法应用于虚拟机容错***,所述虚拟机容错***包括源主机和目的主机,所述源主机上运行有主虚拟机,所述目的主机上运行有备虚拟机,在所述源主机向所述目的主机同步所述主虚拟机的状态信息时,所述方法包括:
暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述源主机的存储器;
启动运行处于暂停状态的所述主虚拟机;
在所述主虚拟机处于运行状态的同时,从所述存储器中获取所述主虚拟机的状态信息,并将所述主虚拟机的状态信息向所述目的主机发送,以便所述目的主机根据所述主虚拟机的状态信息更新所述备虚拟机的状态。
结合第一方面,在第一种可能的实现方式中,所述暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述源主机的存储器时或之后,所述方法还包括:
为所述主虚拟机输出的网络数据包设置标记,所述标记用于指示所述网络数据包为上次所述主虚拟机启动后与本次所述主虚拟机暂停的时间间隔内所述主虚拟机所产生的网络数据包;
接收所述目的主机发送的确认消息,所述确认消息用于指示所述目的主机已接收到所述主虚拟机的状态信息;
根据所述确认消息,将设置有所述标记的网络数据包从所述源主机中输出。
结合第一方面第一种可能的实现方式,在第二种可能的实现方式中,所述接收所述目的主机发送的确认消息之后,所述方法还包括:
根据所述确认消息,删除所述存储器中存储的所述主虚拟机的状态信息。
本发明第二方面提供一种虚拟机的状态信息同步的装置,所述装置应用于虚拟机容错***,所述虚拟机容错***包括源主机和目的主机,所述源主机上运行有主虚拟机和所述装置,所述目的主机上运行有备虚拟机,所述装置包括:
第一控制单元,用于在所述源主机向所述目的主机同步所述主虚拟机的状态信息时,暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述源主机的存储器;
第二控制单元,用于启动运行所述第一控制单元控制暂停的处于暂停状态的所述主虚拟机;
获取单元,用于在所述主虚拟机处于运行状态的同时,从所述存储器中获取所述第一控制单元控制存入的所述主虚拟机的状态信息;
发送单元,用于将所述获取单元获取的所述主虚拟机的状态信息向所述目的主机发送,以便所述目的主机根据所述主虚拟机的状态信息更新所述备虚拟机的状态。
结合第二方面,在第一种可能的实现方式中,所述装置还包括:设置单元和接收单元,
所述设置单元,用于在所述第一控制单元暂停所述主虚拟机时,为所述主虚拟机输出的网络数据包设置标记,所述标记用于指示所述网络数据包为上次所述主虚拟机启动后与本次所述主虚拟机暂停的时间间隔内所述主虚拟机所产生的网络数据包;
所述接收单元,用于接收所述目的主机发送的确认消息,所述确认消息用于指示所述目的主机已接收到所述主虚拟机的状态信息;
所述发送单元,用于根据所述接收单元接收的所述确认消息,将所述设置单元设置有所述标记的网络数据包从所述源主机中输出。
结合第二方面第一种可能的实现方式,在第二种可能的实现方式中,所述装置还包括:
删除单元,用于根据所述接收单元接收的所述确认消息,删除所述存储器中存储的所述主虚拟机的状态信息。
本发明第三方面提供一种虚拟机的状态信息同步的方法,所述方法应用于虚拟机容错***,所述虚拟机容错***包括源主机和目的主机,所述源主机包括处理器、存储器和输入/输出I/O设备,所述源主机上运行有主虚拟机,所述目的主机上运行有备虚拟机,在所述源主机向所述目的主机同步所述主虚拟机的状态信息时,所述方法包括:
所述处理器暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述源主机的存储器;
所述处理器启动运行处于暂停状态的所述主虚拟机;
所述处理器在所述主虚拟机处于运行状态的同时,从所述存储器中获取所述主虚拟机的状态信息;
所述处理器触发所述源主机的所述输入/输出设备将所述主虚拟机的状态信息向所述目的主机发送,以便所述目的主机根据所述主虚拟机的状态信息更新所述备虚拟机的状态。
本发明第四方面提供一种源主机,所述源主机应用于虚拟机容错***,所述虚拟机容错***包括所述源主机和目的主机,所述源主机包括处理器、存储器和输入/输出I/O设备,所述源主机上运行有主虚拟机,所述目的主机上运行有备虚拟机,其特征在于,
所述处理器用于:
暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述存储器的存储器;
启动运行处于暂停状态的所述主虚拟机;
在所述主虚拟机处于运行状态的同时,从所述存储器中获取所述主虚拟机的状态信息;
触发所述源主机的所述输入/输出设备将所述主虚拟机的状态信息向所述目的主机发送,以便所述目的主机根据所述主虚拟机的状态信息更新所述备虚拟机的状态。
本发明第五方面提供一种虚拟机容错***,所述虚拟机容错***包括源主机和目的主机,所述源主机上运行有主虚拟机,所述目的主机上运行有备虚拟机;
所述源主机包括如上述任一技术方案所述的虚拟机的状态信息同步的装置,以及;
所述目的主机用于根据所述主虚拟机的状态信息更新所述备虚拟机的状态。
本发明第六方面提供一种虚拟机容错***,所述虚拟机容错***包括源主机和目的主机,所述源主机上运行有主虚拟机,所述目的主机上运行有备虚拟机,在所述源主机向所述目的主机同步所述主虚拟机的状态信息时,
所述源主机,用于在向所述目的主机同步所述主虚拟机的状态信息时,暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述源主机的存储器,启动运行处于暂停状态的所述主虚拟机,在所述主虚拟机处于运行状态的同时,从所述存储器中获取所述主虚拟机的状态信息,并将所述主虚拟机的状态信息向所述目的主机发送;
所述目的主机,用于根据接收到的所述主虚拟机的状态信息更新所述备虚拟机的状态。
结合第六方面,在第一种可能的实现方式中,
所述源主机还用于:在暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述源主机的存储器时或之后,为所述主虚拟机输出的网络数据包设置标记,所述标记用于指示所述网络数据包为上次所述主虚拟机启动后与本次所述主虚拟机暂停的时间间隔内所述主虚拟机所产生的网络数据包;
所述源主机还用于:接收所述目的主机发送的确认消息,所述确认消息用于指示所述目的主机已接收到所述主虚拟机的状态信息,并根据所述确认消息将设置有所述标记的网络数据包从所述源主机中输出。
本发明实施例采用的虚拟机的状态信息同步的方法,所述方法应用于虚拟机容错***,所述虚拟机容错***包括源主机和目的主机,所述源主机上运行有主虚拟机,所述目的主机上运行有备虚拟机,在所述源主机向所述目的主机同步所述主虚拟机的状态信息时,所述方法包括:暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述源主机的存储器;启动运行处于暂停状态的所述主虚拟机;在所述主虚拟机处于运行状态的同时,从所述存储器中获取所述主虚拟机的状态信息,并将所述主虚拟机的状态信息向所述目的主机发送,以便所述目的主机根据所述主虚拟机的状态信息更新所述备虚拟机的状态。与现有技术中暂停主虚拟机后,源主机向目的主机发送主虚拟机的状态信息,直到接收到目的主机发送的确认响应后,才会恢复主虚拟机运行,导致暂停主虚拟机的时间过长,计算性能差相比,本发明实施例提供的虚拟机的状态信息同步的方法,可以将虚拟机的状态信息存入存储器,然后启动主虚拟机运行,在所述主虚拟机处于运行状态时,再从存储器中获取主虚拟机的状态信息进行同步,这样,缩短了主虚拟机的暂停时间,从而提高了主虚拟机的计算性能。
具体实施方式
本发明实施例提供本发明实施例提供一种虚拟机的状态信息同步的方法,可以缩短主虚拟机的暂停时间,提高主虚拟机的计算性能。本发明实施例还提供了相应的装置及***。以下分别进行详细说明。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
为了方便理解本发明实施例,首先在此介绍本发明实施例描述中会引入的几个元素,如图1所示:
虚拟机VM:
通过虚拟机软件可以在一台物理主机上模拟出一台或者多台虚拟的计算机,而这些虚拟机就像真正的计算机那样进行工作,虚拟机上可以安装操作***和应用程序,虚拟机还可访问网络资源。对于在虚拟机中运行的应用程序而言,虚拟机就像是在真正的计算机中进行工作。
物理主机可以作为源主机,也可以作为目的主机,主虚拟机为运行在源主机上,且源主机的硬件正常时参与计算的虚拟机,备虚拟机为运行在目的主机上,在的源主机的硬件出现异常的情况下,接替主虚拟机的计算工作的虚拟机。
硬件层:
虚拟化环境运行的硬件平台。其中,硬件层可包括多种硬件,例如某计算节点的硬件层可包括处理器(如CPU)和内存,还可以包括网卡、存储器等高速或低速输入/输出(I/O,Input/Output)设备,及具有特定处理功能的其它设备,如输入输出内存管理单元(IOMMU,Input/Output Memory Management Unit),其中IOMMU可用于虚拟机物理地址和Host物理地址的转换。
宿主机(Host):
作为管理层,用以完成硬件资源的管理、分配;为虚拟机呈现虚拟硬件平台;实现虚拟机的调度和隔离。其中,Host可能是虚拟机监控器(VMM);此外,有时VMM和1个特权虚拟机配合,两者结合组成Host。其中,虚拟硬件平台对其上运行的各个虚拟机提供各种硬件资源,如提供虚拟CPU、内存、虚拟磁盘、虚拟网卡等等。其中,该虚拟磁盘可对应Host的一个文件或者一个逻辑块设备。虚拟机则运行在Host为其准备的虚拟硬件平台上,Host上运行一个或多个虚拟机。例如,图2所示的宿主机为Xen平台和特权虚拟机的结合,图3所示的宿主机为KVM平台和特权虚拟机的结合。
本发明实施例中,在虚拟机容错***中,包括源主机和目的主机,所述源主机上运行有主虚拟机,例如:图2或图3所示的Guest(M),所述目的主机上运行有备虚拟机,例如:图2或图3所示的Guest(S),在所述源主机向所述目的主机同步所述主虚拟机的状态信息时,如图2所示,Guest(M)相当于主虚拟机,Host(M)相当于特权虚拟机,Xen相当于主虚拟机监控器,Guest(M)存储器相当于主虚拟机的存储器,例如主虚拟机的虚拟硬盘,可以用于存储Guest(M)的镜像。Guest(S)相当于备虚拟机,Host(S)相当于特权虚拟机,Xen相当于备虚拟机监控器,Guest(S)存储器相当于备虚拟机的存储器,例如备虚拟机的虚拟硬盘,可以用于存储Guest(S)的镜像。
如图2所示的实施例中,源主机和目的主机上都分别运行了Xen虚拟化支持平台,图中虚线表示将源主机上的主虚拟机Guest(M)的虚拟机的状态信息同步到目的主机的备虚拟机Guest(S)上。在容错过程中,FT_M是源主机上Host(M)上的进程,而FT_S是目的主机上Host(S)的进程。本发明实施例所描述的过程在FT_M和FT_S中实现。
如图3所示的实施例中,源主机和目的主机上都分别运行了KVM虚拟化支持平台,图中虚线表示将源主机上的主虚拟机Guest(M)的虚拟机的状态信息同步到目的主机的备虚拟机Guest(S)上。在容错过程中,QEMU_M是源主机上Host(M)上的进程,而QEMU_S是目的主机上Host(S)的进程。本发明实施例所描述的过程在QEMU_M和QEMU_S中实现。
无论是在FT_M和FT_S中,还是在QEMU_M和QEMU_S中,本发明实施例中虚拟机的状态状态信息同步的过程基本相同的,具体同步过程可以参阅图4进行理解:
S100、为主虚拟机的状态信息分配存储器。
结合图2和图3所示的虚拟机容错***架构图下,确定用于存储虚拟机的状态信息的存储器,例如:可以分配图2或图3所示的Guest(M)存储器。本发明实施例中的实际上可以是分配存储器,也可以是分配缓存。
S105、等待N毫秒。
N毫秒为预设的虚拟机同步间隔。
S110、暂停主虚拟机。
暂停主虚拟机,可以保证后续状态同步的过程中,主虚拟机和备虚拟机状态一致。
S115、拷贝主虚拟机的状态信息到S100中所分配的存储器。
本发明实施例中主虚拟机的状态信息为主虚拟机的虚拟硬件信息,用于在源主机的物理硬件出现故障时,备虚拟机根据源主机同步到目的主机的所述主虚拟机的状态信息恢复出主虚拟机在步骤S110中暂停前的状态。
主虚拟机的状态信息可以为:主虚拟机内存、CPU、网卡、磁盘等信息。
S120、为所述主虚拟机输出的网络数据包设置标记。
所述标记用于指示所述网络数据包为上次所述主虚拟机启动后与本次所述主虚拟机暂停的时间间隔内所述主虚拟机所产生的网络数据包。。
S125、恢复主虚拟机的运行。
在将主虚拟机的状态信息同步到备虚拟机的过程中,先将主虚拟机的状态信息存入存储器,然后立刻恢复主虚拟机的运行,减少了主虚拟机暂停的时间,从而提高了主虚拟机的性能。
S130、从存储器中获取主虚拟机的状态信息,并将所述主虚拟机的状态信息发送到目的主机。
在源主机和目的主机之间传输数据可以通过以太网络进行数据传输。
S135、目的主机接收主虚拟机的状态信息。
S140、目的主机向源主机发送确认消息。
目的主机通过确认消息,通知所述源主机所述目的主机已接收到所述主虚拟机的状态信息。
主虚拟机的状态信息可以是分多个数据包发送到目的主机,目的主机先缓存接收到的数据包,直到所述主虚拟机的状态信息完全接收到,才向源主机发送确认消息。
S145、源主机接收所述目的主机发送的确认消息。
S150、目的主机在执行S140后,可以根据接收的主虚拟机的状态信息更新备虚拟机的状态,具体更新过程可以是用本次接收到的主虚拟机的状态信息替换上次接收到的主虚拟机的状态信息。
S155、接收到确认消息后,可以清空存储器,并将步骤S120中设置标记的网络数据包输出所述源主机。
本发明实施例中,输出设置有标记的网络数据包是指将带标记的网络数据包从所述源主机输出,这些带标记的网络数据包可以通过路由器等设备被转发到目的设备(需注意的是,这里的目的设备是用于接收并处理该网络数据包的设备,而非本发明实施例中用于宿主有迁移过来的虚拟机的目的主机)。在接收到确认消息后再输出带标记的网络数据包,可以保证主虚拟机和备虚拟机对外输出的一致性,具体可以理解为:在同步主虚拟机的状态信息的过程中源主机的物理硬件出现故障,备虚拟机会根据上一次同步来的主虚拟机的状态信息重新产生与设置有标记的网络数据包相同的网络数据包,由目的主机向外输出这些相同的网络数据包,源主机上的设置有标记的网络数据包就会随着源主机物理硬件的故障而被丢弃,从而保证对接收这些网络数据包的目的设备数据接收的连续性,不会接收到重复的网络数据包,如果在源主机接收到确认消息后,源主机的物理硬件出现故障,则目的主机会根据刚同步过来的主虚拟机的状态信息接替主虚拟机的工作,不会再产生源主机中设置有标记的网络数据包,而是产生虚拟机启动后再运行所产生的网络数据包,这样,源主机在接收到确认消息后已经将带标记的网络数据包输出到目的设备,依然可以保持目的设备数据接收的连续性。
这个过程相当于主虚拟机在执行一个业务,且执行该业务需要暂停多次主虚拟机时,从刚开始执行业务的主虚拟机的状态A0到主虚拟机的状态A1,对应产生一个数据包B1,可以表述为A1对应B1,实际上B1是在主虚拟机启动运行时主虚拟机的状态A0到下次暂停时所述主虚拟机的状态A1的时间段内产生的,以此类推,An对应Bn,n大于1,例如:在同步A2时,则标记B2,如果在同步A2过程中,源主机硬件故障,则B2在源主机中就被丢弃了,目的主机根据前一次同步过来的A1,从A1状态重新开始运算,重新产生B2,如果在A2同步完成后,B2已经从源主机输出后源主机硬件故障,则源主机丢弃的是在同步A2过程中新产生的数据包B3,目的主机直接根据刚同步过来的A2,从A2状态重新开始运算,从新产生B3,这样,无论是在什么时候源主机故障,主虚拟机和备虚拟机对外部网络中的目的设备输出的网络数据包都是连续的,不会出现重复网络数据包。
在容错过程中,源主机硬件出现故障时,主虚拟机无法正常运行,源主机则会通知目的主机启动备虚拟机,指示由备虚拟机来接替主虚拟机的计算工作。
备虚拟机接收到启动指令后,可以立即启动运行,因为备虚拟机的状态是主虚拟机故障前同步来的最新状态信息,所以备虚拟机可以根据更新的主虚拟机的状态信息启动运行,接替主虚拟机的计算工作。
参阅图5,本发明实施例提供的虚拟机的状态信息同步的方法的一实施例包括:
所述方法应用于虚拟机容错***,所述虚拟机容错***包括源主机和目的主机,所述源主机上运行有主虚拟机,所述目的主机上运行有备虚拟机,在所述源主机向所述目的主机同步所述主虚拟机的状态信息时,所述方法包括:
101、暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述源主机的存储器。
102、启动运行处于暂停状态的所述主虚拟机。
103、在所述主虚拟机处于运行状态的同时,从所述存储器中获取所述主虚拟机的状态信息,并将所述主虚拟机的状态信息向所述目的主机发送,以便所述目的主机根据所述主虚拟机的状态信息更新所述备虚拟机的状态。
本发明实施例采用的虚拟机的状态信息同步的方法,所述方法应用于虚拟机容错***,所述虚拟机容错***包括源主机和目的主机,所述源主机上运行有主虚拟机,所述目的主机上运行有备虚拟机,在所述源主机向所述目的主机同步所述主虚拟机的状态信息时,所述方法包括:暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述源主机的存储器;启动运行处于暂停状态的所述主虚拟机;在所述主虚拟机处于运行状态的同时,从所述存储器中获取所述主虚拟机的状态信息,并将所述主虚拟机的状态信息向所述目的主机发送,以便所述目的主机根据所述主虚拟机的状态信息更新所述备虚拟机的状态。与现有技术中暂停主虚拟机后,源主机向目的主机发送主虚拟机的状态信息,直到接收到目的主机发送的确认响应后,才会恢复主虚拟机运行,导致暂停主虚拟机的时间过长,计算性能差相比,本发明实施例提供的虚拟机的状态信息同步的方法,可以将虚拟机的状态信息存入存储器,然后启动主虚拟机运行,在所述主虚拟机处于运行状态时,再从存储器中获取主虚拟机的状态信息进行同步,这样,缩短了主虚拟机的暂停时间,从而提高了主虚拟机的计算性能。
可选地,在上述图5对应的实施例的基础上,本发明实施例提供的虚拟机的状态信息同步的方法的另一实施例中,所述暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述源主机的存储器时或之后,所述方法还包括:
为所述主虚拟机输出的网络数据包设置标记,所述标记用于指示所述网络数据包为上次所述主虚拟机启动后与本次所述主虚拟机暂停的时间间隔内所述主虚拟机所产生的网络数据包;
接收所述目的主机发送的确认消息,所述确认消息用于指示所述目的主机已接收到所述主虚拟机的状态信息;
根据所述确认消息,将设置有所述标记的网络数据包从所述源主机中输出。
本发明实施例中,输出设置有标记的网络数据包是指将标记的网络数据包从所述源主机输出,这些带标记的网络数据包可以通过路由器等设备被转发到目的设备(需注意的是,这里的目的设备是用于接收并处理该网络数据包的设备,而非本发明实施例中用于宿主有迁移过来的虚拟机的目的主机)。
在接收到确认消息后再输出带标记的网络数据包,可以保证主虚拟机和备虚拟机对外输出的一致性,具体可以理解为:在同步主虚拟机的状态信息的过程中源主机的物理硬件出现故障,备虚拟机会根据上一次同步来的主虚拟机的状态信息重新产生与设置有标记的网络数据包相同的网络数据包,由目的主机向外输出这些相同的网络数据包,源主机上的设置有标记的网络数据包就会随着源主机物理硬件的故障而被丢弃,从而保证对接收这些网络数据包的目的设备数据接收的连续性,不会接收到重复的网络数据包,如果在源主机接收到确认消息后,源主机的物理硬件出现故障,则目的主机会根据刚同步过来的主虚拟机的状态信息接替主虚拟机的工作,不会再产生源主机中设置有标记的网络数据包,而是产生虚拟机启动后再运行所产生的网络数据包,这样,源主机在接收到确认消息后已经将带标记的网络数据包输出到目的设备,依然可以保持目的设备数据接收的连续性。
可选地,在上述图5对应的可选实施例的基础上,本发明实施例提供的虚拟机的状态信息同步的方法的另一实施例中,所述接收所述目的主机发送的确认消息之后,所述方法还可以包括:
根据所述确认消息,删除所述存储器中存储的所述主虚拟机的状态信息。
本发明实施例中,在目的主机中完成备虚拟机的同步后,删除存储器中存储的主虚拟机的状态信息,可以释放存储空间。
可选地,在上述图5对应的实施例或可选实施例的基础上,本发明实施例提供的虚拟机的状态信息同步的方法的另一实施例中,
所述暂停所述主虚拟机之前,所述方法还包括:
为所述主虚拟机的状态信息确定所述存储器。
本发明实施例中,确定存储器也可以是从存储资源中为主虚拟机的状态信息分配缓存。
图5对应的虚拟机的状态信息同步的方法的几个实施例的具体过程可以参阅图1至图4中的相关描述进行理解,本处不做过多赘述。
参阅图6,本发明实施例提供的虚拟机的状态信息同步的装置的一实施例,所述装置应用于虚拟机容错***,所述虚拟机容错***包括源主机和目的主机,所述源主机上运行有主虚拟机和所述装置,所述目的主机上运行有备虚拟机,其特征在于,所述装置包括:
第一控制单元201,用于在所述源主机向所述目的主机同步所述主虚拟机的状态信息时,暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述源主机的存储器;
第二控制单元202,用于启动运行所述第一控制单元201控制暂停的处于暂停状态的所述主虚拟机;
获取单元203,用于在所述主虚拟机处于运行状态的同时,从所述存储器中获取所述第一控制单元201控制存入的所述状态信息;
发送单元204,用于将所述获取单元203获取的所述主虚拟机的状态信息发送到所述目的主机,以便所述目的主机根据所述主虚拟机的状态信息更新所述备虚拟机的状态。
本发明实施例中,第一控制单元201在所述源主机向所述目的主机同步所述主虚拟机的状态信息时,暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述源主机的存储器;第二控制单元202启动运行所述第一控制单元201控制暂停的处于暂停状态的所述主虚拟机;获取单元203在所述主虚拟机处于运行状态的同时,从所述存储器中获取所述第一控制单元控制存入的所述状态信息;发送单元204将所述获取单元203获取的所述主虚拟机的状态信息发送到所述目的主机,以便所述目的主机根据所述主虚拟机的状态信息更新所述备虚拟机的状态。与现有技术中暂停主虚拟机后,源主机向目的主机发送主虚拟机的状态信息,直到接收到目的主机发送的确认响应后,才会恢复主虚拟机运行,导致暂停主虚拟机的时间过长,计算性能差相比,本发明实施例提供的虚拟机的状态信息同步的装置,可以将虚拟机的状态信息存入存储器,然后启动主虚拟机运行,在所述主虚拟机处于运行状态时,再从存储器中获取主虚拟机的状态信息进行同步,这样,缩短了主虚拟机的暂停时间,从而提高了主虚拟机的计算性能。
可选地,在上述图6对应的实施例的基础上,参阅图7,本发明实施例提供的同步的装置的另一实施例中,所述同步的装置还包括:设置单元205和接收单元206,所述设置单元205,用于在所述第一控制单元201暂停所述主虚拟机时,为所述主虚拟机输出的网络数据包设置标记,所述标记用于指示所述网络数据包为上次所述主虚拟机启动后与本次所述主虚拟机暂停的时间间隔内所述主虚拟机所产生的网络数据包。
所述接收单元206,用于接收所述目的主机发送的确认消息,所述确认消息用于指示所述目的主机已接收到所述主虚拟机的状态信息;
所述发送单元204,用于根据所述接收单元206接收的所述确认消息,将所述设置单元设置有所述标记的网络数据包从所述源主机中输出。
本发明实施例中,从源主机输出设置有标记的网络数据包是指将标记的网络数据包从所述源主机输出,这些带标记的网络数据包可以通过路由器等设备被转发到目的设备(需注意的是,这里的目的设备是用于接收并处理该网络数据包的设备,而非本发明实施例中用于宿主有迁移过来的虚拟机的目的主机)。
在接收到确认消息后再输出带标记的网络数据包,可以保证主虚拟机和备虚拟机对外输出的一致性,具体可以理解为:在同步主虚拟机的状态信息的过程中源主机的物理硬件出现故障,备虚拟机会根据上一次同步来的主虚拟机的状态信息重新产生与设置有标记的网络数据包相同的网络数据包,由目的主机向外输出这些相同的网络数据包,源主机上的设置有标记的网络数据包就会随着源主机物理硬件的故障而被丢弃,从而保证对接收这些网络数据包的目的设备数据接收的连续性,不会接收到重复的网络数据包,如果在源主机接收到确认消息后,源主机的物理硬件出现故障,则目的主机会根据刚同步过来的主虚拟机的状态信息接替主虚拟机的工作,不会再产生源主机中设置有标记的网络数据包,而是产生虚拟机启动后再运行所产生的网络数据包,这样,源主机在接收到确认消息后已经将带标记的网络数据包输出到目的设备,依然可以保持目的设备数据接收的连续性。
可选地,在上述图7对应的实施例的基础上,参阅图8,本发明实施例提供的同步的装置的另一实施例中,所述同步的装置还包括:
删除单元207,用于根据所述接收单元206接收的所述确认消息,删除所述存储器中存储的所述主虚拟机的状态信息。
本发明实施例中,在目的主机中完成备虚拟机的同步后,删除存储器中存储的主虚拟机的状态信息,可以释放存储空间。
可选地,在上述图8对应的实施例的基础上,参阅图9,本发明实施例提供的同步的装置的另一实施例中,所述装置还包括:
确定单元208,用于在所述第一控制单元201暂停所述主虚拟机之前,为所述主虚拟机的状态信息确定所述存储器。
本发明实施例所提供的虚拟机的状态信息同步的装置可以参阅图1至图5部分的方法实施例的描述进行理解,本处不做过多赘述。
参阅图10,本发明实施例提供的虚拟机的状态信息同步的方法的一实施例包括:
所述方法应用于虚拟机容错***,所述虚拟机容错***包括源主机和目的主机,所述源主机包括处理器、存储器和输入/输出I/O设备,所述源主机上运行有主虚拟机,所述目的主机上运行有备虚拟机,在所述源主机向所述目的主机同步所述主虚拟机的状态信息时,其特征在于,所述方法包括:
所述处理器暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述源主机的存储器;
所述处理器启动运行处于暂停状态的所述主虚拟机;
所述处理器在所述主虚拟机处于运行状态的同时,从所述存储器中获取所述主虚拟机的状态信息;
所述处理器触发所述源主机的所述输入/输出设备将所述主虚拟机的状态信息向所述目的主机发送,以便所述目的主机根据所述主虚拟机的状态信息更新所述备虚拟机的状态。
与现有技术中暂停主虚拟机后,源主机向目的主机发送主虚拟机的状态信息,直到接收到目的主机发送的确认响应后,才会恢复主虚拟机运行,导致暂停主虚拟机的时间过长,计算性能差相比,本发明实施例提供的虚拟机的状态信息同步的方法,可以将虚拟机的状态信息存入存储器,然后启动主虚拟机运行,在所述主虚拟机处于运行状态时,再从存储器中获取主虚拟机的状态信息进行同步,这样,缩短了主虚拟机的暂停时间,从而提高了主虚拟机的计算性能。
可选地,本发明实施例提供的虚拟机的状态信息同步的方法的另一实施例中,所述暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述源主机的存储器时或之后,所述方法还可以包括:
所述处理器为所述主虚拟机输出的网络数据包设置标记,所述标记用于指示所述网络数据包为上次所述主虚拟机启动后与本次所述主虚拟机暂停的时间间隔内所述主虚拟机所产生的网络数据包;
接收所述目的主机发送的确认消息,所述确认消息用于指示所述目的主机已接收到所述主虚拟机的状态信息;
根据所述确认消息,将设置有所述标记的网络数据包从所述源主机中输出。
本发明实施例中,从源主机输出设置有标记的网络数据包是指将标记的网络数据包从所述源主机输出,这些带标记的网络数据包可以通过路由器等设备被转发到目的设备(需注意的是,这里的目的设备是用于接收并处理该网络数据包的设备,而非本发明实施例中用于宿主有迁移过来的虚拟机的目的主机)。
在接收到确认消息后再输出带标记的网络数据包,可以保证主虚拟机和备虚拟机对外输出的一致性,具体可以理解为:在同步主虚拟机的状态信息的过程中源主机的物理硬件出现故障,备虚拟机会根据上一次同步来的主虚拟机的状态信息重新产生与设置有标记的网络数据包相同的网络数据包,由目的主机向外输出这些相同的网络数据包,源主机上的设置有标记的网络数据包就会随着源主机物理硬件的故障而被丢弃,从而保证对接收这些网络数据包的目的设备数据接收的连续性,不会接收到重复的网络数据包,如果在源主机接收到确认消息后,源主机的物理硬件出现故障,则目的主机会根据刚同步过来的主虚拟机的状态信息接替主虚拟机的工作,不会再产生源主机中设置有标记的网络数据包,而是产生虚拟机启动后再运行所产生的网络数据包,这样,源主机在接收到确认消息后已经将带标记的网络数据包输出到目的设备,依然可以保持目的设备数据接收的连续性。
可选地,本发明实施例提供的虚拟机的状态信息同步的方法的另一实施例中,所述接收所述目的主机发送的确认消息之后,所述方法还包括:
根据所述确认消息,删除所述存储器中存储的所述主虚拟机的状态信息。
本发明实施例中,在目的主机中完成备虚拟机的同步后,删除存储器中存储的主虚拟机的状态信息,可以释放存储空间。
可选地,本发明实施例提供的虚拟机的状态信息同步的方法的另一实施例中,
所述暂停所述主虚拟机之前,所述方法还包括:
为所述主虚拟机的状态信息确定所述存储器。
图11是本发明实施例提供的源主机2的结构示意图。所述源主机2应用于虚拟机容错***,所述虚拟机容错***包括源主机2和目的主机,所述源主机2包括处理器210、存储器250、和输入/输出设备230(可选的),所述存储器上运行有主虚拟机2501,所述目的主机上运行有备虚拟机,存储器250可以包括只读存储器和随机存取存储器,并向处理器210提供操作指令和数据。存储器250的一部分还可以包括非易失性随机存取存储器(NVRAM)。
在一些实施方式中,存储器250存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:
宿主机2502:作为管理层,用以完成硬件资源的管理、分配;为虚拟机呈现虚拟硬件平台;实现虚拟机的调度和隔离。其中,Host可能是虚拟机监控器(VMM);此外,有时VMM和1个特权虚拟机配合,两者结合组成Host。其中,虚拟硬件平台对其上运行的各个虚拟机提供各种硬件资源,如提供虚拟处理器、内存、虚拟磁盘、虚拟网卡等等。其中,该虚拟磁盘可对应Host的一个文件或者一个逻辑块设备。虚拟机则运行在Host为其准备的虚拟硬件平台上,Host上运行一个或多个虚拟机。
虚拟机2501:通过虚拟机软件可以在一台物理计算机上模拟出一台或者多台虚拟的计算机,而这些虚拟机就像真正的计算机那样进行工作,虚拟机上可以安装操作***和应用程序,虚拟机还可访问网络资源。对于在虚拟机中运行的应用程序而言,虚拟机就像是在真正的计算机中进行工作。
在本发明实施例中,通过调用存储器250存储的操作指令(该操作指令可存储在操作***中),在源主机向目的主机同步所述主虚拟机的状态信息时,
处理器210用于:
暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述存储器的存储器;
启动运行处于暂停状态的所述主虚拟机;
在所述主虚拟机处于运行状态的同时,从所述存储器中获取所述主虚拟机的状态信息;
触发所述源主机的所述输入/输出设备将所述主虚拟机的状态信息向所述目的主机发送,以便所述目的主机根据所述主虚拟机的状态信息更新所述备虚拟机的状态。
可见,本发明实施例中,源主机2在同步主虚拟机的状态信息时,可以将主虚拟机的状态信息存入存储器,然后启动主虚拟机运行,再从存储器中获取虚拟机的状态信息进行同步,这样,缩短了主虚拟机的暂停时间,提高了主虚拟机的计算性能。
处理器210控制源主机2的操作,处理器210还可以称为CPU(Central ProcessingUnit,中央处理单元)。存储器250可以包括只读存储器和随机存取存储器,并向处理器210提供指令和数据。存储器250的一部分还可以包括非易失性随机存取存储器(NVRAM)。具体的应用中源主机2的各个组件通过总线***220耦合在一起,其中总线***220除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线***220。
上述本发明实施例揭示的方法可以应用于处理器210中,或者由处理器210实现。处理器210可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器210中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器210可以是通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器250,处理器210读取存储器250中的信息,结合其硬件完成上述方法的步骤。
可选地,处理器210还用于暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述源主机的存储器时或之后,为所述主虚拟机输出的网络数据包设置标记,所述标记用于指示所述网络数据包为上次所述主虚拟机启动后与本次所述主虚拟机暂停的时间间隔内所述主虚拟机所产生的网络数据包;
输入/输出设备230用于接收所述目的主机发送的确认消息,所述确认消息用于指示所述目的主机已接收到所述主虚拟机的状态信息;
处理器210还可根据所述确认消息,将设置有所述标记的网络数据包从所述源主机中输出。
本发明实施例中,释放标记的网络数据包是指将标记的网络数据包从所述源主机输出,这些带标记的网络数据包可以通过路由器等设备被转发到目的设备(需注意的是,这里的目的设备是用于接收并处理该网络数据包的设备,而非本发明实施例中用于宿主有迁移过来的虚拟机的目的主机)。
在接收到确认消息后再输出带标记的网络数据包,可以保证主虚拟机和备虚拟机对外输出的一致性,具体可以理解为:在同步主虚拟机的状态信息的过程中源主机的物理硬件出现故障,备虚拟机会根据上一次同步来的主虚拟机的状态信息重新产生与设置有标记的网络数据包相同的网络数据包,由目的主机向外输出这些相同的网络数据包,源主机上的设置有标记的网络数据包就会随着源主机物理硬件的故障而被丢弃,从而保证对接收这些网络数据包的目的设备数据接收的连续性,不会接收到重复的网络数据包,如果在源主机接收到确认消息后,源主机的物理硬件出现故障,则目的主机会根据刚同步过来的主虚拟机的状态信息接替主虚拟机的工作,不会再产生源主机中设置有标记的网络数据包,而是产生虚拟机启动后再运行所产生的网络数据包,这样,源主机在接收到确认消息后已经将带标记的网络数据包输出到目的设备,依然可以保持目的设备数据接收的连续性。
可选地,所述处理器210还用于根据所述确认消息,删除所述存储器中存储的所述主虚拟机的状态信息。
本发明实施例中,在目的主机中完成备虚拟机的同步后,删除存储器中存储的主虚拟机的状态信息,可以释放存储空间。
可选地,所述处理器210还用于暂停所述主虚拟机之前,为所述主虚拟机的状态信息确定所述存储器。
参阅图12,本发明实施例提供的虚拟机容错***的一实施例包括:源主机和2目的主机3,所述源主机2上运行有主虚拟机,例如:VM1、VM2和VM3,源主机2上还运行有宿主机22,宿主机22中部署有主端的虚拟机的状态信息同步的装置20,以及硬件层21,所述目的主机3上运行有备虚拟机,例如:VM4、VM5和VM6,目的主机3上还运行有宿主机32,宿主机32中部署有备端的虚拟机的状态信息同步的装置30,以及硬件层31。
源主机与目的主机之间主虚拟机的状态信息同步的过程,实际上可以理解为是主端的虚拟机的状态信息同步的装置20与备端的虚拟机的状态信息同步的装置30之间的交互过程,例如:如图2中的FT_M进程和FT_S进程之间的交互过程。图3中的QEMU_M进程和QEMU_S进程之间的交互过程。
所述源主机2,用于在向所述目的主机同步所述主虚拟机的状态信息时,暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述源主机的存储器,启动运行处于暂停状态的所述主虚拟机,在所述主虚拟机处于运行状态的同时,从所述存储器中获取所述主虚拟机的状态信息,并将所述主虚拟机的状态信息向所述目的主机发送;
所述目的主机3,用于根据所述主虚拟机的状态信息更新所述备虚拟机的状态。
具体更新过程可以是用本次接收到的主虚拟机的状态信息替换上次接收到的主虚拟机的状态信息。
与现有技术中暂停主虚拟机后,源主机向目的主机发送主虚拟机的状态信息,直到接收到目的主机发送的确认响应后,才会恢复主虚拟机运行,导致暂停主虚拟机的时间过长,计算性能差相比,本发明实施例提供的容错***,可以将虚拟机的状态信息存入存储器,然后启动主虚拟机运行,在所述主虚拟机处于运行状态时,再从存储器中获取主虚拟机的状态信息进行同步,这样,缩短了主虚拟机的暂停时间,从而提高了主虚拟机的计算性能。
可选地,所述源主机2还用于:暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述源主机的存储器时或之后,为所述主虚拟机输出的网络数据包设置标记,所述标记用于指示所述网络数据包为上次所述主虚拟机启动后与本次所述主虚拟机暂停的时间间隔内所述主虚拟机所产生的网络数据包;
接收所述目的主机发送的确认消息,所述确认消息用于指示所述目的主机已接收到所述主虚拟机的状态信息,根据所述确认消息,将设置有所述标记的网络数据包从所述源主机中输出。
本发明实施例中,释放标记的网络数据包是指将标记的网络数据包从所述源主机输出,这些带标记的网络数据包可以通过路由器等设备被转发到目的设备(需注意的是,这里的目的设备是用于接收并处理该网络数据包的设备,而非本发明实施例中用于宿主有迁移过来的虚拟机的目的主机)。
在接收到确认消息后再输出带标记的网络数据包,可以保证主虚拟机和备虚拟机对外输出的一致性,具体可以理解为:在同步主虚拟机的状态信息的过程中源主机的物理硬件出现故障,备虚拟机会根据上一次同步来的主虚拟机的状态信息重新产生与设置有标记的网络数据包相同的网络数据包,由目的主机向外输出这些相同的网络数据包,源主机上的设置有标记的网络数据包就会随着源主机物理硬件的故障而被丢弃,从而保证对接收这些网络数据包的目的设备数据接收的连续性,不会接收到重复的网络数据包,如果在源主机接收到确认消息后,源主机的物理硬件出现故障,则目的主机会根据刚同步过来的主虚拟机的状态信息接替主虚拟机的工作,不会再产生源主机中设置有标记的网络数据包,而是产生虚拟机启动后再运行所产生的网络数据包,这样,源主机在接收到确认消息后已经将带标记的网络数据包输出到目的设备,依然可以保持目的设备数据接收的连续性。
本发明实施例中所提供的源主机可以参阅装置实施例部分的描述进行理解,本处不做过多赘述。
参阅图13,本发明实施例提供的虚拟机容错***的另一实施例包括:
所述虚拟机容错***包括源主机2和目的主机3,所述源主机2上运行有主虚拟机2501,所述目的主机3上运行有备虚拟机3501,在所述源主机2向所述目的主机3,所述源主机2的结构可以参阅图11所对应的实施例进行理解,目的主机3的硬件结构与源主机2相同。
在所述源主机向所述目的主机同步所述主虚拟机的状态信息时,所述源主机2,用于在向所述目的主机同步所述主虚拟机的状态信息时,暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述源主机的存储器,启动运行处于暂停状态的所述主虚拟机,在所述主虚拟机处于运行状态的同时,从所述存储器中获取所述主虚拟机的状态信息,并将所述主虚拟机的状态信息向所述目的主机发送;
所述目的主机3,用于根据接收到的所述主虚拟机的状态信息更新所述备虚拟机的状态。
具体更新过程可以是用本次接收到的主虚拟机的状态信息替换上次接收到的主虚拟机的状态信息。
与现有技术中暂停主虚拟机后,源主机向目的主机发送主虚拟机的状态信息,直到接收到目的主机发送的确认响应后,才会恢复主虚拟机运行,导致暂停主虚拟机的时间过长,计算性能差相比,本发明实施例提供的容错***,可以将虚拟机的状态信息存入存储器,然后启动主虚拟机运行,在所述主虚拟机处于运行状态时,再从存储器中获取主虚拟机的状态信息进行同步,这样,缩短了主虚拟机的暂停时间,从而提高了主虚拟机的计算性能。
可选地,所述源主机2还用于:暂停所述主虚拟机,并将所述主虚拟机的状态信息存入所述源主机的存储器时或之后,为所述主虚拟机输出的网络数据包设置标记,所述标记用于指示所述网络数据包为上次所述主虚拟机启动后与本次所述主虚拟机暂停的时间间隔内所述主虚拟机所产生的网络数据包;
接收所述目的主机发送的确认消息,所述确认消息用于指示所述目的主机已接收到所述主虚拟机的状态信息,根据所述确认消息,将设置有所述标记的网络数据包从所述源主机中输出。
本发明实施例中,释放标记的网络数据包是指将标记的网络数据包从所述源主机输出,这些带标记的网络数据包可以通过路由器等设备被转发到目的设备(需注意的是,这里的目的设备是用于接收并处理该网络数据包的设备,而非本发明实施例中用于宿主有迁移过来的虚拟机的目的主机)。
在接收到确认消息后再输出带标记的网络数据包,可以保证主虚拟机和备虚拟机对外输出的一致性,具体可以理解为:在同步主虚拟机的状态信息的过程中源主机的物理硬件出现故障,备虚拟机会根据上一次同步来的主虚拟机的状态信息重新产生与设置有标记的网络数据包相同的网络数据包,由目的主机向外输出这些相同的网络数据包,源主机上的设置有标记的网络数据包就会随着源主机物理硬件的故障而被丢弃,从而保证对接收这些网络数据包的目的设备数据接收的连续性,不会接收到重复的网络数据包,如果在源主机接收到确认消息后,源主机的物理硬件出现故障,则目的主机会根据刚同步过来的主虚拟机的状态信息接替主虚拟机的工作,不会再产生源主机中设置有标记的网络数据包,而是产生虚拟机启动后再运行所产生的网络数据包,这样,源主机在接收到确认消息后已经将带标记的网络数据包输出到目的设备,依然可以保持目的设备数据接收的连续性。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件(例如处理器)来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。
以上对本发明实施例所提供的虚拟机的状态信息同步的方法、装置以及***进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。