虚拟机故障检测方法、存储介质和虚拟化集群与流程

文档序号:27830720发布日期:2021-12-07 22:11阅读:100来源:国知局

1.本发明涉及虚拟化技术领域,尤其涉及一种虚拟机故障检测方法、存储介质和虚拟化集群。


背景技术:

2.随着计算机技术的飞速发展,越来越多公司开始关注如何降低能耗和提高资源利用率,在此背景下,云计算这一计算模式就应运而生。云计算将所有的计算机抽象成特定的计算资源,然后将这些计算资源提供给用户,而不是像以前那样直接提供一台或多台计算机给用户。如此一来,用户可以根据自己的需要来申请计算资源,避免不必要的资源浪费,提高资源利用率。
3.为了节省设备成本,进一步提高资源利用率,云计算构建者会采用虚拟化技术,在单台物理计算机上虚拟出多台虚拟计算机(即虚拟机),以供多个用户分别使用,这台物理计算机称之为计算节点。多台这样的物理计算机就构成了一个虚拟化集群。虚拟化集群对多台物理计算机进行统一管理。
4.虚拟化集群通常包括一个管理节点和多个计算节点,管理节点会监控各个计算节点的以及各个计算节点上运行的虚拟机的健康状态。现有对虚拟机的健康状态的检测方式是:计算节点定时检测其上运行的各个虚拟机的qemu进程是否健在,若健在则判定该虚拟机正常,否则判定该虚拟机故障。但是,该检测方式的检测结果不够准确,例如当qemu进程卡住了,qemu进程依然存在但虚拟机已无法运行,计算节点检测到qemu进程存在就判定虚拟机正常,但实际上虚拟机已经故障,无法使用了。


技术实现要素:

