基于仲裁服务器的集群裂脑预防方法和装置制造方法及图纸

技术编号:9826712 阅读:184 留言:0更新日期:2014-04-01 16:06
本发明专利技术公开一种基于仲裁服务器的高可用集群裂脑预防的方法和装置,属于计算机集群技术领域的高可用集群裂脑预防技术。为解决在集群心跳网络中断时,无法准确判别其他节点及其运行服务的状态,而出现无法接管服务或服务在两个节点同时运行问题。本发明专利技术实施例提供的方案包括:在心跳网络中断时,未运行服务的集群节点只有通过仲裁服务器获得相应服务锁,才可以进行服务接管,从而避免裂脑问题;服务停止后,仲裁服务器回收服务锁并允许其他集群节点重新抢占它;在多个节点同时抢占服务锁的过程中,只有一个节点抢占成功并能启动服务,防止了裂脑的发生。

【技术实现步骤摘要】
基于仲裁服务器的集群裂脑预防方法和装置
本专利技术属于计算机集群
,适用于高可用性集群(High-availabilityCluster),尤其涉及高可用集群裂脑预防

技术介绍
随着通信网络技术的飞速发展,电信、金融、电子政务等关键领域对服务器可用性的要求越来越高。高可用(HighAvailability,HA)集群技术可以有效减少业务系统因软件、硬件故障造成的服务停止时间。当前高可用集群系统主要通过网络或串口线等链路作为集群节点间通信的私有心跳网络,负责交换同步节点间的信息,监测集群中各个节点的运行情况。当服务运行节点故障,备份节点不能在一定时间内收到服务运行节点的心跳信息,则认为服务运行节点发生了故障并进行服务接管。但是当所有心跳链路发生故障,可能会导致服务运行节点和备份节点同时启动业务,造成集群裂脑(Split-Brain)和数据损坏。为了保障用户的业务可持续性及数据安全性,防止集群裂脑是必不可少的,目前通用的做法是将故障节点Fencing重启或将通过SCSI3保留技术对共享存储进行Fencing隔离。但专利技术人发现这些方法存在局限性,在实际环境中,经常不具备Fencing的硬件条件,而且备份节点上同样运行着其他重要的业务,客户不允许操作系统重启或共享存储被隔离。另外,基于共享磁阵的磁盘锁技术虽然能在局域网、带有共享磁阵的场合部分解决集群裂脑问题,但同样存在诸多局限性,比如需要重新划分共享磁阵分区、不支持无磁阵环境、不支持虚拟机环境、不支持广域网异地集群等。
技术实现思路
本专利技术实例目的在于提供一种基于仲裁服务器的集群裂脑预防方法和装置,克服现有技术的不足,在不需要将服务器节点Fencing重启或共享存储Fencing隔离的情况下,仍然能够在集群心跳网络中断或异常时,防止集群裂脑发生和数据损坏。并且克服磁阵仲裁盘必须配置共享磁阵,必须对磁阵进行重新分区,只能用于局域网的局限性,不支持虚拟机环境等局限性,适用于无共享磁阵、不需要对磁阵重新分区、虚拟机集群、广域网异地集群等高可用集群环境。本专利技术通过如下方法和装置实现:当节点或心跳网络故障时,服务未运行子集群必须先向仲裁服务器申请并获得服务锁,才能进行服务的接管,如果因任何原因,服务未运行子集群不能获得服务锁,则不能执行服务启动动作。从而避免两个节点同时启动服务,防止集群裂脑的发生。由于原服务运行节点心跳线中断到停止服务需要一个t_giveup时间,所以在这个时间内,尝试接管服务的子集群会持续发送申请服务锁请求,直到取得服务锁。服务运行子集群定期发送服务锁刷新消息到仲裁服务器,仲裁服务器更新当前服务锁时间戳,维护服务锁状态不变。此时,非服务运行子集群的节点无法获得相应服务锁,不能接管服务。如果因为网络故障等原因,在t_timeout时间内仲裁服务器不能收到任何服务锁刷新信息,则认为服务运行子集群已死机或变成孤立子集群,并把服务锁的状态置为unknown状态。此后,为保证原服务运行节点有充分的停止服务时间,仲裁服务器会等待t_giveup时间才把服务锁状态置为unlocked,确认服务已经停止,并允许其他节点抢占服务锁,避免备机接管服务时因为原节点服务未完全停止而造成的短暂裂脑问题。此时,服务运行子集群与仲裁服务器失去连接并变成孤立子集群。为保证服务的运行持续性,分两种情况处理:(1)服务运行子集群节点数量大于原集群节点数量的1/2时,继续对外提供服务,避免因为仲裁服务器的链接故障影响到服务的可用性;(2)服务运行子集群的节点数量小于等于原集群节点数量的1/2时,执行停止服务操作并释放服务锁。此时服务运行子集群的备份节点不予接管服务,在t_giveup时间内服务不能正常停止时,服务运行节点要执行重启系统动作,以方便其他子集群接管。当服务运行子集群节点数>1/2时,非服务运行子集群肯定小于1/2,所以此时非服务运行子集群不会尝试申请服务锁并接管服务,不存在集群裂脑风险。为提高服务可用性、最大化服务持续运行能力,也可以通过选项不执行1/2节点数的算法,此时非服务运行子集群不管是否>1/2,只要节点状态变化或心跳故障,都会执行抢锁操作,并尝试接管服务。这种方式提高服务可持续性,但降低了数据安全性,增加集群裂脑风险。当服务故障时,集群会首先执行服务停止操作,并向仲裁服务器主动释放服务锁。并必须在服务最大停止时间t_giveup内停止完成,t_giveup时间内服务未停止,则需要执行服务器立即重启操作,确保仲裁服务器将服务锁置为unlocked,备份节点接管服务前,服务已经停止完成。本专利技术另一方面,提供一种基于仲裁服务器的裂脑预防装置,其特征包括:集群服务器端代理模块。服务运行子集群选举通信节点定期向仲裁服务器发送刷新服务锁消息,刷新服务锁消息主要包含服务名称,刷新服务锁节点,刷新时间戳等;服务未运行子集群选举通信节点在尝试接管服务前,向仲裁服务器发送服务锁申请消息,申请服务锁消息内容包含服务名,抢锁节点名等。仲裁服务器模块。当服务锁处于unlocked状态时,仲裁服务器将服务锁授予第一个进行抢锁申请的节点,然后把服务锁置为locked状态,更新占锁节点名称;当服务锁处于locked状态时,对特定服务锁进行持续时间戳刷新,对来自服务未运行子集群的备份节点的服务锁申请返回抢锁失败消息;仲裁服务器维护各个服务锁的信息,包括:服务锁名称、服务锁的状态、服务锁刷新时间戳、服务所在的节点。本专利技术基于Client/Server网络架构实现了一种服务锁仲裁装置,基于服务锁占锁节点的唯一性,只有取得服务锁的节点才能启动服务,来避免服务在2个节点同时启动的风险,从而避免了集群裂脑的发生。和系统重启Fencing或共享存储Fencing隔离技术相比,本专利技术基于服务锁的概念,能够支持主备服务器各自运行不同服务,提高服务器资源使用效率。本专利技术部署实施方便,不需要共享磁阵等设备,只要能够运行仲裁程序、集群各节点都可以连接访问的机器都可以配置成仲裁服务器。虚拟化环境、广域网的异地集群环境下,原来的Fencing技术和磁阵仲裁盘技术均不适用,而本专利技术在上述环境下均能起到较好仲裁作用,对虚拟机集群、异地集群提供服务一致性和数据安全保障。另外,本专利技术同时适用于双节点、多节点等高可用集群。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将用实施例或现有技术描述中所需要使用的附图作简单地介绍。图1为本专利技术提供的服务锁结构图;图2a为本专利技术提供的刷新服务锁内容;图2b为本专利技术提供的申请服务锁内容;图3为本专利技术非服务运行子集群申请服务锁流程图;图4为本专利技术服务运行子集群刷新服务锁流程图;图5为本专利技术仲裁服务器接收到申请服务锁消息的处理流程图;图6为本专利技术仲裁服务器接收到刷新服务锁消息的流程图;图7为本专利技术仲裁服务器定期检测服务锁刷新时间戳的流程图;图8为本专利技术提供的基于仲裁服务器的集群裂脑预防装置示意图;具体实施方式下面将结合附图和实施例对本专利技术进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他的实施例,都属于本专利技术保护的范围。为了解决在集群心跳网络本文档来自技高网...
基于仲裁服务器的集群裂脑预防方法和装置

