一种虚拟机容错系统及其容错方法
文献发布时间:2023-06-19 09:57:26
技术领域
本发明涉及虚拟机技术领域,尤其涉及一种虚拟机容错系统及其容错方法。
背景技术
虚拟化技术随着云计算的开展得到广泛应用,虚拟机容错技术可以为关键应用提供可靠性保证。早期的虚拟机容错技术(如MicroCheckpointing、Kemari等),备虚拟机一直处于暂停状态,不停高频同步主虚拟机的状态变化,若主虚拟机发生故障,则激活备虚拟机运行。主虚拟机和备虚拟机之间定期高频做Checkpoint(检测点机制,一种状态数据同步方式),同时Checkpoint需要暂停源虚拟机运行,由于高频Checkpoint引入的开销较大,这种容错技术无法商用。
针对早期虚拟机容错开销较大问题,Intel(英特尔)提出粗粒度同步技术(COarse-grained LOck-stepping,简称COLO),该方法主备虚拟机都处于运行状态,外部客户端发给主虚拟机的网络请求,主虚拟机同时发给备虚拟机处理,通过比较主虚拟机和备虚拟机对同一网络请求的网络响应,决定是否需要同步主备虚拟机的状态。若主备虚拟机对客户端网络请求产生的响应数据包相同,则无需做Checkpoint;否则,立刻同步主备虚拟机状态。该方法减少了Checkpoint的频率,降低了容错开销,已在云计算产品中商用(如ZStack等),此外VMware也采用了与COLO类似的容错技术。
COLO虚拟机容错技术中,主虚拟机收到客户端网络请求包后,Qemu用户端(一套由法布里斯·贝拉所编写的以GPL许可证分发源码的模拟处理器,一种虚拟操作系统模拟器)通过Virtio-net网络后端驱动截获网络请求包,通过Proxy(代理软件或代理服务器)发送给备虚拟机。备虚拟机产生网络响应包后,也通过Qemu用户端Proxy发送给主虚拟机。主虚拟机Qemu用户端接收备虚拟机发出的网络响应包,由Proxy对主备虚拟机生成的网络响应包进行比对,以决定是否需要Checkpoint同步状态。上述的方案中,对网络数据包收发和比对都通过Qemu用户态软件处理,一方面软件处理网络包收发和比对引入CPU(中央处理器)开销,另一方面导致虚拟机网络只能采用用户态Virtio-net网络后端驱动,而不能使用更高效的内核态Vhost-net网络后端驱动。
发明内容
本发明提供了一种虚拟机容错系统及其容错方法,用以减少软件操作引入的CPU开销,同时兼容高效的内核态Vhost-net网络后端驱动,解决了无法使用Vhost-net内核态网络后端驱动的问题。
第一方面,本发明提供了一种虚拟机容错系统,该虚拟机容错系统包括主物理机端和备物理机端。在主物理机端上安装有主虚拟机监视器,在主虚拟机监视器上安装有主虚拟机。在备物理机端上运行有备虚拟机。其中,主物理机端设置有网卡,主虚拟机监视器上部署有用于向网卡下发网络包处理规则的网络包管理装置。该网络包处理规则包括:命令网卡将客户端发送给主虚拟机的网络请求包转发给备虚拟机。
在上述的方案中,通过在主物理机端设置网卡,在主虚拟机监视器部署向网卡下发网络包处理规则的网络管理装置,使网卡将客户端发送给主虚拟机的网络请求包转发给备虚拟机,从而减少了软件操作引入的CPU开销,同时兼容高效的内核态Vhost-net网络后端驱动,解决了无法使用Vhost-net内核态网络后端驱动的问题。现有技术中采用COLO虚拟机容错技术通过Qemu用户端软件进行网络数据包的收发和数据比对,从而导致无法使用高效的内核态Vhost-net网络后端驱动,且Qemu软件做数据包相关操作引入了额外的CPU开销。本申请的方案与现有技术相比,对来自客户端的网络请求包的转发通过网卡硬件实现,从而减少了软件操作引入的CPU开销,同时兼容高效的内核态Vhost-net网络后端驱动,解决了无法使用Vhost-net内核态网络后端驱动的问题。
在一个具体的实施方式中,该网络包处理规则还包括:命令网卡接收并比对主虚拟机和备虚拟机处理网络请求包后生成的网络响应包,以判断主虚拟机和备虚拟机生成的网络响应包是否相同。使网卡不仅能够将对来自客户端的网络请求包转发给备虚拟机,还能够接收并比对主虚拟机和备虚拟机所生成的网络响应包,从而进一步减少了软件操作引入的CPU开销,同时更加兼容高效的内核态Vhost-net网络后端驱动,解决了无法使用Vhost-net内核态网络后端驱动的问题。
在一个具体的实施方式中,网络包处理规则还包括:在网卡判断主虚拟机和备虚拟机生成的网络响应包相同时,命令网卡将主虚拟机生成的网络响应包发送给客户端。从而更进一步减少了软件操作引入的CPU开销。
在一个具体的实施方式中,网络包处理规则还包括:在网络响应包比对模块判断主虚拟机和备虚拟机生成的网络响应包不相同时,命令网卡将主虚拟机生成的网络响应包发送给客户端,并向主物理机端发送一个表征主备虚拟机生成的网络响应包不相同的信号。使网卡将网络响应包不相同的信号及时发送给主物理机端进行下一步处理。
在一个具体的实施方式中,命令网卡向主物理机端发送一个表征主备虚拟机生成的网络响应包不相同的信号具体为:在将主虚拟机生成的网络请求包发送给客户端后,命令网卡向主物理机端发送一个表征主备虚拟机生成的网络响应包不相同的中断信号。以便于向主物理机端发送表征信号。
在一个具体的实施方式中,主物理机端在接收到网卡发送的主备虚拟机发送的网络响应包不相同的信号后,将该信号转发给网络包管理装置;网络包管理装置在接收到主备虚拟机生成的网络响应包不相同的信号后,向主虚拟机和备虚拟机发出状态同步的指令。使主虚拟机和备虚拟机及时进行状态同步。
在一个具体的实施方式中,网卡中设置有缓存模块,该缓存模块用于缓存主虚拟机和备虚拟机中先发送过来的网络响应包。通过对先发送过来的网络响应包进行缓存,以便于与后发送过来的网络响应包进行比对。
在一个具体的实施方式中,该网卡为智能网卡,以便于配置网卡。
第二方面,本发明还提供了一种基于上述虚拟机容错系统的容错方法,该容错方法包括:客户端向主虚拟机发送网络请求包;网络包管理装置命令网卡将客户端发送给主虚拟机的网络请求包转发给备虚拟机。
在上述的方案中,通过网卡将客户端发送给主虚拟机的网络请求包转发给备虚拟机,从而减少了软件操作引入的CPU开销,同时兼容高效的内核态Vhost-net网络后端驱动,解决了无法使用Vhost-net内核态网络后端驱动的问题。现有技术中采用COLO虚拟机容错技术通过Qemu用户端软件进行网络数据包的收发和数据比对,从而导致无法使用高效的内核态Vhost-net网络后端驱动,且Qemu软件做数据包相关操作引入了额外的CPU开销。本申请的方案与现有技术相比,对来自客户端的网络请求包的转发通过网卡硬件实现,从而减少了软件操作引入的CPU开销,同时兼容高效的内核态Vhost-net网络后端驱动,解决了无法使用Vhost-net内核态网络后端驱动的问题。
在一个具体的实施方式中,该容错方法还包括:主虚拟机将处理网络请求包后生成的网络响应包发送给网卡;备虚拟机将处理网络请求包后生成的网络响应包发送给网卡;网卡接收并比对主虚拟机和备虚拟机发送过来的网络响应包,以判断主虚拟机和备虚拟机生成的网络响应包是否相同;如果相同,则将主虚拟机生成的网络响应包转发给客户端;如果不相同,则将主虚拟机生成的网络响应包转发给客户端,并对主虚拟机和备虚拟机进行状态同步。使网卡不仅能够将对来自客户端的网络请求包转发给备虚拟机,还能够接收并比对主虚拟机和备虚拟机所生成的网络响应包,从而进一步减少了软件操作引入的CPU开销,同时更加兼容高效的内核态Vhost-net网络后端驱动,解决了无法使用Vhost-net内核态网络后端驱动的问题。
附图说明
图1为本发明实施例提供的虚拟机容错系统的示意框图;
图2为本发明实施例提供的容错方法的一种流程图;
图3为本发明实施例提供的容错方法的另一种流程图。
附图标记:
10-主虚拟机监视器 11-网络包管理装置
20-主虚拟机 30-备虚拟机 40-网卡
41-网络请求包转发模块 42-网络响应包比对模块
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了方便理解本发明实施例提供的虚拟机容错系统,下面首先说明一下本发明实施例提供的虚拟机容错系统的应用场景,该虚拟机容错系统应用于具有主虚拟机和备虚拟机的虚拟机系统中。下面结合附图对该虚拟机容错系统进行详细的叙述。
参考图1及图2,本发明实施例提供的虚拟机容错系统包括主物理机端和备物理机端。在主物理机端上安装有主虚拟机监视器10,在主虚拟机监视器10上安装有主虚拟机20。在备物理机端上运行有备虚拟机30。其中,在主物理机端设置有网卡40,在主虚拟机监视器10上部署有用于向网卡40下发网络包处理规则的网络包管理装置11。该网络包处理规则包括:命令网卡40将客户端发送给主虚拟机20的网络请求包转发给备虚拟机30。通过在主物理机端设置网卡40,在主虚拟机监视器10部署向网卡40下发网络包处理规则的网络管理装置,使网卡40将客户端发送给主虚拟机20的网络请求包转发给备虚拟机30,从而减少了软件操作引入的CPU开销,同时兼容高效的内核态Vhost-net网络后端驱动,解决了无法使用Vhost-net内核态网络后端驱动的问题。
现有技术中采用COLO虚拟机容错技术通过Qemu用户端软件进行网络数据包的收发,从而导致无法使用高效的内核态Vhost-net网络后端驱动,且Qemu软件做数据包相关操作引入了额外的CPU开销。本申请的方案与现有技术相比,对来自客户端的网络请求包的转发通过网卡40硬件实现,从而减少了软件操作引入的CPU开销,同时兼容高效的内核态Vhost-net网络后端驱动,解决了无法使用Vhost-net内核态网络后端驱动的问题。
在具体实现网卡40对网络请求包的转发功能时,可以在网卡40中设置一网络请求包转发模块41,主虚拟机监视器10中的网络包管理装置11可以通过命令网络请求包转发模块41将客户端发送给主虚拟机20的网络请求包转发给备虚拟机30,实现网卡40对网络请求包的转发功能。
在设置网卡40时,该网卡40可以为智能网卡,以便于配置网卡40。当然,该网卡40也可以为其他具有处理器、存储模块等功能模块的网卡,即只要该网卡能够实现主虚拟机监视器10中的网络包管理装置11对该网卡40进行下发处理规则,并能够实现网络请求包的转发,都在本发明实施例的保护范围之内。
参考图1及图3,在主虚拟机20和备虚拟机30处理网络请求包并生成网络响应包后,该网络包处理规则还可以包括:命令网卡40接收并比对主虚拟机20和备虚拟机30处理网络请求包后生成的网络响应包,以判断主虚拟机20和备虚拟机30生成的网络响应包是否相同。使网卡40不仅能够将对来自客户端的网络请求包转发给备虚拟机30,还能够接收并比对主虚拟机20和备虚拟机30所生成的网络响应包,从而进一步减少了软件操作引入的CPU开销,同时更加兼容高效的内核态Vhost-net网络后端驱动,解决了无法使用Vhost-net内核态网络后端驱动的问题。
具体实现网卡40对主虚拟机20和备虚拟机30的网络响应包进行比对时,可以在网卡40中设置网络响应包比对模块42,主虚拟机监视器10中的网络包管理装置11可以通过命令网络响应包比对模块42接收并比对主虚拟机20和备虚拟机30生成的网络响应包是否相同,以实现网卡40对主虚拟机20和备虚拟机30的网络响应包的比对。
另外,可以在网卡40中设置有缓存模块,该缓存模块用于缓存主虚拟机20和备虚拟机30中先发送过来的网络响应包。通过对先发送过来的网络响应包进行缓存,以便于与后发送过来的网络响应包进行比对。
参考图3,网络包处理规则还可以包括:在网卡40判断主虚拟机20和备虚拟机30生成的网络响应包相同时,可以命令网卡40将主虚拟机20生成的网络响应包发送给客户端。使网卡40不仅转发客户端下发的网络请求包,还使网卡40完成将网络响应包发送给客户端,使网卡40完成与客户端对网络请求包和网络响应包的收发功能,从而更进一步减少了软件操作引入的CPU开销。
另外,参考图3,网络包处理规则还可以包括:在网络响应包比对模块42判断主虚拟机20和备虚拟机30生成的网络响应包不相同时,可以命令网卡40将主虚拟机20生成的网络响应包发送给客户端,并向主物理机端发送一个表征主备虚拟机30生成的网络响应包不相同的信号。使网卡40将网络响应包不相同的信号及时发送给主物理机端进行下一步处理。
在具体命令网卡40向主物理机端发送一个表征主备虚拟机30生成的网络响应包不相同的信号时,可以在将主虚拟机20生成的网络请求包发送给客户端后,网络包管理装置11命令网卡40向主物理机端发送一个表征主备虚拟机30生成的网络响应包不相同的中断信号。以便于向主物理机端发送表征信号。当然,除了采用中断信号作为表征主虚拟机20和备虚拟机30生成的网络响应包不一致的信号外,还可以采用其他的信号表征方式。
另外,主物理机端在接收到网卡40发送的主备虚拟机30发送的网络响应包不相同的信号后,可以将该信号转发给网络包管理装置11。在网络包管理装置11在接收到主备虚拟机30生成的网络响应包不相同的信号后,可以向主虚拟机20和备虚拟机30发出状态同步的指令。使主虚拟机20和备虚拟机30及时进行状态同步。具体实现主虚拟机20和备虚拟机30进行状态同步时,可以使网络包管理装置11向主虚拟机20和备虚拟机30发出进行Checkpoint状态同步的指令,使主虚拟机20和备虚拟机30进行状态同步。
通过在主物理机端设置网卡40,在主虚拟机监视器10部署向网卡40下发网络包处理规则的网络管理装置,使网卡40将客户端发送给主虚拟机20的网络请求包转发给备虚拟机30,从而减少了软件操作引入的CPU开销,同时兼容高效的内核态Vhost-net网络后端驱动,解决了无法使用Vhost-net内核态网络后端驱动的问题。现有技术中采用COLO虚拟机容错技术通过Qemu用户端软件进行网络数据包的收发和数据比对,从而导致无法使用高效的内核态Vhost-net网络后端驱动,且Qemu软件做数据包相关操作引入了额外的CPU开销。本申请的方案与现有技术相比,对来自客户端的网络请求包的转发通过网卡40硬件实现,从而减少了软件操作引入的CPU开销,同时兼容高效的内核态Vhost-net网络后端驱动,解决了无法使用Vhost-net内核态网络后端驱动的问题。
另外,参考图1及图2,本发明实施例还提供了一种基于上述虚拟机容错系统的容错方法,该容错方法包括:
客户端向主虚拟机20发送网络请求包;
网络包管理装置11命令网卡40将客户端发送给主虚拟机20的网络请求包转发给备虚拟机30。
在上述的方案中,通过网卡40将客户端发送给主虚拟机20的网络请求包转发给备虚拟机30,从而减少了软件操作引入的CPU开销,同时兼容高效的内核态Vhost-net网络后端驱动,解决了无法使用Vhost-net内核态网络后端驱动的问题。现有技术中采用COLO虚拟机容错技术通过Qemu用户端软件进行网络数据包的收发和数据比对,从而导致无法使用高效的内核态Vhost-net网络后端驱动,且Qemu软件做数据包相关操作引入了额外的CPU开销。本申请的方案与现有技术相比,对来自客户端的网络请求包的转发通过网卡40硬件实现,从而减少了软件操作引入的CPU开销,同时兼容高效的内核态Vhost-net网络后端驱动,解决了无法使用Vhost-net内核态网络后端驱动的问题。
参考图3,在主虚拟机20和备虚拟机30处理网络请求包并生成网络响应包后,该容错方法还包括:
主虚拟机20将处理网络请求包后生成的网络响应包发送给网卡40;
备虚拟机30将处理网络请求包后生成的网络响应包发送给网卡40;
网卡40接收并比对主虚拟机20和备虚拟机30发送过来的网络响应包,以判断主虚拟机20和备虚拟机30生成的网络响应包是否相同;
如果相同,则将主虚拟机20生成的网络响应包转发给客户端;
如果不相同,则将主虚拟机20生成的网络响应包转发给客户端,并对主虚拟机20和备虚拟机30进行状态同步。
使网卡40不仅能够将对来自客户端的网络请求包转发给备虚拟机30,还能够接收并比对主虚拟机20和备虚拟机30所生成的网络响应包,从而进一步减少了软件操作引入的CPU开销,同时更加兼容高效的内核态Vhost-net网络后端驱动,解决了无法使用Vhost-net内核态网络后端驱动的问题。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
- 一种虚拟机容错系统及其容错方法
- 一种虚拟机容错系统及其容错方法