5.本发明所要解决的技术问题是提供一种虚拟机故障检测方法、管理节点对虚拟机进行故障检测的方法、存储有被执行时能够实现上述任一方法的计算机程序的计算机可读存储介质以及虚拟化集群,该虚拟机故障检测方法能够比较准确地检测出虚拟机是否故障。
6.为了解决上述技术问题,本发明的一种虚拟机故障检测方法,若检测到虚拟机在预设时长内没有下发i/o请求给虚拟机磁盘,则判断为虚拟机故障。
7.可选地,具体是通过对虚拟机的磁盘路径进行检测,来检测虚拟机是否下发i/o请求给虚拟机磁盘。
8.可选地,作为管理节点,向计算节点发送在该计算节点上运行的虚拟机的磁盘路径。
9.可选地,令所述计算节点根据磁盘路径检测虚拟机是否下发i/o请求给虚拟机磁盘并定时向管理节点上报检测结果。
10.可选地,具体是通过计算节点来检测虚拟机是否在预设时长内没有下发i/o请求给虚拟机磁盘。
11.可选地,在判断为虚拟机故障后,关闭故障虚拟机。
12.可选地,作为管理节点,具体是令故障虚拟机所在的计算节点从内核中关闭该故障虚拟机。
13.可选地,作为计算节点,在判断为虚拟机故障后,向管理节点上报故障虚拟机的信息。
14.一种管理节点对虚拟机进行故障检测的方法,向计算节点发送在该计算节点上运行的虚拟机的磁盘路径信息。
15.可选地,令所述计算节点根据磁盘路径检测虚拟机是否下发i/o请求给虚拟机磁盘并定时向管理节点上报检测结果。
16.一种计算机可读存储介质,其上存储有可执行的计算机程序,该计算机程序被管理节点执行时实现如上所述的虚拟机故障检测方法,或者实现如上所述的管理节点对虚拟机进行故障检测的方法。
17.一种计算机可读存储介质,其上存储有可执行的计算机程序,该计算机程序被计算节点执行时实现如上所述的虚拟机故障检测方法。
18.一种虚拟化集群,包括管理节点以及通信连接管理节点的计算节点,计算节点上运行有虚拟机,所述管理节点向计算节点发送在该计算节点上运行的虚拟机的磁盘路径,该计算节点根据磁盘路径检测虚拟机是否有下发i/o请求给虚拟机磁盘并向管理节点上报检测结果,管理节点若通过计算节点上报的检测结果检测到虚拟机在预设时长内没有下发i/o请求给虚拟机磁盘,则判断为虚拟机故障。
19.上述虚拟机故障检测方法通过检测虚拟机的i/o请求情况来判断虚拟机是否故障,若虚拟机的qemu进程卡住了,在这种情况下,虽然qemu进程依然存在但虚拟机实际上发生故障了,已无法运行,该虚拟机也就无法再向虚拟机磁盘下发i/o请求,因此,若检测到虚拟机在预设时长内没有下发i/o请求给虚拟机磁盘,就可以判断出该虚拟机故障了。
附图说明
20.图1是一种虚拟化集群的系统结构框图。
具体实施方式
21.以下结合具体实施例对本发明创造作详细说明。
22.如图1所示,虚拟化集群包括管理节点以及通信连接管理节点的三个计算节点1、2、3。计算节点1、2、3上分别运行有虚拟机。管理节点包括处理器和计算机可读存储介质,该计算机可读存储介质存储有可执行的计算机程序,上述处理器执行该计算机程序从而实现管理节点的功能。每个计算节点包括处理器和计算机可读存储介质,该计算机可读存储介质中存储有可执行的计算机程序,计算节点的处理器执行该计算机程序从而实现计算节点的功能。
23.实施例一管理节点将自身的ip地址和端口名称发送给各个计算节点1、2、3。各个计算节点1、2、3接收到管理节点的ip地址和端口名称之后,通过netlink通信将管理节点的ip地址和端口名称传递给本计算节点的内核,然后在内核建立与管理节点之间的tcp心跳检测机制,
如此则管理节点分别和计算节点1、2、3的内核建立了tcp socket通信通道。管理节点通过上述通信通道分别向计算节点1、2、3内核发送在该计算节点上运行的虚拟机的磁盘路径和检测策略,该检测策略包含了检测方式以及检测反馈方式。管理节点藉此通过计算节点来检测虚拟机是否在预设时长内没有下发i/o请求给虚拟机磁盘。
24.以计算节点1为例,计算节点1内核接收到虚拟机11、12、13的磁盘路径和检测策略之后,按照检测策略中的检测方式,分别对各个虚拟机11、12、13的磁盘路径进行检测,从而检测虚拟机11、12、13是否有下发i/o请求给其磁盘,并且按照检测策略中的检测反馈方式,每30s向管理节点发送一次虚拟机检测心跳包以汇报这30s期间的检测结果。假设计算节点1内核在9:00:00时刻启动检测,此时虚拟机11的qemu进程若卡住了,虽然虚拟机11的qemu进程仍然存在但虚拟机实际上已经故障了,也就无法再下发i/o请求给虚拟机磁盘。在9:00:00至9:00:30期间,若虚拟机11、12、13都没有下发i/o请求给其磁盘,则计算节点1内核在9:00:00至9:00:30期间没有检测到虚拟机11、12、13下发i/o请求给其磁盘,就在9:00:30时刻生成一个包含有9:00:00至9:00:30期间的检测结果的虚拟机检测心跳包,发送给管理节点。管理节点接收到该虚拟机检测心跳包后,向计算节点1内核发送虚拟机检测回复心跳包以告知对方本管理节点已接收到上述虚拟机检测心跳包,并记录虚拟机11、12、13在9:00:00至9:00:30期间都无i/o请求下发。然后在9:00:30至9:01:00期间,计算节点1内核仍没有检测到虚拟机11下发i/o请求给磁盘,但检测到虚拟机12、13有下发i/o请求给其磁盘,就在9:01:00时刻生成一个包含有9:00:30至9:01:00期间的检测结果的虚拟机检测心跳包,发送给管理节点。管理节点接收到该虚拟机检测心跳包后,向计算节点1内核发送虚拟机检测回复心跳包,并记录虚拟机11在9:00:30至9:01:00期间无i/o请求下发,虚拟机12、13在9:00:30至9:01:00期间有i/o请求下发。然后在9:01:00至9:01:30期间,计算节点1内核还是没有检测到虚拟机11向磁盘下发i/o请求,但检测到虚拟机12、13有下发i/o请求给其磁盘,就在9:01:30时刻生成一个包含有9:01:00至9:01:30期间的检测结果的虚拟机检测心跳包,发送给管理节点。管理节点接收到该虚拟机检测心跳包后,向计算节点1内核发送虚拟机检测回复心跳包,并记录虚拟机11在9:01:00至9:01:30期间无i/o请求下发,虚拟机12、13在9:01:00至9:01:30期间有i/o请求下发。至此,管理节点已连续三次接收到虚拟机11无i/o请求下发的虚拟机检测心跳包,也就是说虚拟机11在预设时长90秒内都没有下发i/o请求给其磁盘,管理节点据此判定虚拟机11发生了故障,遂向计算节点1内核发送虚拟机11故障消息,令计算节点1从内核中关闭虚拟机11。由于虚拟机12、13,在9:00:30至9:01:30期间都有i/o请求下发,管理节点判定虚拟机12、13正常运行。
25.同理,计算节点2内核接收到虚拟机21、22、23的磁盘路径之后,分别对各个虚拟机21、22、23的磁盘路径进行检测,从而检测虚拟机21、22、23是否有下发i/o请求给其磁盘,并每30s向管理节点发送一次虚拟机检测心跳包从而汇报本次30s期间的检测结果。计算节点3内核亦是如此。
26.本实施例是管理节点下发检测策略给各个计算节点1、2、3,从而让计算节点1、2、3按照检测策略来对虚拟机进行检测。非优选地,其他实施例可以改为直接在各个计算节点1、2、3上设置检测策略。这样一来,各个计算节点1、2、3在接收到虚拟机的磁盘路径后,就会自动根据本地的检测策略来对虚拟机进行检测。
27.计算节点1、2、3内核除了定时发送虚拟机检测心跳包给管理节点以汇报虚拟机的
检测结果以外,还会定时发送计算节点健康心跳包给管理节点以汇报本计算节点的健康状态。管理节点接收到各个计算节点1、2、3内核发送的计算节点健康心跳包之后,分别向各个计算节点1、2、3内核发送计算节点健康回复心跳包以告知对方本管理节点已接收到上述计算节点健康心跳包。假设各个计算节点1、2、3同样是每30s发送一次计算节点健康心跳包给管理节点。假设计算节点1、2、3内核在9:00:00时刻启动检测,在9:00:30时刻,计算节点1、2、3内核除了发送虚拟机检测心跳包给管理节点以外,还发送计算节点健康心跳包给管理节点。假设管理节点只接收到计算节点1、2的计算节点健康心跳包,而没有接收到计算节点3的计算节点健康心跳包,就将计算节点1、2记录为健康状态,将计算节点3记录为待定状态,然后分别向计算节点1、2内核发送计算节点健康回复心跳包。此时计算节点1、2内核收到了管理节点发送的计算节点健康回复心跳包,而计算节点3内核没有收到。计算节点3内核就记录计算节点健康回复心跳包缺失一次。在9:01:00时刻,计算节点1、2、3内核再次发送计算节点健康心跳包给管理节点。管理节点还是只接收到计算节点1、2的计算节点健康心跳包,没有接收到计算节点3的计算节点健康心跳包,就将计算节点1、2记录为健康状态,将计算节点3记录为待定状态,然后分别向计算节点1、2内核发送计算节点健康回复心跳包。此时计算节点1、2内核收到了管理节点发送的计算节点健康回复心跳包,而计算节点3内核没有收到。计算节点3内核就记录计算节点健康回复心跳包连续缺失两次。在9:01:30时刻,计算节点1、2、3内核再次发送计算节点健康心跳包给管理节点。管理节点还是只接收到计算节点1、2的计算节点健康心跳包,没有接收到计算节点3的计算节点健康心跳包。由于管理节点已经连续三次没有接收到计算节点3发送的计算节点健康心跳包了,也就是说在预设时长90s(90s是计算节点健康心跳包发送时间间隔的三倍)内都没有接收到计算节点3发送的计算节点健康心跳包,据此,管理节点就将计算节点3记录为故障状态,而将计算节点1、2记录为健康状态,然后分别向计算节点1、2内核发送计算节点健康回复心跳包。此时计算节点1、2内核收到了管理节点发送的计算节点健康回复心跳包,而计算节点3内核没有收到。计算节点3内核就记录计算节点健康回复心跳包连续缺失三次,也就是说,计算节点3内核在预设时长90s内都没有接收到管理节点发送的计算节点健康回复心跳包(即心跳检测信号),据此,计算节点3内核就判定为自身故障了。假设计算节点3上运行的虚拟机33使用的是和计算节点1、2共享的远程磁盘,并不是使用计算节点3本地存储资源,那么计算节点3内核判定自身故障之后,就从内核中关闭虚拟机33。如此一来,计算节点3内核主动关闭虚拟机33,不会因无法响应管理节点的关闭指令而无法将虚拟机关闭。管理节点在判定计算节点3故障之后,与此同时,计算节点3也判断出自身故障并关闭了虚拟机33,如此管理节点就可以在计算节点1或者计算节点2上重新启动虚拟机33。
28.本实施例中,故障计算节点3只关闭使用非本地资源的虚拟机33,而对于使用本地资源的虚拟机31、32则暂不处理。非优选地,可以改为关闭故障计算节点3上运行的全部虚拟机31、32、33。
29.实施例二本实施例与实施例一大体上相同,下面仅描述本实施例与实施例一的不同之处。
30.实施例一中,计算节点仅是把虚拟机i/o请求下发情况的检测结果汇报给管理节点,不作判断,由管理节点根据检测结果来判断虚拟机是否故障。本实施中,改为由计算节点根据检测结果来判断虚拟机是否故障。仍以计算节点1为例,假设计算节点1内核在9:00:
00时刻启动检测,在9:00:00至9:00:30期间,假设虚拟机11、12、13都没有下发i/o请求给其磁盘,那么计算节点1内核在9:00:00至9:00:30期间没有检测到虚拟机11、12、13下发i/o请求给其磁盘,就记录虚拟机11、12、13在9:00:00至9:00:30期间都无i/o请求下发,此时虚拟机11、12、13仅是30s没有下发i/o请求给其磁盘,尚未达到预设时长90s没有下发i/o请求,因此,计算节点1内核判定虚拟机11、12、13此时是健康的,则生成一个虚拟机健康心跳包并发送给管理节点,该心跳包描述了虚拟机11、12、13是健康的。管理节点接收到虚拟机健康心跳包之后,即刻向计算节点1内核发送虚拟机健康回复心跳包,从而告知计算节点1本管理节点已接收到上述虚拟机健康心跳包。然后在9:00:30至9:01:00期间,计算节点1内核仍没有检测到虚拟机11下发i/o请求给磁盘,但检测到虚拟机12、13有下发i/o请求给其磁盘,就记录虚拟机11在9:00:30至9:01:00期间无i/o请求下发,虚拟机12、13在9:00:30至9:01:00期间有i/o请求下发。此时虚拟机11仅是60s没有下发i/o请求给其磁盘,尚未达到预设时长90s没有下发i/o请求,因此,计算节点1内核判定虚拟机11、12、13此时都是健康的,则生成一个虚拟机健康心跳包并发送给管理节点,该心跳包描述了虚拟机11、12、13是健康的。管理节点接收到虚拟机健康心跳包之后,即刻向计算节点1内核发送虚拟机健康回复心跳包。然后在9:01:00至9:01:30期间,计算节点1内核还是没有检测到虚拟机11向磁盘下发i/o请求,但检测到虚拟机12、13有下发i/o请求给其磁盘,就记录虚拟机11在9:01:00至9:01:30期间无i/o请求下发,虚拟机12、13在9:01:00至9:01:30期间有i/o请求下发。此时虚拟机11已经有90s没有下发i/o请求给其磁盘了,也就是说虚拟机11在预设时长90s内没有下发i/o请求给其磁盘,故计算节点1内核判定虚拟机11发生了故障而虚拟机12、13仍是健康的,就从内核中关闭虚拟机11并生成一个虚拟机健康心跳包并发送给管理节点,该心跳包描述了虚拟机11是故障的而虚拟机12、13是健康的。计算节点1内核判断出虚拟机11故障之后。
31.最后应当说明的是,以上实施例仅用以说明本发明创造的技术方案,而非对本发明创造保护范围的限制,尽管参照较佳实施例对本发明创造作了详细地说明,本领域的普通技术人员应当理解,可以对本发明创造的技术方案进行修改或者等同替换,而不脱离本发明创造技术方案的实质和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1