虚拟机的故障检测恢复方法及***
技术领域
本发明涉及虚拟机领域,具体是涉及一种虚拟机的故障检测恢复方法及***。
背景技术
NFVI(网络功能虚拟化基础设施解决方案)是用来托管和连接虚拟功能的一组资源。具体来说,NFVI是一种包含服务器、虚拟化管理程序(hypervisor)、操作***、虚机、虚拟交换机和网络资源的云数据中心。在NFVI领域,虚拟机是承载和运行业务的实体,对虚拟机的可靠运行和故障检测提出了较高的要求,需要检测是内核态故障,还是用户态故障,并记录故障log(日志)。
QEMU是一套由法布里斯·贝拉编写的以GPL许可证分发源码的模拟处理器,在GNU/Linux平台上使用广泛。目前,QEMU启动的虚拟机任务进程作为host linux的一个用户进程,一般只能检测QEMU进程是否异常退出或处于僵尸进程状态,无法判断虚拟机内核状态是否异常,而且不能及时记录异常日志,重启恢复***,这样就会造成业务中断,带来致命的电信设备宕机故障。
发明内容
本发明的目的是为了克服上述背景技术的不足,提供一种虚拟机的故障检测恢复方法及***,能够可靠地检测虚拟机的内核和用户态故障,实现虚拟机的内核和用户态故障日志收集及故障自动恢复。
本发明提供一种虚拟机的故障检测恢复方法,包括以下步骤:
启动虚拟机时,虚拟看门狗;
虚拟机启动后,创建高精度定时器,并启动高精度定时器;
创建内核监控线程和用户态监控线程,内核监控线程进行基于netlink的内核故障心跳检测,用户态监控线程进行用户态喂狗检测;
内核监控线程检测到心跳异常时,用户态监控线程关闭看门狗,记录内核故障信息日志;用户态监控线程再打开看门狗,如果用户态喂狗异常超过预设的喂狗异常时间,则记录用户态故障信息日志,看门狗触发***故障复位重启。
在上述技术方案的基础上,所述创建内核监控线程和用户态监控线程以后,还包括以下步骤:创建Linux文件***的内核状态交互查询接口文件,作为虚拟机用户态和内核态的交互查询文件。
在上述技术方案的基础上,所述内核监控线程按照高精度定时器配置的周期进行基于netlink的内核故障心跳检测,用户态监控线程按照高精度定时器配置的周期进行用户态喂狗检测。
在上述技术方案的基础上,所述高精度定时器配置内核故障心跳检测的周期为20ms。
在上述技术方案的基础上,所述内核监控线程检测到心跳异常时,用户态监控线程关闭看门狗两个喂狗周期,提前收集内核故障信息日志。
本发明还提供一种虚拟机的故障检测恢复***,包括看门狗虚拟单元、高精度定时器创建单元、监控线程创建单元、故障日志收集单元,其中:
看门狗虚拟单元用于:启动虚拟机时,虚拟看门狗;
高精度定时器创建单元用于:虚拟机启动后,创建高精度定时器,并启动高精度定时器;
监控线程创建单元用于:创建内核监控线程和用户态监控线程,内核监控线程进行基于netlink的内核故障心跳检测,用户态监控线程进行用户态喂狗检测;
内核监控线程检测到心跳异常时,用户态监控线程关闭看门狗,故障日志收集单元记录内核故障信息日志;用户态监控线程再打开看门狗,如果用户态喂狗异常超过预设的喂狗异常时间,故障日志收集单元记录用户态故障信息日志,看门狗触发***故障复位重启。
在上述技术方案的基础上,该***还包括交互查询文件创建单元,监控线程创建单元创建内核监控线程和用户态监控线程以后,交互查询文件创建单元创建Linux文件***的内核状态交互查询接口文件,作为虚拟机用户态和内核态的交互查询文件。
在上述技术方案的基础上,所述内核监控线程按照高精度定时器配置的周期进行基于netlink的内核故障心跳检测,用户态监控线程按照高精度定时器配置的周期进行用户态喂狗检测。
在上述技术方案的基础上,所述高精度定时器配置内核故障心跳检测的周期为20ms。
在上述技术方案的基础上,所述内核监控线程检测到心跳异常时,用户态监控线程关闭看门狗两个喂狗周期,故障日志收集单元提前收集内核故障信息日志。
与现有技术相比,本发明的优点如下:
(1)本发明通过linux内核和用户态双通道检测手段,实现虚拟机故障的可靠检测和自动恢复,综合基于netlink的内核态和用户态通信心跳技术、基于虚拟看门狗的QEMU虚拟化用户态喂狗技术、内核态和用户态定时器技术、日志记录技术,形成一个自动化的故障检测和日志记录方法,基于双通道的虚拟机故障检测技术,可以更可靠地检测虚拟机的内核和用户态故障,并增加虚拟机的内核和用户态故障日志收集及故障自动恢复功能。用户态和内核态的双重保护,确保虚拟机故障的可靠检测和复位。
(2)高精度定时器配置内核故障心跳检测的周期为20ms,定时器的精度非常高,可以满足高精度虚拟机监控需求,并且可以通过/proc/kernel/parameter参数进行动态调整。内核高精度定时器调度开销小,执行可靠。
(3)基于netlink的内核和用户通信技术,***开销小,通信可靠。
(4)内核监控模块可以添加各种参数,对监控属性进行控制,方便灵活,通用性强。由于有内核态监控模块,可以获取所有用户态进程和操作***堆栈信息,并通过标准的socket(套接字)接口发送到用户态监控线程,不仅可以进行内核态心跳检测,还可以作为虚拟机故障诊断模块,动态扩展功能。
(5)虚拟机提供高效的状态查询文件接口,供用户动态查询内核态和用户态的状态,提高***的易用性。
(6)本发明可以记录不同的复位原因到日志文件,方便定位虚拟机故障复位原因,可以满足虚拟机内核或用户态异常情况下的故障检测和复位需求,提高了虚拟机linux***的可维护性和可靠性。
(7)本发明为虚拟机增加了虚拟看门狗芯片功能,提高了虚拟机故障后自动恢复功能,相比硬件看门狗芯片方案,有效降低了成本。
(8)虚拟机内核态和用户态心跳周期参数可以通过内核模块动态配置,用户程序通过查询proc文件***实时查询,增强了程序的通用性和可移植性。
(9)内核监控线程检测到心跳异常时,用户态监控线程关闭看门狗两个喂狗周期,从而可以提前收集内核故障信息日志,避免了看门狗喂狗异常导致的***突然重启,没有收集到日志的问题。
附图说明
图1是本发明实施例中虚拟机的故障检测恢复方法的流程图。
图2是本发明实施例中内核监控线程进行基于netlink的内核故障心跳检测的流程图。
图3是本发明实施例中通过控制虚拟看门狗工作并保存内核log信息的流程图。
图4是本发明实施例中虚拟看门狗的流程图。
具体实施方式
下面结合附图及具体实施例对本发明作进一步的详细描述。
实施例1
参见图1所示,本发明实施例1提供一种虚拟机的故障检测恢复方法,包括以下步骤:
S1:QEMU模拟器启动虚拟机时,增加--watchdog i6300esb参数,虚拟一个看门狗芯片intel 6300esb;
S2:虚拟机启动后,虚拟机的Linux文件***监控程序启动脚本/etc/rc.local(Linux的启动程序),自动加载内核监控模块kernelnetlink.ko,该内核监控模块创建高精度定时器,并启动高精度定时器;
由于有内核态监控模块,可以获取所有用户态进程和操作***堆栈信息,并通过标准的socket(套接字)接口发送到用户态监控线程,不仅可以进行内核态心跳检测,还可以作为虚拟机故障诊断模块,动态扩展功能。
启动虚拟机故障检测程序,虚拟机故障检测程序创建内核监控线程和用户态监控线程,内核监控线程按照高精度定时器配置的周期进行基于netlink的内核故障心跳检测,netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信;用户态监控线程按照高精度定时器配置的周期进行用户态喂狗检测;
S3:内核监控线程进行内核态netlink心跳通信,高精度定时器配置内核故障心跳检测的周期为20ms;用户态监控线程进行用户态软件喂狗操作,高精度定时器配置用户态软件喂狗检测的周期为10s。内核监控线程检测到心跳异常时,用户态监控线程关闭看门狗,记录内核故障信息日志;再打开看门狗,如果用户态喂狗异常超过预设的喂狗异常时间,例如:3分钟,则记录用户态故障信息日志,看门狗触发***故障复位重启。
本发明实施例在虚拟机启动的时候,增加虚拟看门狗功能,虚拟机内核配置好看门狗驱动支持,虚拟机启动后,通过启动脚本自动加载内核监控模块,内核监控模块启动高精度定时器,同时启动虚拟机故障检测程序,创建内核监控线程、用户态监控线程,内核监控线程进行内核的监控,用户态监控线程进行用户态的监控,同时进行故障日志记录工作。高精度定时器配置内核故障心跳检测的周期为20ms,定时器的精度非常高,可以满足高精度虚拟机监控需求,并且可以通过/proc/kernel/parameter参数进行动态调整。
若虚拟机发生故障,不管是内核故障还是用户态故障,都可以被及时的检测到,并进行故障信息记录,故障检测到3分钟后,会自动进行故障重启。
实施例2
在实施例1的基础上,高精度定时器的心跳时间默认配置为20ms,创建内核监控线程和用户态监控线程以后,还可以创建Linux文件***的内核状态交互查询接口文件,文件名为/proc/kernel/status,作为虚拟机用户态和内核态的交互查询文件。
内核监控线程检测到心跳异常时,用户态监控线程关闭看门狗两个喂狗周期,从而可以提前收集内核故障信息日志,避免了看门狗喂狗异常导致的***突然重启,没有收集到日志的问题。
当内核心跳发生故障的时候,停止看门狗功能,记录内核故障log(日志);再启用看门狗进行用户态软件喂狗,当用户态喂狗异常超过3分钟的时候,记录用户态故障日志,看门狗触发***故障复位重启。
本发明实施例通过增加并加载内核监控模块,启动一个内核高精度定时器,增加内核态故障检测和保护;增加一个用户态看门狗故障检测和保护,同时增加两种故障复位原因到日志文件供查询。通过netlink技术和用户态建立心跳,检测内核态的状态,并可以记录内核态的故障日志,同时进行用户态的看门狗喂狗监控,可以监控用户态的故障并记录log,同时可以在故障发生3分钟后,自动重启***。当虚拟机内核态或用户态出现故障时,都可以及时检测故障和记录日志,并进行故障复位,提高了虚拟机故障检测的可靠性和可维护管理能力。
实施例3
在实施例1的基础上,参见图2所示,内核监控线程进行基于netlink的内核故障心跳检测,具体步骤如下:
S101、虚拟机启动后,虚拟机加载内核态模块kernelnetlink.ko;
S102、初始化内核高精度定时器;
S103、写入文件/proc/kernel/parameter(内核心跳参数proc文件),定时器周期为20ms;
S104、绑定并监听netlink通道;
S105、按照定时器设定的周期,每隔20ms向用户态发送心跳;
S106、如果内核心跳异常,转到步骤S107;否则返回步骤S106;
S107、记录内核异常到/proc/kernel/status(内核异常状态proc文件)日志文件,转到步骤S108;
S108、延时10秒后,返回到步骤S105,继续进行周期性发送心跳。
若虚拟机发生故障,例如内核态异常,会自动记录内核态故障到日志文件,由于kernelnetlink.ko工作在内核态,可以实时的获取内核状态信息并通过netlink高速通道,通知到用户态程序。
实施例4
在实施例1的基础上,参见图3所示,通过控制虚拟看门狗工作并保存内核log信息,具体包括以下步骤:
S201、虚拟机启动后,systemwatch启动内核心跳检测线程;
S202、读取文件/proc/kernel/parameter,获取心跳周期20ms;
S203、和内核态建立netlink连接;
S204、判断内核态建立netlink连接是否成功,如果连接成功,转到步骤S205;否则返回步骤S204;
S205、判断内核态心跳是否异常,如果异常,转到步骤S206;否则返回步骤S205;
S206、如果内核态心跳异常,则关闭虚拟看门狗,转到步骤S207;
S207、保存内核log及/proc/kernel下的log信息,转到步骤S208;
S208、打开看门狗,用户态继续进行喂狗操作,转到步骤S209;
S209、延时20s后,返回到步骤S205,继续进行心跳检测。
若虚拟机监控线程没有检测到心跳,会优先去关闭看门狗,避免心跳突然复位,同时记录内核相关log,完成后,再打开看门狗进行用户态喂狗。延时20S后,也就是两个喂狗周期后,继续进行周期心跳检测。
实施例5
在实施例1的基础上,参见图4所示,虚拟看门狗,同时进行用户态喂狗,检测喂狗中断时间达到阈值后停止喂狗,触发***重启,从而避免虚拟机长时间挂死,实现故障自动恢复,具体包括以下步骤:
S301、QEMU模拟器启动虚拟机,增加—watchdog i6300esb参数,配置虚拟机看门狗;
S302、systemwatch用户态喂狗线程进行10S周期喂狗操作;
S303、看门狗芯片检测停止喂狗是否超过3分钟,如果停止喂狗超过3分钟,转到步骤S304;否则返回步骤S303;
S304、看门狗使***重启。
通过虚拟化看门狗技术,可以实现类似硬件看门狗芯片方案一样的***故障恢复功能,节省了成本,提高了虚拟机的可靠性。
实施例6
本发明实施例6提供一种虚拟机的故障检测恢复***,包括看门狗虚拟单元、高精度定时器创建单元、监控线程创建单元、故障日志收集单元,其中:
看门狗虚拟单元用于:启动虚拟机时,虚拟看门狗;
高精度定时器创建单元用于:虚拟机启动后,创建高精度定时器,并启动高精度定时器;
监控线程创建单元用于:创建内核监控线程和用户态监控线程,内核监控线程按照高精度定时器配置的周期进行基于netlink的内核故障心跳检测,用户态监控线程按照高精度定时器配置的周期进行用户态喂狗检测;
内核监控线程检测到心跳异常时,用户态监控线程关闭看门狗,故障日志收集单元记录内核故障信息日志;用户态监控线程再打开看门狗,如果用户态喂狗异常超过预设的喂狗异常时间,故障日志收集单元记录用户态故障信息日志,看门狗触发***故障复位重启。
本发明实施例在虚拟机启动的时候,增加虚拟看门狗功能,虚拟机内核配置好看门狗驱动支持,虚拟机启动后,创建高精度定时器,并启动高精度定时器;创建内核监控线程、用户态监控线程,内核监控线程进行内核的监控,用户态监控线程进行用户态的监控,同时进行故障日志记录工作。
若虚拟机发生故障,不管是内核故障还是用户态故障,都可以被及时的检测到,并进行故障信息记录,故障检测到预设的喂狗异常时间后,会自动进行故障重启。
实施例7
本发明实施例7提供一种虚拟机的故障检测恢复***,包括看门狗虚拟单元、高精度定时器创建单元、监控线程创建单元、交互查询文件创建单元、故障日志收集单元,其中:
看门狗虚拟单元用于:启动虚拟机时,虚拟看门狗;
高精度定时器创建单元用于:虚拟机启动后,创建高精度定时器,并启动高精度定时器;
监控线程创建单元用于:创建内核监控线程和用户态监控线程,内核监控线程按照高精度定时器配置的周期进行基于netlink的内核故障心跳检测,用户态监控线程按照高精度定时器配置的周期进行用户态喂狗检测;
交互查询文件创建单元用于:监控线程创建单元创建内核监控线程和用户态监控线程以后,交互查询文件创建单元创建Linux文件***的内核状态交互查询接口文件,作为虚拟机用户态和内核态的交互查询文件。
内核监控线程检测到心跳异常时,用户态监控线程关闭看门狗,故障日志收集单元记录内核故障信息日志;用户态监控线程再打开看门狗,如果用户态喂狗异常超过预设的喂狗异常时间,故障日志收集单元记录用户态故障信息日志,看门狗触发***故障复位重启。
本发明实施例通过启动一个内核高精度定时器,增加内核态故障检测和保护;增加一个用户态看门狗故障检测和保护,同时增加两种故障复位原因到日志文件供查询。通过netlink技术和用户态建立心跳,检测内核态的状态,并可以记录内核态的故障日志,同时进行用户态的看门狗喂狗监控,可以监控用户态的故障并记录log,故障检测到预设的喂狗异常时间后,自动重启***。当虚拟机内核或用户态出现故障时,都可以及时检测故障和记录日志,并进行故障复位,提高了虚拟机故障检测的可靠性和可维护管理能力。
实施例8
本发明实施例8提供一种虚拟机的故障检测恢复***,包括看门狗虚拟单元、高精度定时器创建单元、监控线程创建单元、交互查询文件创建单元、故障日志收集单元,其中:
看门狗虚拟单元用于:启动虚拟机时,虚拟看门狗;
高精度定时器创建单元用于:虚拟机启动后,创建高精度定时器,并启动高精度定时器;
监控线程创建单元用于:创建内核监控线程和用户态监控线程,内核监控线程按照高精度定时器配置的周期20ms,进行基于netlink的内核故障心跳检测,用户态监控线程按照高精度定时器配置的周期10s,进行用户态喂狗检测;
交互查询文件创建单元用于:监控线程创建单元创建内核监控线程和用户态监控线程以后,交互查询文件创建单元创建Linux文件***的内核状态交互查询接口文件,作为虚拟机用户态和内核态的交互查询文件。
内核监控线程检测到心跳异常时,用户态监控线程关闭看门狗两个喂狗周期,故障日志收集单元可以提前收集内核故障信息日志,避免了看门狗喂狗异常导致的***突然重启,没有收集到日志的问题。用户态监控线程再打开看门狗,如果用户态喂狗异常超过预设的喂狗异常时间3分钟,故障日志收集单元记录用户态故障信息日志,看门狗触发***故障复位重启。
本发明实施例通过启动一个内核高精度定时器,增加内核态故障检测和保护;增加一个用户态看门狗故障检测和保护,同时增加两种故障复位原因到日志文件供查询。通过netlink技术和用户态建立心跳,检测内核态的状态,并可以记录内核态的故障日志,同时进行用户态的看门狗喂狗监控,可以监控用户态的故障并记录log,同时可以在故障发生3分钟后,自动重启***。当虚拟机内核态或用户态出现故障时,都可以及时检测故障和记录日志,并进行故障复位,提高了虚拟机故障检测的可靠性和可维护管理能力。
本领域的技术人员可以对本发明实施例进行各种修改和变型,倘若这些修改和变型在本发明权利要求及其等同技术的范围之内,则这些修改和变型也在本发明的保护范围之内。
说明书中未详细描述的内容为本领域技术人员公知的现有技术。