【技术保护点】
基于仲裁服务器的高可用集群裂脑预防方法与装置,其特征在于:集群内服务器节点启动服务前必须向仲裁服务器申请服务锁,未获得服务锁的集群节点不得启动服务;当节点死或心跳线故障时,未运行服务的子集群通过定期向仲裁服务器申请服务锁来决定是否接管服务;申请到服务锁则接管服务,未申请到服务锁则不予接管;从而避免服务在多个子集群内同时运行;注:裂脑状态是集群分裂成数个子集群,彼此失去联系并认为其他节点已死,并尝试从″已死节点″接管资源;从而导致服务在多个节点同时运行、共享存储数据损坏等一系列严重问题;1.1启动服务前需要取得服务锁,其特征在于:所述服务未运行节点在尝试接管服务开始,在t_giveup时间内定期向仲裁服务器申请服务锁,当仲裁服务器的相应服务锁处于unlocked状态时,服务未运行节点将抢占服务锁,并进行服务接管;1.2服务运行节点定期刷新服务锁,其特征在于:所述服务运行节点所在子集群选出一个通信节点和仲裁服务器通信,定期发送刷新服务锁消息到仲裁服务器,进行服务锁时间戳等的刷新;1.3服务故障会停止服务并释放服务锁,其特征在于:当服务在运行节点因故障而停止,服务将服务锁释放回仲裁服务器。该子集群内部会选择一个备份节点尝试申请服务锁并接管服务,该备份节点向仲裁服务器申请服务锁成功后,将进行服务接管,并成为新的服务运行节点;若备份节点启动服务失败,将停止服务并再次释放服务锁。当服务运行子集群中的所有备份节点连续申请服务锁及接管服务失败,除非有新的节点状态变化事件,否则该子集群将不再尝试申请服务锁及接管该服务;1.4集群与仲裁服务器中断联系的处理,其特征在于:服务运行子集群会选出一个节点作为仲裁服务器通信节点;当服务运行子集群通信节点检测出当前时间与刷新服务锁成功时间之差超过预定的t_timeout时间,则认为与仲裁服务器断开连接,服务运行子集群会尝试选举其他节点和仲裁服务器进行通信,当所有节点均无法和仲裁服务器通信,服务运行子集群变成孤立子集群,失去仲裁服务器的仲裁功能;所述的服务运行子集群变成孤立子集群,如果该子集群节点数量小于等于原集群节点数量的1/2,服务运行节点必须停止服务;在t_giveup时间内服务不能正常停止时,服务运行节点要执行重启系统动作,并且服务运行子集群中备份节点不能接管服务,亦不再发送刷新服务锁消息到仲裁服务器;所述的服务运行子集群变成孤立子集群,如果服务运行子集群的节点数量大于原集群的节点数量的1/2,服务运行节点无需停止服务,继续保持对外服务;1.5仲裁服务器端的服务锁处理,其特征在于:所述的仲裁服务器检测当前时间与服务锁刷新时间戳之差超过预定的时间t_timeout,则仲裁服务器认为服务运行子集群已断开连接,把服务锁的状态置为unknown状态;仲裁服务器在把服务锁的状态置为unknown状态后的t_giveup时间把服务锁的状态置为unlocked状态;仲裁服务器在把服务锁的状态置为unlocked后,如果收到新的服务锁申请,则将服务锁分配给该节点。...

