发明内容
本发明的目的在于克服现有技术的一项或多项不足,提供一种虚拟机高可用方法及计算集群。
本发明的目的是通过以下技术方案来实现的:
根据本发明的第一方面,一种虚拟机高可用方法,应用于计算集群,所述计算集群包括控制节点和计算节点,所述计算节点和控制节点心跳连接,所述虚拟机高可用方法包括计算节点步骤和控制节点步骤中的至少一种;
所述计算节点步骤包括:
计算节点判断是否进行宕机检测;
若计算节点进行宕机检测,则所述计算节点通过第一预设途径联系所述控制节点;
若所述计算节点通过第一预设途径无法联系到所述控制节点,则该计算节点执行脑裂保护;
所述控制节点步骤包括:
控制节点判断是否对计算节点进行宕机检测;
若对计算节点进行宕机检测,则控制节点通过第二预设途径联系所述计算节点;
若控制节点通过第二预设途径无法联系到所述计算节点,则控制节点将所述计算节点标记为停止状态,并将该计算节点上的虚拟机标记为故障中状态;
控制节点对处于故障中状态的虚拟机进行启动操作,若处于故障中状态的虚拟机启动失败的次数大于第一阈值,则将该虚拟机标记为停止状态。
优选的,计算节点判断是否进行宕机检测,包括:
若计算节点心跳曾经发送成功,则判断当前心跳是否发送超时;
若当前心跳发送超时,则计算节点判断是否超过预设的故障检测时段;
若未超过故障检测时段,则进行宕机检测。
优选的,所述计算节点通过第一预设途径联系所述控制节点,包括:
计算节点检测其所有已配IP的网卡链路是否全部中断;
若计算节点所有已配IP的网卡链路全部中断,则计算节点通过第一预设途径无法联系到所述控制节点;
若计算节点所有已配IP的网卡链路未全部中断,则计算节点检测预设的第一探测IP清单中所有IP是否全部超时;
若第一探测IP清单中所有IP全部超时,则计算节点通过第一预设途径无法联系到所述控制节点。
优选的,所述计算节点通过第一预设途径联系所述控制节点,包括:
计算节点判断是否已启用光纤心跳块;
若已启用光纤心跳块,则计算节点通过光纤心跳块发送心跳信息;
若计算节点通过光纤心跳块发送心跳信息失败的次数大于第二阈值,则计算节点通过第一预设途径无法联系到所述控制节点;
若未启用光纤心跳块,则计算节点检测其所有已配IP的网卡链路是否全部中断;
若计算节点所有已配IP的网卡链路未全部中断,则计算节点检测预设的第二探测IP清单中所有IP是否全部超时;
若第二探测IP清单中所有IP全部超时,则计算节点判断存储路径是否存在;
若计算节点所有已配IP的网卡链路全部中断,则计算节点判断存储路径是否存在;
若存储路径不存在,则计算节点通过第一预设途径无法联系到所述控制节点;
若存储路径存在,则计算节点启用光纤心跳块,并通过光纤心跳块发送心跳信息。
优选的,计算节点执行脑裂保护,包括:
计算节点销毁本机上的虚拟机。
优选的,控制节点判断是否对计算节点进行宕机检测,包括:
控制节点遍历所有处于运行中状态、且心跳超时的计算节点;
控制节点判断所述计算节点是否过了故障检测时段;
若计算节点未过故障检测时段,则控制节点将所述计算节点标记为故障中状态,并对所述计算节点进行宕机检测。
优选的,控制节点判断是否对计算节点进行宕机检测,包括:
控制节点遍历所有处于故障中状态的计算节点;
控制节点判断所述计算节点是否过了故障检测时段;
若计算节点未过故障检测时段,则控制节点对所述计算节点进行宕机检测。
优选的,控制节点通过第二预设途径联系所述计算节点,包括
控制节点将计算节点的标记为检测中状态;
控制节点判断所述计算节点所有已配IP的网卡链路是否全部中断;
若所述计算节点所有已配IP的网卡链路全部中断,则检测是否已启用光纤心跳块;
若已启用光纤心跳块,则检测光纤心跳块到所述计算节点的心跳是否正常;
若光纤心跳块到所述计算节点的心跳不正常,则通过旁路监听的方式监听来自所述计算节点的网络请求;
若未启用光纤心跳块,则通过旁路监听的方式监听来自所述计算节点的网络请求;
若通过旁路监听的方式未监听到来自所述计算节点的网络请求,则控制节点通过第二预设途径无法联系到所述计算节点。
优选的,控制节点对处于故障中状态的虚拟机进行启动操作,包括:
控制节点遍历所有处于故障中状态的虚拟机;
控制节点检测所述处于故障中状态的虚拟机是否被锁定;
若所述虚拟机未锁定,则控制节点采用多线程锁定方式对处于故障中状态的虚拟机进行在其它主机上的启动操作,所述其它主机为所述计算集群中该虚拟机原宿主机以外的其他计算节点。
根据本发明的第二方面,一种计算集群,包括控制节点、计算节点、通信网和光纤存储,所述计算节点和控制节点心跳连接;
所述控制节点和计算节点与所述通信网连接;
所述控制节点和计算节点与所述光纤存储连接;
所述计算节点在光纤存储上创建有对应的光纤心跳块;
所述控制节点用于执行本发明的第一方面中的控制节点步骤;
所述计算节点用于执行本发明的第一方面中的计算节点步骤。
本发明的有益效果是:本发明提出的虚拟机高可用方法能够在尽可能短的时间内将服务中断的虚拟机恢复运行,减少了虚拟机服务停机时间,提升了虚拟机的可用性。
具体实施方式
下面将结合实施例,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有付出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
参阅图1-图7,本实施例提供了一种虚拟机高可用方法及计算集群:
本发明提供的一种虚拟机高可用方法的一个实施例包括:一种虚拟机高可用方法,应用于计算集群,所述计算集群包括控制节点和计算节点,所述计算节点和控制节点心跳连接。一般的,所述计算集群中设置有一个管理网,计算节点和控制节点通过管理网实现心跳连接,同时还设置有一个备用的冗余网或者光线存储。
所述虚拟机高可用方法包括计算节点步骤和控制节点步骤中的至少一种。
如图1所示,所述计算节点步骤包括:
S100. 计算节点判断是否进行宕机检测,若进行宕机检测,则执行S200。
在一个实施例中,所述S100包括:
S110. 若计算节点心跳曾经发送成功,则判断当前心跳是否发送超时,若心跳超时则执行S120。
例如,心跳超时时间设置为5秒。
S120. 计算节点判断是否超过预设的故障检测时段,若未超过故障检测时段,则计算节点进行宕机检测。
在又一个实施例中,若超过故障检测时段,则将该计算节点的心跳状态设置为从未发送成功过。
S200. 所述计算节点通过第一预设途径联系所述控制节点,若所述计算节点通过第一预设途径无法联系到所述控制节点,则执行S300。
如图2所示,在一个实施例中,所述计算节点通过第一预设途径联系所述控制节点,包括:
S211.计算节点检测其所有已配IP的网卡链路是否全部中断:若计算节点所有已配IP的网卡链路全部中断,则认为计算节点通过第一预设途径无法联系到所述控制节点;若计算节点所有已配IP的网卡链路未全部中断,则执行S212。
在又一个实施例中,计算节点在采集主机注册信息时,将所有网卡设备信息缓存起来;检测时从缓存中遍历所有已配IP的网卡信息,采用命令“ethtool 网卡设备名”检测,从输出结果中找到link detected 项的值,如果非”yes”,则判定为连接中断。
S212. 计算节点检测预设的第一探测IP清单中所有IP是否全部超时,若第一探测IP清单中所有IP全部超时,则认为计算节点通过第一预设途径无法联系到所述控制节点。
在又一个实施例中,计算节点在通信异常时实施脑裂保护,通过向第一探测IP清单中所有IP发起通信请求来确认自身是否已成为通信孤岛。所述第一IP探测清单由当前控制节点所有有效静态IP地址、pacemaker集群虚拟IP、第三方主机IP三部分构成,其中第三方主机IP由当前资源池下0-3个在线主机真实IP地址构成,用于防止控制节点全部宕机导致全池执行脑裂保护。
如图3所示,在一个实施例中,所述计算节点通过第一预设途径联系所述控制节点,包括:
S221. 计算节点判断是否已启用光纤心跳块:若是,则执行S222;若否,则执行S223。
S222. 计算节点向对应的光纤心跳块发送心跳,若向光纤心跳块发送心跳连续失败的次数大于第二阈值,则认为计算节点通过第一预设途径无法联系到所述控制节点。
S223. 计算节点检测其所有已配IP的网卡链路是否全部中断:若计算节点所有已配IP的网卡链路未全部中断,则执行S224;若计算节点所有已配IP的网卡链路全部中断,则执行S225。
S224. 计算节点检测预设的第二探测IP清单中所有IP是否全部超时,若第二探测IP清单中所有IP全部超时,则执行S225。
在又一个实施例中,计算节点在通信异常时尝试检测自己与当前控制节点之间是否还有IP能够通信;第二探测IP清单由当前控制节点所有有效静态IP地址、pacemaker集群虚拟IP两部分构成。
探测IP(第一探测IP清单和第二探测IP清单中的IP)的生成方式为:由于资源池环境中的主机状态是实时变化的,控制节点也不是固定不变的;因此,探测IP将由当前控制节点在接收每次心跳请求时实时生成,并返回给计算节点。
第一探测IP清单和第二探测IP清单的检测方式为:取得IP数量N,开启N个线程(线程内部执行命令:ping ip地址,一旦ping通则唤醒父线程,并标识为能到达, X秒内无响应则结束命令线程),当前线程wait X秒等待任意线程ping通网IP后唤醒。
S225. 计算节点判断存储路径是否存在:若存储路径不存在,则认为节点通过第一预设途径无法联系到所述控制节点;若存储路径存在,则计算节点启用光纤心跳块,然后执行S222。
S300. 计算节点执行脑裂保护。
一般的,脑裂是指多个虚拟机运行实例同时读写同一份虚拟磁盘,导致虚拟机磁盘文件损坏;一般来说,如果一个虚拟机同时在多个物理机上运行时,就是脑裂的状态。
在又一个实施例中,计算节点执行脑裂保护,包括:计算节点销毁本机上的虚拟机。例如,执行脑裂保护时,尝试用命令killall -9 –w qemu-kvm杀掉本机上所有虚拟机进程;如果因nfs挂载异常导致文件系统卡死,或domain太多进程杀死太慢,直接采用命令:echo b >/proc/sysrq-trigger,直接杀死操作系统。
如图4所示,所述控制节点步骤包括:
K100.控制节点判断是否对计算节点进行宕机检测,若对计算节点进行宕机检测,则执行K200。
如图5所示,在一个实施例中,控制节点判断是否对计算节点进行宕机检测,包括:
K111.控制节点遍历所有处于运行中状态、且心跳超时的计算节点。
一般的,所述计算节点为控制器的会话管理器中已存在会话的计算节点,从而排除刚启动还没有会话连接的情形。
K112.控制节点判断所述计算节点是否过了故障检测时段,若计算节点未过故障检测时段,则执行K113。
K113.控制节点将所述计算节点标记为故障中状态,并认为需对所述计算节点进行宕机检测。
在又一个实施例中,在控制节点将计算节点标记为故障中状态的同时,控制节点执行以下操作:进行主机(计算节点)心跳超时的告警;清理该计算节点心跳缓存、心跳监听器缓存;注销并关闭与该计算节点的会话。
在又一个实施例中,若计算节点已过故障检测时段,则控制节点执行如下操作:将所述计算节点标记为掉线状态;进行主机掉线告警;清理该计算节点心跳缓存、心跳监听器缓存;注销并关闭与该计算节点的会话。
如图6所示,在一个实施例中,控制节点判断是否对计算节点进行宕机检测,包括:
K121.控制节点遍历所有处于故障中状态的计算节点。
K122.控制节点判断所述计算节点是否过了故障检测时段,若计算节点未过故障检测时段,则认为需对所述计算节点进行宕机检测。
在又一个实施例中,若计算节点已过故障检测时段,则控制节点执行如下操作:将所述计算节点设置为掉线状态;将所述计算机上的虚拟机设置为无法确定状态,并锁定所述虚拟机;告警无法确定虚拟机状态。
本实施例中,控制节点对宕机检测采用事件监听方式,可以支持大规模并发故障处理。这里采用瞬时事件触发和任务轮循并行的方式,从而保证检测与恢复的时间最小化,同时又能保证各个环节失败后能自动重试。多点并发启动时,虚拟机启动采用 “排它锁”,确保谁优先抢到虚拟机启动锁,由谁执行启动操作,避免两线程同时执行虚拟机启动引起脑裂。
K200. 控制节点通过第二预设途径联系所述计算节点,若控制节点通过第二预设途径无法联系到所述计算节点,则执行K300。
如图7所示,在一个实施例中,控制节点通过第二预设途径联系所述计算节点,包括:
K210.控制节点将计算节点的标记为检测中状态。
K220. 控制节点判断所述计算节点所有已配IP的网卡链路是否全部中断,若所述计算节点所有已配IP的网卡链路全部中断,则执行K230。
在又一个实施例中,若所述计算节点所有已配IP的网卡链路未全部中断,则将所述计算节点标记为故障中状态,等待下一次检测。
K230. 检测是否已启用光纤心跳块:若已启用光纤心跳块,则执行K240;若未启用光纤心跳块,则执行K250。
K240.检测光纤心跳块到所述计算节点的心跳是否正常,若光纤心跳块到所述计算节点的心跳不正常,则执行K250。
在又一个实施例中,若光纤心跳块到所述计算节点的心跳正常,则控制节点执行如下操作:告警所述计算节点网络通讯全面中断,可能导致其上所有虚拟机网络中断;将所述计算节点标记为掉线状态。
K250. 控制节点通过旁路监听的方式监听来自所述计算节点的网络请求,若通过旁路监听的方式未监听到来自所述计算节点的网络请求,则认为控制节点通过第二预设途径无法联系到所述计算节点。
例如,若在10秒内收到一个数据包即认为监听到来自所述计算节点的网络请求。
例如,控制节点从数据库取得计算节点所含IP地址表列,取得该计算节点IP地址数量N,开启N个线程(线程内部执行命令:ping ip地址,一旦ping通则唤醒父线程,并标识为网关可通,8秒内无响应则销毁命令线程),当前线程wait 8秒等待任意线程ping通网关后唤醒。
K300. 控制节点将所述计算节点标记为停止状态,并将该计算节点上的虚拟机标记为故障中状态。
在又一个实施例中,K300步骤还包括控制节点告警虚拟机宕机,并清洗虚拟机的宿主机。
K400. 控制节点对处于故障中状态的虚拟机进行启动操作,若处于故障中状态的虚拟机启动失败的次数大于第一阈值,则将该虚拟机标记为停止状态。
控制节点对处于故障中状态的虚拟机进行启动操作,具体是尝试在所述虚拟机原宿主机以外的其他计算节点上启动该虚拟机。
在又一个实施例中,控制节点对处于故障中状态的虚拟机进行启动操作,包括:
K410.控制节点遍历所有处于故障中状态的虚拟机;
K420.控制节点检测所述处于故障中状态的虚拟机是否被锁定,若所述虚拟机未锁定,则执行K430;
K430.控制节点采用多线程锁定方式对处于故障中状态的虚拟机进行在其它主机上的启动操作,所述其它主机为所述计算集群中该虚拟机原宿主机以外的其他计算节点。
本发明提供的一种计算集群的一个实施例包括:一种计算集群,包括控制节点、计算节点、通信网和光纤存储,所述计算节点和控制节点心跳连接,所述控制节点和计算节点与所述通信网连接;所述控制节点和计算节点与所述光纤存储连接;所述计算节点在光纤存储上创建有对应的光纤心跳块;所述控制节点用于执行上述实施例示出的控制节点步骤;所述计算节点用于执行上述实施例示出的计算节点步骤。
以上所述仅是本发明的优选实施方式,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。