一种基于共享存储消息队列的虚拟机高可用实现方法技术

技术编号:10862831 阅读:156 留言:0更新日期:2015-01-01 22:03
一种基于共享存储消息队列的虚拟机高可用实现方法,涉及云计算领域,包括步骤:服务端程序在共享存储上初始化一块连续的空间作为逻辑卷;从逻辑卷中分配连续的多个扇区作为客户端程序的扇区池;客户端程序获取扇区池的配置信息和已启用高可用的虚拟机号;客户端程序发送心跳消息,并更新本客户端程序维护的虚拟机控制块的时间戳;服务端程序接收心跳消息,利用心跳消息中携带的时间戳更新服务端程序维护的虚拟机控制块的时间戳。本发明专利技术避免不必要的虚拟机停机时间,心跳检测机制消耗系统资源少,性能高,延长共享存储磁盘的使用寿命。

【技术实现步骤摘要】
一种基于共享存储消息队列的虚拟机高可用实现方法
本专利技术涉及云计算领域,具体涉及一种基于共享存储消息队列的虚拟机高可用实现方法。
技术介绍
在云计算数据中心,虚拟机通常运行在物理服务器上,当物理服务器断电或发生其他故障时,运行在其上的虚拟机也会关闭,导致虚拟机中运行的用户业务被意外中断。如果要保证用户业务被意外中断后能够自动恢复,则需要实时监控虚拟机的状态,在物理服务器发生故障时,将其上的虚拟机转移到其他服务器上重新启动,这称为虚拟机高可用。虚拟机高可用需要使用共享存储来存放虚拟机的磁盘文件,使得所有的服务器都能访问到共享存储上的磁盘文件,以便在检测到服务器断电后,其他正常运行的服务器能够从共享存储上读取虚拟机的磁盘文件并启动虚拟机。为了实时检测虚拟机的状态,需要引入心跳检测机制,当检测不到虚拟机的心跳时,说明该虚拟机已经关闭,从而选择一台正在运行的服务器重新启动该虚拟机。目前虚拟机心跳检测机制有两种:1、基于管理网络的心跳检测。所有服务器通过管理网络交换虚拟机状态消息,当服务器断电时,该服务器不再发送虚拟机状态消息,其他正常运行的服务器会检测到故障服务器上的虚拟机状态消息超时,触发虚拟机故障转移,从而重新启动该虚拟机。但是,当服务器只是管理网络断开而并非服务器故障时,该服务器发送的虚拟机状态消息无法被其他服务器收到,此时也会触发虚拟机故障转移,然而,如果仅仅只是管理网络断开,虚拟机可以正常运行,虚拟机里的用户业务也可以被正常访问,此时触发虚拟机故障转移会导致用户业务中断,导致不必要的虚拟机停机时间。2、基于共享存储锁的心跳检测。为了解决管理网络断开导致不必要的虚拟机故障转移,将虚拟机的锁信息保存在共享存储上,所有的服务器都通过共享存储读取虚拟机的锁信息。当服务器的管理网络连接时,通过管理网络交换虚拟机的状态信息;当服务器的管理网络断开时,通过共享存储更新虚拟机的锁信息,此时不会触发虚拟机故障转移;当服务器断电或者管理网络和存储网络都断开时,共享存储上的虚拟机的锁信息不再被更新,从而触发虚拟机故障转移。目前基于共享存储锁的心跳检测的常用实现方法是:为每个虚拟机磁盘文件分配一个扇区(通常大小为512字节),用来保存该虚拟机磁盘文件的共享存储锁,服务器在启动虚拟机之前先尝试获取虚拟机磁盘文件的共享存储锁,如果虚拟机磁盘文件没有被其他服务器上锁,则上锁并启动该虚拟机;如果虚拟机磁盘文件已被其他服务器上锁,且其锁没有超时,则无法启动该虚拟机;如果虚拟机磁盘文件已被其他服务器上锁,但其锁已超时,则抢占锁并启动该虚拟机。持有虚拟机共享存储锁的物理服务器周期性更新锁状态,当服务器断电或存储网络断开时,其持有的虚拟机共享存储锁将不再被更新,等到锁超时后,其他正常运行的物理服务器可以抢占这些虚拟机的共享存储锁,并启动虚拟机,从而实现虚拟机故障转移。但是这种方法同样存在一些缺点,假设数据中心有10台服务器,每台服务器上运行30个虚拟机,总共300个虚拟机全部开启虚拟机高可用,则:虚拟机共享存储锁占用空间比较大,总共需要512×300=153600字节存储空间;虚拟机心跳检测占用的网络带宽大,每次读取或更新共享存储锁都会传输512×300=153600字节;为了实时获取共享存储锁状态,服务器在更新虚拟机共享存储锁的时候会禁用缓存,直接写磁盘,这样会大大缩短磁盘寿命,如果磁盘的最大写次数为360000次,虚拟机心跳检测周期为10秒,则每个虚拟机共享存储锁在使用360000×10÷3600=1000小时后出现坏道。
技术实现思路
针对现有技术中存在的缺陷,本专利技术的目的在于提供一种基于共享存储消息队列的虚拟机高可用实现方法,其避免不必要的虚拟机停机时间,心跳检测机制消耗系统资源少,性能高,延长共享存储磁盘的使用寿命。为达到以上目的,本专利技术采取的技术方案是:一种基于共享存储消息队列的虚拟机高可用实现方法,用于数据中心,数据中心包括一个控制节点、一个共享存储和至少两个计算节点,控制节点运行服务端程序,每个计算节点上运行客户端程序,客户端程序为运行在本计算节点上的每个已启用高可用的虚拟机创建一个虚拟机控制块并维护,服务端程序为运行在所有计算节点上的每个已启用高可用的虚拟机创建一个虚拟机控制块并维护,实现方法包括以下步骤:S1.服务端程序在共享存储上初始化一块连续的空间作为逻辑卷;S2.每个客户端程序分别连接到服务端程序,服务端程序从逻辑卷中分配连续的多个扇区作为该客户端程序的扇区池,并在扇区池的最后一个扇区写入该客户端程序的唯一标识,所述最后一个扇区前面的连续扇区作为该客户端程序的共享存储消息队列;S3.客户端程序从服务端程序获取该客户端程序的扇区池配置信息和已启用高可用的虚拟机号;S4.客户端程序向服务端程序周期性发送心跳消息,并更新本客户端程序维护的虚拟机控制块的时间戳,客户端程序检查其维护的每个虚拟机控制块是否超时;S5.服务端程序接收客户端程序发送的心跳消息,利用心跳消息中携带的时间戳更新服务端程序维护的虚拟机控制块的时间戳,服务端程序检查其维护的每个虚拟机控制块是否超时。在上述技术方案的基础上,客户端程序的扇区池配置信息包括扇区池所在的逻辑卷、开始扇区号、结束扇区号、每个扇区的大小。在上述技术方案的基础上,数据中心还包括管理网络交换机,控制节点、计算节点和管理网络交换机形成管理网络,控制节点、计算节点和共享存储形成存储网络,客户端程序和服务端程序优先通过管理网络传输心跳消息,当管理网络断开时通过存储网络传输心跳消息。在上述技术方案的基础上,心跳消息包括时间戳、扇区池号、客户端程序标识和运行在本计算节点上的已启用高可用的虚拟机号列表。在上述技术方案的基础上,虚拟机号列表的格式为“[虚拟机号,虚拟机号,虚拟机号]”。在上述技术方案的基础上,每个虚拟机控制块记录虚拟机的高可用信息,包括虚拟机号、超时时长、故障转移优先级、时间戳、该虚拟机所在计算节点的客户端程序标识。在上述技术方案的基础上,步骤S4中,客户端程序通过管理网络向服务端程序发送心跳消息,如果发送成功,直接更新本客户端程序维护的虚拟机控制块的时间戳;如果发送失败,将心跳消息写入本客户端程序的扇区池的共享存储消息队列中,再更新本客户端程序维护的虚拟机控制块的时间戳;客户端程序检查其维护的每个虚拟机控制块是否超时,如果超时,删除超时的虚拟机控制块,并关闭该虚拟机,客户端程序继续向服务端程序发送心跳消息;如果未超时,客户端程序继续向服务端程序发送心跳消息。在上述技术方案的基础上,心跳消息的写入方式为循环使用共享存储消息队列中的扇区,每次使用的扇区为上一次使用后的下一个扇区,当写入最后一个扇区时,下次写入第一个扇区。在上述技术方案的基础上,步骤S5中,服务端程序通过管理网络接收客户端程序发送的心跳消息,如果在指定时间内接收成功,利用心跳消息中携带的时间戳更新服务端程序维护的虚拟机控制块的时间戳;如果超过指定时间未接收到心跳消息,则读取该客户端程序的扇区池的共享存储消息队列中的所有心跳消息,并从中读取最新的心跳消息,再利用心跳消息中携带的时间戳更新服务端程序维护的虚拟机控制块的时间戳;服务端程序检查其维护的每个虚拟机控制块是否超时,如果超时,选择另一台计算节点并通知其重新启本文档来自技高网
...