【技术特征摘要】
1.基于仲裁服务器的高可用集群裂脑预防方法,其特征在于:集群内服务器节点启动服务前必须向仲裁服务器申请服务锁,未获得服务锁的集群节点不得启动服务;当节点死或心跳线故障时,未运行服务的子集群通过定期向仲裁服务器申请服务锁来决定是否接管服务;申请到服务锁则接管服务,未申请到服务锁则不予接管;从而避免服务在多个子集群内同时运行;其中:裂脑状态是集群分裂成数个子集群,彼此失去联系并认为其他节点已死,并尝试从″已死节点″接管资源;从而导致服务在多个节点同时运行、共享存储数据损坏一系列严重问题;启动服务前需要取得服务锁,服务未运行节点在尝试接管服务开始,在t_giveup时间内定期向仲裁服务器申请服务锁,当仲裁服务器的相应服务锁处于unlocked状态时,服务未运行节点将抢占服务锁,并进行服务接管;服务运行节点定期刷新服务锁,所述服务运行节点所在子集群选出一个通信节点和仲裁服务器通信,定期发送刷新服务锁消息到仲裁服务器,进行服务锁时间戳的刷新;服务故障会停止服务并释放服务锁,当服务在运行节点因故障而停止,服务将服务锁释放回仲裁服务器;该子集群内部会选择一个备份节点尝试申请服务锁并接管服务,该备份节点向仲裁服务器申请服务锁成功后,将进行服务接管,并成为新的服务运行节点;若备份节点启动服务失败,将停止服务并再次释放服务锁;当服务运行子集群中的所有备份节点连续申请服务锁及接管服务失败,除非有新的节点状态变化事件,否则该子集群将不再尝试申请服务锁及接管该服务;集群与仲裁服务器中断联系的处理,服务运行子集群会选出一个...

【专利技术属性】
技术研发人员:蔡强董春青袁泉
申请(专利权)人:广东新支点技术服务有限公司
类型:发明
国别省市:广东;44

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

1