专利名称:基于仲裁磁盘的高可用系统不间断运行方法
技术领域:
本发明涉及计算机高可用集群系统,具体涉及通过磁盘进行信息交互的技术,使高可用系统可以不间断运行的方法。
背景技术:
作为提高在计算机系统中执行的处理的可用性的方式,存在被称为“集群”的思想。集群,英文名称为Cluster,通俗地说,集群是这样一种技术它将多个系统连接到一起,使多台服务器能够像一台机器那样工作或者看起来好像一台机器。采用集群系统通常是为了提高系统的稳定性和网络中心的数据处理能力及服务能力。目前,有两种常用的服务器集群方法,一种是将备份服务器连接在主服务器上,当主服务器发生故障时,备份服务器才投入运行,把主服务器上所有任务接管过来。另一种方法是将多台服务器连接,这些服务器一起分担同样的应用和数据库计算任务,改善关键大型应用的响应时间。在集群系统中,集群内任一系统上运行的服务可被所有的网络客户所使用。集群必须可以协调管理各分离组件的错误和失败,并可透明的向集群中加入组件。用户的公共数据被放置到了共享的磁盘柜中。当集群系统在正常运转时,应用只在一台服务器上运行, 并且只有这台服务器才能操纵该应用在共享磁盘柜上的数据区,其它的服务器监控这台服务器,只要这台服务器上的应用停止运行(无论是硬件损坏、操作系统死机、应用软件故障,还是人为误操作造成的应用停止运行),其它的服务器就会接管这台服务器所运行的应用,并将共享磁盘柜上的相应数据区接管过来。也就是说在集群系统中,在多个计算机中安装同一程序,将其中的几个计算机作为执行实际处理的计算机,剩下的计算机被控制成在检测到执行处理的计算机发生故障时取代该计算机来执行处理。这些服务器或计算机可被称为节点,节点的含义是指网络任何支路的终端或网络中两个或更多支路的互连公共点。 为了使各节点能顺利接管某台服务器所运行的应用,并将共享磁盘柜上的相应数据区接管过来,而配置有集群内各节点都可以访问的外部共享存储装置。在多节点的高可用集群中,使用仲裁策略来决定集群的工作状态。通常使用的仲裁策略是计算集群中活跃的节点个数是否超过整个集群节点总数的一半。节点是否活跃是通过节点的心跳网络连接状况决定的。在节点个数不多的多节点集群中,连通的活跃节点不到半数的可能性较大,这种情况下,集群就处于瘫痪状态。为了避免由于节点或网故障导致整个集群挂起,不再服务的问题,可以在共享存储装置上,划出一块小于IOM的共享存储来记录各节点的状态信息,由守护进程参与对各节点的投票,这个小于IOM的共享存储就是仲裁磁盘。仲裁磁盘是防止多个服务器争夺对服务、程序、资源的控制权的一个机制。仲裁磁盘的一种工作方式是启动仲裁磁盘守护进程,且运行在集群的所有节点上,当前节点的守护进程定期评估当前节点的健康情况,然后把当前节点的状态信息放入到指定的共享磁盘区域。仲裁磁盘守护进程接着查看其他节点的状态,记录各节点的状态信息。集群的仲裁计数就是每个节点计数再加上仲裁磁盘分区的计数之和。例如,一个四节点集群,总共仲裁投票数是7,每个节点投票数为1,仲裁磁盘投票数为3。这样,在一个节点A上的仲裁磁盘守护进程经过几次尝试都不能访问共享磁盘分区,那么运行在另一节点B上的仲裁磁盘守护进程会请求节点A被隔离,集群中的控制节点会重启节点A并重新使节点A加入集群中。上述仲裁磁盘的工作方式保证了集群的连续性,但是在集群心跳被分割为多个网络分区的情况下,运行的网络分区是id最小的节点所在的网络分区。极端情况下,可能只有这一个节点运行,而其它所有节点都被隔离。这样整个集群的负载都在一个节点上,会导致集群的响应能力下降。本发明针对上述方法的弊端,采用在节点连接个数最多的网络分区中选举整个集群的主控节点重新获得仲裁权的方法,保证高可用集群在心跳网络发生故障的情况下能智能地选举连接节点个数较多的网络分区代表集群对外提供服务,既保证了集群的连续性, 又提高了集群故障情况下的负载能力。
发明内容
针对目前仲裁磁盘在心跳网络故障时选举节点算法的缺陷,本发明提供新的节点选举方法,仲裁磁盘不再增加仲裁计数,在网络心跳工作正常(即集群活跃节点数超半数) 情况下,仲裁磁盘的守护进程仅把节点信息写入仲裁磁盘。当集群中一些节点无效的时候, 守护进程选举节点连接个数最多的网络分区中的控制节点作为集群的主控节点,并使主控节点重新拥有仲裁权,使集群能正常工作。从而保证集群的连续性,提高集群故障情况下的负载能力。本发明提供了一种基于仲裁磁盘的高可用系统不间断运行方法,运用于有共享存储设备的多节点集群中,其包括一个仲裁磁盘,集群中每个节点能够同时读写该仲裁磁盘, 且在每个节点上运行的仲裁磁盘守护进程把各节点的信息写入该仲裁磁盘上与各节点对应的节点信息区域,并对所有节点在仲裁磁盘中保存的信息进行检测,在节点故障和出现网络分区时,该仲裁磁盘守护进程选举节点连接个数最多的网络分区的控制节点作为整个集群的主控节点,使其获得仲裁权,从而实现以节点连接个数最多的网络分区代表集群对外提供服务。承上,基于仲裁磁盘的高可用系统不间断运行方法还包含以下步骤1)配置仲裁磁盘信息到集群将仲裁磁盘的配置内容写入集群配置文件,集群节点仅需要在一个节点上进行初始化仲裁磁盘及配置工作;2)初始化仲裁磁盘头及节点信息仲裁磁盘内容包括仲裁磁盘头、节点id与节点的仲裁磁盘分区id之间的对应关系表、集群每个节点的状态信息,节点的状态信息包括节点是否为控制节点、仲裁状态、工作节点队列长度和与当前节点连接的节点个数等;3)在仲裁磁盘守护进程中选举拥有磁盘仲裁权的节点仲裁磁盘选举有磁盘仲裁权的节点时,是寻找节点个数最多的网络分区中的控制节点,使其重新获得仲裁权。当集群恢复到有半数以上节点心跳连通时,磁盘仲裁失效;4)交互仲裁磁盘守护进程与集群其它进程的信息集群在选举控制节点时,集群其它进程会向仲裁磁盘守护进程发送自己是控制节点的消息。集群无超半数节点连接时, 仲裁磁盘进程选举出拥有磁盘仲裁状态的网络分区后,向集群发送获得磁盘仲裁权的消息;否则,发送没有磁盘仲裁权的消息。本发明的技术效果是利用仲裁磁盘达到集群不间断运行的目的,主要表现在第一,仲裁磁盘监控各节点运行状况,在集群有半数以上节点可连通并且正常工作的情况下,仲裁磁盘守护进程仅获取各节点状态,而不对集群状态进行任何改变。第二,当集群发生心跳断开时,在任何一个网络分区中的活跃节点个数都不能使集群对外提供正常服务工作的情况下,根据各节点写入磁盘的信息选举一个控制节点让其拥有仲裁权,从而使集群恢复工作。并且拥有仲裁权的节点是各网络分区中连接节点个数最多的分区中的节点,使集群中可以工作的节点保持最多,保证集群服务效率更高。这里的仲裁状态是指,高可用集群可以正常工作的状态,通常要求集群活跃节点大于整个集群节点总数的半数。如果集群中有网络分区,那么拥有大于整个集群节点总数的半数的网络分区可以达到仲裁状态,即集群节点个数有效,或者说其它网络分区的节点没有仲裁状态,即节点个数无效。
图1为仲裁磁盘结构图;图2为本发明高可用系统不间断运行方法实现的流程图;图3为本发明仲裁磁盘选举的流程图。
具体实施例方式为了使本发明所采用的技术、手段及其优点,现举优选实施例并配合附图详述如后,此仅供说明之用,在专利申请上并不受具体实施方式
的限制。本发明基于仲裁磁盘的高可用系统不间断运行方法,主要是借助仲裁磁盘监控各节点运行状况,在集群有半数以上节点可连通并且正常工作的情况下,仲裁磁盘守护进程仅获取各节点状态,而不对集群状态进行任何改变;当集群发生心跳断开时,在任何一个网络分区中的活跃节点个数都不能使集群对外提供正常服务工作的情况下,根据各节点写入磁盘的信息选举一个控制节点让其拥有仲裁权,从而使集群恢复工作。并且拥有仲裁权的节点是各网络分区中连接节点个数最多的分区中的控制节点,从而使集群中可以工作的节点数量保持最多,保证集群服务效率更高。运用本发明的不间断运行方法一般包括以下步骤(1)搭建多节点计算机集群环境(图1的步骤11)在天文、军事、物理等需要很精密的、大量的运算的工作中,通常需用搭建多节点计算机集群环境,以使用到多个CPU的运算能力,所以可以加快运算的速度。(2)准备小于IOM的共享存储在集群的共享储存设备中分出一个小于IOM的共享存储(图1的步骤12),其中, 步骤11和步骤12为软硬件环境的准备,硬件环境包括多台作为PC或者服务器和存储设备,服务器上具备双网卡,并且可以连接到存储设备。服务器上安装同样的操作系统和高可用产品,每组网卡互相连通,一组网络地址供心跳网络连接使用,一组网络地址提供对外服务使用,各服务器连接同一个共享存储设备。(3)配置仲裁磁盘信息到集群(图1的步骤13)
各节点上安装高可用软件,并启动集群服务。在配置节点上将上述步骤指定的共享存储初始化为仲裁磁盘,配置仲裁磁盘标签到集群配置文件,使用的标签为配置文件中指定的标签。(4)初始化仲裁磁盘及节点信息(步骤14)仲裁磁盘的结构如附图1所示,当集群配置了仲裁磁盘信息,仲裁磁盘守护进程被启动。仲裁磁盘守护进程判断当前节点的工作状态,将当前节点的信息写入到仲裁磁盘上与当前节点对应的节点信息区域。然后将其它节点写入到仲裁磁盘对应区域的信息保存到节点信息数组中。节点信息中包含节点是否为控制节点、仲裁状态、工作节点队列长度和与本节点连接的节点个数等,这些信息用于仲裁磁盘选举时作参照。(5)由仲裁磁盘守护进程选举拥有磁盘仲裁权的节点(步骤15)仲裁磁盘选举的目的是当集群发生心跳断开时,在任何一个网络分区中节点个数都不能使集群有正常对外提供服务的情况下,根据各节点写入磁盘的信息选举一个控制节点让其获得仲裁状态(即该节点获得仲裁权),从而使集群恢复工作。(6)交互仲裁磁盘进程与集群其它进程的信息(步骤16)仲裁磁盘进程与集群其它进程的信息交互方法与集群的实现方式有关。一般来说,都采用进程间通讯方法完成,具体方法有本地socket方式、g_source的事件轮询、 corosync的ipc等。仲裁磁盘守护进程与集群其它进程的信息交互内容包括节点是否为控制节点、仲裁状态、节点队列长度和节点连接个数,这些信息是集群的其它进程发送给仲裁磁盘守护进程的。仲裁磁盘守护进程发送给集群其它进程的有节点获得磁盘仲裁权或节点没有获得磁盘仲裁权。仲裁磁盘选举过程如附图3所示,具体包括以下步骤(1)仲裁磁盘的选举是在仲裁磁盘守护进程中进行循环处理,在选举之前,需要由仲裁磁盘守护进程从仲裁磁盘中读取各节点信息,各节点信息经处理后放入节点信息结构数组中(步骤so);(2)由仲裁磁盘守护进程检查节点信息结构中的内容,判断每个节点所在网络分区的连接个数是否达到节点总数的半数以上,即该节点是否处于仲裁状态(步骤Si),如果节点是处于仲裁状态,表明有超半数节点心跳连接,此时磁盘仲裁不起作用,为保证集群不受之前磁盘仲裁影响,仲裁磁盘守护进程向集群发送qdisk_qUOrate为0的消息(步骤 S2,);(3)如果节点没有处于仲裁状态,表明没有任何一个节点所在网络分区的节点连接个数是达到节点总数的半数以上,表明集群中没有超半数节点有心跳连接,此时由仲裁磁盘守护进程开始需要选举有磁盘仲裁状态的网络分区(步骤S2);(4)选举有仲裁磁盘的网络分区过程(步骤S2)中,首先,比较每个节点的节点连接个数,选择其中最大值并记录为plugin_VOtes,设置masterjd为0 (步骤S21)。网络分区要有磁盘仲裁状态,必须该网络分区中节点连接个数大于等于plugin_VOtes ;(5)依照上述方式,检查集群的每一个节点(步骤S22)判断该节点是否为控制节点,且节点连接个数是否大于等于plugiruvotes (步骤 S23),如果是,则将节点连接数大于等于plugiruvotes的节点的id设置为masterjd (步骤S24);否则,对集群里的其他节点继续进行检查(步骤S25);(6)对集群里所有节点检查完后,判断当前节点id是否为mastered (步骤S26)如果本节点id为master_id,则发送qdisk_quorate为1的消息(步骤S27,); 否则,再判断该节点是否为控制节点(步骤S271),如果是控制节点,则发送qdislquorate 为0的消息(步骤S272)。其中,plugin_votes 表示当前仲裁磁盘正常工作的节点中,最大的网络分区节点连接个数;master_id 在节点信息比较时,记录可以获得磁盘仲裁权的节点id ;qdisk_quorate 仲裁磁盘给集群其它进程发送的消息,其值可以为1或0,1表示当前节点获得磁盘仲裁权,0表示取消当前节点的磁盘仲裁权。
权利要求
1.一种基于仲裁磁盘的高可用系统不间断运行方法,运用于有共享存储设备的多节点集群中,其特征在于包括一个仲裁磁盘,集群中每个节点能够同时读写该仲裁磁盘,且在每个节点上运行的仲裁磁盘守护进程把各节点的信息写入该仲裁磁盘上与各节点对应的节点信息区域,并对所有节点在仲裁磁盘中保存的信息进行检测,在节点故障和出现网络分区时,该仲裁磁盘守护进程选举节点连接个数最多的网络分区的控制节点作为整个集群的主控节点,使其获得仲裁权,从而实现以节点连接个数最多的网络分区代表集群对外提供服务。
2.如权利要求1所述的方法,其特征在于所述仲裁磁盘是在集群的共享存储设备上的分出的一部分,该仲裁磁盘小于10M。
3.如权利要求1所述的方法,其特征在于还包括将仲裁磁盘的配置信息写入集群配置文件的步骤。
4.如权利要求1所述的方法,其特征在于还包括初始化仲裁磁盘及节点信息的步骤。
5.如权利要求3所述的方法,其特征在于所述仲裁磁盘的配置信息写入到集群配置文件的方式是配置仲裁磁盘标签到集群配置文件。
6.如权利要求4所述的方法,其特征在于所述初始化仲裁磁盘及节点信息的步骤包括启动仲裁磁盘守护进程,由仲裁磁盘守护进程判断当前节点的工作状态,并将当前节点的信息写入到仲裁磁盘上与当前节点对应的节点信息区域,经初始化后的仲裁磁盘的内容包括仲裁磁盘头、节点id与节点磁盘id对应关系表、集群每个节点的状态信息,节点的状态信息包括节点是否为控制节点、仲裁状态、工作节点队列长度和与当前节点连接的节点个数。
7.如权利要求6所述的方法,其特征在于所述选举节点连接个数最多的网络分区的控制节点作为主控节点的步骤包括在选举之前,运行于各节点上的仲裁磁盘守护进程从仲裁磁盘中读取各节点信息,各节点信息经处理后放入节点信息结构数组中,由仲裁磁盘守护进程检查各节点信息结构数组中的内容,判断每个节点所在网络分区的节点连接个数是否达到节点总数的半数以上,若是,表明有超半数节点心跳连接,则由仲裁磁盘守护进程给集群发送取消磁盘仲裁权的消息。
8.如权利要求7所述的方法,其特征在于如果判断每个节点所在网络分区的节点连接个数没有达到节点总数的半数以上,表明集群中没有超半数节点有心跳连接,此时由仲裁磁盘守护进程选举有磁盘仲裁状态的网络分区,有磁盘仲裁状态的网络分区是该网络分区中节点连接个数最多。
9.如权利要求8所述的方法,其特征在于所述选举有磁盘仲裁状态的网络分区的过程包括比较所有节点的节点连接个数,选择其中最大值并记录为 plugir^votes,同时将该节点的id设置为masterjd。
10.如权利要求9所述的方法,其特征在于所述选举有磁盘仲裁状态的网络分区的过程还包括由仲裁磁盘守护进程继续对集群中的下一个节点进行检查,判断该节点是否为控制节点,且节点连接个数是否大于等于plugin_VOtes,如果是,则设置masterjd为该节点的id;依上述方式对集群里所有节点检查完后,判断当前节点id是否为masterjd,如果是,则由仲裁磁盘守护进程向集群发送当前节点获得磁盘仲裁权的消息;否则,如果当前节点是控制节点,则发送取消当前节点磁盘仲裁权的消息。
全文摘要
本发明揭示了一种通过磁盘进行信息交互的技术使高可用系统可以不间断运行的方法。本发明针对具有共享存储设备的多节点高可用集群系统,在共享存储上划定一小块空间作为仲裁磁盘使用。高可用的各节点可以同时读写仲裁磁盘。各节点的仲裁磁盘守护进程将节点的状态信息写入仲裁磁盘,并对所有节点在仲裁磁盘中保存的信息进行检测,在节点故障和出现网络分区时,从正常工作节点中智能选举整个集群的主控节点,使集群系统恢复到正常工作状态,从而避免高可用系统脑裂发生,保证高可用系统不间断正常运行。
文档编号G06F15/167GK102402395SQ201010283228
公开日2012年4月4日 申请日期2010年9月16日 优先权日2010年9月16日
发明者兰雨晴, 刘明, 刘涛, 夏颖, 姚超, 张永军, 梁昕, 王阳利 申请人:上海中标软件有限公司