【技术保护点】
一种基于共享存储消息队列的虚拟机高可用实现方法,用于数据中心,数据中心包括一个控制节点、一个共享存储和至少两个计算节点,控制节点运行服务端程序,每个计算节点上运行客户端程序,客户端程序为运行在本计算节点上的每个已启用高可用的虚拟机创建一个虚拟机控制块并维护,服务端程序为运行在所有计算节点上的每个已启用高可用的虚拟机创建一个虚拟机控制块并维护,其特征在于,实现方法包括以下步骤:S1.服务端程序在共享存储上初始化一块连续的空间作为逻辑卷;S2.每个客户端程序分别连接到服务端程序,服务端程序从逻辑卷中分配连续的多个扇区作为该客户端程序的扇区池,并在扇区池的最后一个扇区写入该客户端程序的唯一标识,所述最后一个扇区前面的连续扇区作为该客户端程序的共享存储消息队列;S3.客户端程序从服务端程序获取该客户端程序的扇区池配置信息和已启用高可用的虚拟机号;S4.客户端程序向服务端程序周期性发送心跳消息,并更新本客户端程序维护的虚拟机控制块的时间戳,客户端程序检查其维护的每个虚拟机控制块是否超时;S5.服务端程序接收客户端程序发送的心跳消息,利用心跳消息中携带的时间戳更新服务端程序维护的虚拟机控制块的时间戳,服务端程序检查其维护的每个虚拟机控制块是否超时。...

【技术特征摘要】
1.一种基于共享存储消息队列的虚拟机高可用实现方法,用于数据中心,数据中心包括一个控制节点、一个共享存储和至少两个计算节点,控制节点运行服务端程序,每个计算节点上运行客户端程序,客户端程序为运行在本计算节点上的每个已启用高可用的虚拟机创建一个虚拟机控制块并维护,服务端程序为运行在所有计算节点上的每个已启用高可用的虚拟机创建一个虚拟机控制块并维护,其特征在于,实现方法包括以下步骤:S1.服务端程序在共享存储上初始化一块连续的空间作为逻辑卷;S2.每个客户端程序分别连接到服务端程序,服务端程序从逻辑卷中分配连续的多个扇区作为该客户端程序的扇区池,并在扇区池的最后一个扇区写入该客户端程序的唯一标识,所述最后一个扇区前面的连续扇区作为该客户端程序的共享存储消息队列,用于该客户端程序和服务器程序交换心跳消息;S3.客户端程序从服务端程序获取该客户端程序的扇区池配置信息和已启用高可用的虚拟机号;S4.客户端程序向服务端程序周期性发送心跳消息,并更新本客户端程序维护的虚拟机控制块的时间戳,客户端程序检查其维护的每个虚拟机控制块是否超时;S5.服务端程序接收客户端程序发送的心跳消息,利用心跳消息中携带的时间戳更新服务端程序维护的虚拟机控制块的时间戳,服务端程序检查其维护的每个虚拟机控制块是否超时。2.如权利要求1所述的基于共享存储消息队列的虚拟机高可用实现方法,其特征在于:客户端程序的扇区池配置信息包括扇区池所在的逻辑卷、开始扇区号、结束扇区号、每个扇区的大小。3.如权利要求1所述的基于共享存储消息队列的虚拟机高可用实现方法,其特征在于:数据中心还包括管理网络交换机,控制节点、计算节点和管理网络交换机形成管理网络,控制节点、计算节点和共享存储形成存储网络,客户端程序和服务端程序优先通过管理网络传输心跳消息,当管理网络断开时通过存储网络传输心跳消息。4.如权利要求1所述的基于共享存储消息队列的虚拟机高可用实现方法,其特征在于:心跳消息包括时间戳、扇区池号、客户端程序标识和运行在本计算节点...

【专利技术属性】
技术研发人员:阮泽林
申请(专利权)人:武汉噢易云计算有限公司
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1