CN105450717A - 集群脑裂处理方法和装置 - Google Patents

集群脑裂处理方法和装置 Download PDF

Info

Publication number
CN105450717A
CN105450717A CN201410515113.5A CN201410515113A CN105450717A CN 105450717 A CN105450717 A CN 105450717A CN 201410515113 A CN201410515113 A CN 201410515113A CN 105450717 A CN105450717 A CN 105450717A
Authority
CN
China
Prior art keywords
subset
cluster
node
unique
fissure
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201410515113.5A
Other languages
English (en)
Inventor
胡智江
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZTE Corp
Original Assignee
ZTE Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CN201410515113.5A priority Critical patent/CN105450717A/zh
Priority to PCT/CN2015/079096 priority patent/WO2016050074A1/zh
Publication of CN105450717A publication Critical patent/CN105450717A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/08Allotting numbers to messages; Counting characters, words or messages

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Hardware Redundancy (AREA)

Abstract

本发明提供了一种集群脑裂处理方法和装置。涉及计算机应用领域;解决了集群脑裂后的控制问题。该方法包括:在集群发生脑裂时,选取该集群中唯一允许继续服务的子集;控制除所述唯一允许继续服务的子集外的其他子集中的节点停止工作。本发明提供的技术方案适用于计算机集群,实现了集群脑裂情况下对集群的有序管理。

Description

集群脑裂处理方法和装置
技术领域
本发明涉及计算机应用领域,尤其涉及一种集群脑裂处理方法和装置。
背景技术
高可用集群是以减少服务中断时间为目的的服务器集群技术。正在运行服务的节点称为主用机。不在运行服务,但后续可能接替主用机运行服务的节点称为备用机。当主用机故障后,备用机就会接手继续运行服务,达到提供持续的服务的效果。
节点间互联网络称为心跳线。通过心跳线,集群中的每个节点都可以跟任何其它节点进行通信,通过通信协议还可以获知当前集群中有哪些节点(下文将提供通信功能的模块称为“心跳通信模块”)。一旦某个节点发现跟另外一个节点通信出现问题,则有可能是心跳线故障了,也有可能是对端节点故障了。总之,集群可能会分裂为若干个子集。业界将这种情况叫做“脑裂”。当某个子集中的节点无法了解其他子集失去联系的具体原因时,它不能猜测原因,更不能基于猜测来决定要不要运行服务(下文将控制服务启动或停止的模块称为“服务控制逻辑模块”),否则集群可能会出现丢失主用或出现多主的问题。
举两个节点A,B组成集群为例,A上正运行某服务,B作为备机。当节点B发现无法跟A通信时,如果它猜测是网络故障,则B会保持备机角色不变。但如果实际上是A节点故障,那么集群将失去主用,上层应用无法继续运行。反之,如果B节点猜测是A节点故障,则B将接替A来运行服务。但如果只是网络故障,A还在正常运行的话,则集群出现了A,B两个主用机。多个主用机的情况也是集群需要极力避免的,因为多个主用机互相竞争资源,严重情况下可能导致数据被破坏。
综上,在集群发生脑裂时,如何继续对集群进行控制存在问题。
发明内容
本发明提供了一种集群脑裂处理方法和装置,解决了集群脑裂后的控制问题。
一种集群脑裂处理方法,包括:
在集群发生脑裂时,选取该集群中唯一允许继续服务的子集;
控制除所述唯一允许继续服务的子集外的其他子集中的节点停止工作。
优选的,在集群发生脑裂时,选取该集群中唯一允许继续服务的子集包括:
选取在脑裂发生前的主要节点所在子集为期望的主要子集;
选取节点数量大于脑裂发生前集群节点数量一半的子集作为唯一大子集;
从所述期望的主要子集和所述唯一大子集中,选择唯一允许继续服务的子集。
优选的,该方法还包括:
在集群初始化时,在共享介质上开辟一块磁盘空间作为判决盘,将所述判决盘分区,将所述集群中的每个节点唯一对应到所述判决盘的一个分区上;
所述集群中的各个节点通过磁盘I/O操作向所述判决盘中对应的分区里写入当前时间戳;
选择持续更新时间戳的节点之一作为主要节点。
优选的,该方法还包括:
所述集群中的各个节点在没有发生脑裂的正常情况下,通过额外的Ethernet网络周期广播或组播KeepAlive消息;
选择持续发出所述KeepAlive消息的节点之一作为主要节点。
优选的,选取在脑裂发生前的主要节点所在子集为期望的主要子集的步骤之后,还包括:
从所述期望的主要子集中指派一个代表节点,指示所述代表节点在第一延迟时间之后通知除所述期望的主要子集外的其他各个子集的全部节点停止工作。
优选的,从所述期望的主要子集和所述唯一大子集中,选择唯一允许继续服务的子集包括:
在不存在唯一大子集时,选择所述期望的主要子集作为唯一允许继续服务的子集;
在所述期望的主要子集与所述唯一大子集为同一子集时,以该子集作为唯一允许继续服务的子集;
在所述期望的主要子集与所述唯一大子集为不同子集时,以所述唯一大子集作为唯一允许继续服务的子集。
优选的,选取节点数量大于脑裂发生前集群节点数量一半的子集作为唯一大子集的步骤之后,还包括:
从所述唯一大子集中选择一个节点作为唯一大子集代表;
指示所述唯一大子集代表判定所述唯一大子集与所述期望的主要子集为不同子集时,在零时延或第二延迟时间后,通知除所述唯一大子集外的其他子集的全部节点停止工作,所述第二延迟时间小于所述第一延迟时间。
优选的,该方法还包括:
在节点检测到心跳线通信发生中断时,中断该节点底层心跳通信与上层服务控制逻辑间的通信,至达到第一时间长度后,判定脑裂发生,恢复所述底层心跳通信与上层服务控制逻辑间的通信。
优选的,在以所述唯一大子集作为唯一允许继续服务的子集时,该方法还包括:
从所述唯一大子集中选举一个节点作为新的主要节点,选举所述新的主要节点耗时从判定发生脑裂时起至第二时间长度止,所述第二时间长度小于所述第一时间长度。
优选的,该方法还包括:
在所述集群的各个节点维护当前集群成员列表、成员数量和集群成员变化通知信息。
本发明还提供了一种集群脑裂处理装置,包括:
继续服务子集选择模块,用于在集群发生脑裂时,选取该集群中唯一允许继续服务的子集;
节点停工控制模块,用于控制除所述唯一允许继续服务的子集外的其他子集中的节点停止工作。
优选的,所述继续服务子集选择模块包括:
期望主要子集选取单元,用于选取在脑裂发生前的主要节点所在子集为期望的主要子集;
唯一大子集选取单元,用于选取节点数量大于脑裂发生前集群节点数量一半的子集作为唯一大子集;
继续服务子集选取单元,用于从所述期望的主要子集和所述唯一大子集中,选择唯一允许继续服务的子集。
优选的,所述继续服务子集选择模块还包括:
代表节点选择单元,用于从所述期望的主要子集中指派一个代表节点,指示所述代表节点在第一延迟时间之后通知除所述期望的主要子集外的其他各个子集的全部节点停止工作。
优选的,所述继续服务子集选取单元包括:
第一选取子单元,用于在不存在唯一大子集时,选择所述期望的主要子集作为唯一允许继续服务的子集;
第二选取子单元,用于在所述期望的主要子集与所述唯一大子集为同一子集时,以该子集作为唯一允许继续服务的子集;
第三选取子单元,用于在所述期望的主要子集与所述唯一大子集为不同子集时,以所述唯一大子集作为唯一允许继续服务的子集。
优选的,所述继续服务子集选择模块还包括:
唯一大子集代表选择单元,用于从所述唯一大子集中选择一个节点作为唯一大子集代表,指示所述唯一大子集代表判定所述唯一大子集与所述期望的主要子集为不同子集时,在零时延或第二延迟时间后,通知除所述唯一大子集外的其他子集的全部节点停止工作,所述第二延迟时间小于所述第一延迟时间。
优选的,该装置还包括:
内部通信管理模块,用于在节点检测到心跳线通信发生中断时,中断该节点底层心跳通信与上层服务控制逻辑间的通信,至达到第一时间长度后,判定脑裂发生,恢复所述底层心跳通信与上层服务控制逻辑间的通信。
优选的,在以所述唯一大子集作为唯一允许继续服务的子集时,该装置还包括:
主要节点选举模块,用于从所述唯一大子集中选举一个节点作为新的主要节点,选举所述新的主要节点耗时从判定发生脑裂时起至第二时间长度止,所述第二时间长度小于所述第一时间长度。
优选的,该装置还包括:
存储模块,用于维护当前集群成员列表、成员数量和集群成员变化通知信息。
本发明提供了一种集群脑裂处理方法和装置,在集群发生脑裂时,选取该集群中唯一允许继续服务的子集,控制除所述唯一允许继续服务的子集外的其他子集中的节点停止工作。实现了集群脑裂情况下对集群的有序管理,解决了集群脑裂后的控制问题。
附图说明
图1为本发明的实施例一提供的一种集群脑裂处理系统的示意图;
图2为第一步判决方法在主要节点故障时的模块协作以及时序关系示意图;
图3为第一步判决方法在非主要节点故障或者心跳线断时的模块协作以及时序关系示意图;
图4为第二步判决方法在心跳线断后,发现唯一大子集且唯一大子集不是期望的主要子集时的模块协作以及时序关系示意图;
图5为二步判决方法在心跳线断后,发现唯一大子集且唯一大子集与期望的主要子集相同时的模块协作以及时序关系示意图;
图6为本发明的实施例二提供的一种集群脑裂处理方法的流程图;
图7为图6中步骤601的具体流程图;
图8为本发明的实施例三提供的一种集群脑裂处理装置的结构示意图;
图9为图8中继续服务子集选择模块801的结构示意图;
图10为图9中继续服务子集选取单元8013的结构示意图。
具体实施方式
举两个节点A,B组成集群为例,A上正运行某服务,B作为备机。当节点B发现无法跟A通信时,如果它猜测是网络故障,则B会保持备机角色不变。但如果实际上是A节点故障,那么集群将失去主用,上层应用无法继续运行。反之,如果B节点猜测是A节点故障,则B将接替A来运行服务。但如果只是网络故障,A还在正常运行的话,则集群出现了A,B两个主用机。多个主用机的情况也是集群需要极力避免的,因为多个主用机互相竞争资源,严重情况下可能导致数据被破坏。
为了解决上述问题,本发明的实施例提供了一种集群脑裂处理方法和装置。下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
下面结合附图,对本发明的实施例一进行说明。
本发明实施例提供了一种集群脑裂处理系统,该系统的结构如图1所示,包括底层的心跳通信模块和上层的服务逻辑模块,以及介于服务控制逻辑模块和心跳通信模块之间的脑裂判决模块。心跳通信模块为脑裂判决模块提供当前集群成员列表、成员数量和集群成员变化通知(或称作脑裂事件)等信息。脑裂判决模块通过这些信息判断出哪一个子集应该继续运行服务,并将判断结果上报给服务控制逻辑模块,后者会根据该结果进行必要的主备倒换等服务控制操作。
集群由于脑裂而分列为若干个子集后,脑裂判决模块负责判决出唯一的一个允许继续运行服务的子集,该子集被称为“主要子集”。其他子集上的服务则需要被停止工作(或称作被Fence),这些子集被称为“次要子集”。本发明实施例中,对被Fence的节点应立即下电或者重启,停止工作。第二,主要子集尽可能是在所有分裂出来的子集中,节点数量最多的子集。这样才能保证在脑裂后,大多数节点可以继续工作。第三,脑裂事件发生后,脑裂判决模块能根据脑裂事件发生时即有的信息立即确定主要子集,保证上层服务控制逻辑能够尽快进行主备倒换。
为实现上述特点,本发明实施例中的脑裂判决模块实现了一种两步判决方法:第一步:在脑裂事件发生时,首先通过某种额外信息渠道立即判决出“期望的主要子集”。额外信息渠道指的是除了心跳线之外,集群节点间能够进行信息交换的其他渠道;第二步:若存在一个子集,其节点数量大于脑裂前的集群节点数量的50%,那它一定是所有子集中最大的一个(下称“唯一大子集”)。如果唯一大子集不是第一步判决出的期望的主要子集,则唯一大子集立即取代第一步判决出的期望的主要子集,判决为最终的可继续运行服务的子集(下称“主要子集”)。如果第二步中没有找到唯一大子集,或者唯一大子集就是第一步中找到的期望的主要子集,则第二步判决不工作,期望的主要子集被判决为最终的主要子集。
第一步判决方法由第一部判决子模块实现,第二步判决由第二步判决子模块实现。为保证第一步判决的正常工作,本发明实施例中要求额外信息渠道对第一步判决子模块提供如下1.1)到1.3)的信息交互能力:
1.1)在没有发生脑裂的正常情况下,所有能正常访问额外信息渠道的节点都通过额外信息渠道向集群中的其他节点表明自己处于正常态。这种通过额外信息渠道确认的,处于正常态的节点被称为“健康”节点。
1.2)在没有发生脑裂的正常情况下,所有健康节点都通过额外信息渠道从集群中选举出唯一的一个节点作为所谓“主要节点”。“主要节点”必然是健康节点,但健康节点不一定是主要节点。
1.3)主要节点的重新选举:如果脑裂是由于上述主要节点故障而导致的,那如果在第一步脑裂判决时,新的主要节点尚未选举出来,则第一步脑裂判决会因为找不到主要节点而失去判决能力。为避免这种情况的发生,本发明要求底层心跳通信协模块给出一个从通信中断,到上报脑裂事件到脑裂判决模块的最小时间间隔为T1。然后,本发明要求额外信息渠道从失去主要节点到重新选举新的主要节点的最长时间为T2。那么,只要保证T2<T1,就能保证在由于主要节点故障而导致脑裂事件发生之前,新的主要节点就已经重选完毕了,从而保证第一步脑裂判决的正确性;如果集群脑裂是由于非主要节点故障或者心跳线断导致的,则不会涉及到主要节点的重新选举。
下面1.4)到1.7)是在脑裂事件发生后,第一步判决方法借助当前主要节点这个既定的信息所做出的判决方法:
1.4)当脑裂发生后,主要节点所在的子集被立即判决为所谓“期望的主要子集”,其他子集则被判决为次要子集。但该判决结果先不上报到服务控制逻辑。
1.5)期望的主要子集中的各个节点的脑裂判决模块从底层心跳通信模块上报的脑裂事件消息中得到新的成员列表,也就是期望的主要子集的成员列表。
1.6)期望的主要子集从新的成员列表中指派一个代表节点,该节点对其它次要子集进行带延迟的Fence操作,即让其它子集停止工作,避免出现多主。这里的Fence操作之所以要求前置一个延迟(延迟时间设为Tdelay),是为了让该Fence操作一定慢于下面第二步判决中可能发生的零延迟的Fence,以便让各个子集执行第二步判决。所以Tdelay要大于第二步判决的耗时。
1.7)如果第二步判决并未真正起作用,则Tdelay时间后,“期望的主要子集”的代表将执行Fence操作,“期望的主要子集”最终判决为主要子集。判决结果上报到服务控制逻辑。
图2描述了第一步判决方法在主要节点故障时的模块协作以及时序关系。图3描述了第一步判决方法在非主要节点故障或者心跳线断时的模块协作以及时序关系。
在上述第一步脑裂判决后,已经足够避免多主和失去主用问题的发生。但可能还会发生“大多数可工作的节点失去主用,即集群失去大部分计算能力”的问题。举个大于两个节点的集群脑裂的例子来说明:假设四个节点A,B,C,D组成集群{A,B,C,D},且配置了符合第一步判决方法要求的额外信息渠道和Fence功能。然后,假设由于心跳线故障导致脑裂发生,所有节点都还能正常工作。结果是A,B,C成为一个子集,D成为一个子集,共分裂为{A,B,C}和{D}两个子集。如果D恰好是主要节点,则{D}被第一步脑裂判决判为主要子集,{A,B,C}被判为次要子集。最终,本来可以工作的{A,B,C}子集所代表的3/4的计算能力被排除在了集群之外。导致很大的计算能力浪费。
下面详述第二步判决方法。第二步判决方法紧接着第一步判决之后开始工作,它的目的是尽量让节点数量最多的子集替代第一步判决出的期望的主要子集作为真正的最终的主要子集。第二步判决方法是借助最新成员关系这一即有的信息来进行判决的,具体方法如下:
2.1)在没有发生脑裂的正常情况下,各个节点都记录当前集群的成员列表和成员数量。该信息由底层心跳通信模块在上一次脑裂事件发生时就已提供。
2.2)脑裂发生后,各个子集的各个节点的第二步判决模块也从底层心跳通信模块上报的脑裂事件消息中得到所在子集的成员关系和节点数量。如果某个子集的节点数量超过原集群的50%,则该子集中的所有节点都能立即确定本子集肯定是唯一的一个节点数量最多的子集,即“唯一大子集”。
2.3)唯一大子集从新的成员列表中选择一个代表节点,叫做唯一大子集代表。
2.4)如果唯一大子集代表发现本子集并不是第一步判决出的期望的主要子集,则该节点立即执行一个零时延的Fence操作,让除唯一大子集之外的其他所有节点都停止工作。零时延的Fence操作肯定早于1.6)中的期望的主要子集代表所做的带延迟Fence,所以零时延的Fence肯定能成功地让期望的主要子集停止工作。从而上述1.7)步不会被执行到。
2.5)唯一大子集最终被判决为主要子集。该结果被上报到服务控制逻辑。
2.6)由于其它子集都停止工作而不再健康,所以失去了竞争主要节点的能力。T2时间后,新的主要节点必然将在唯一大子集中重新选举产生,为下一次新的脑裂判决做准备。根据上述1.3)中的时间约束,本次重新选举主要节也不会被新的脑裂事件打断。
2.7)如果在2.2)步中未发现唯一大子集,或者在2.4)中发现唯一大子集就是期望的主要子集,则不需要执行第二步脑裂判决,即不会走到2.5)和2.6)步,第一步判决的1.7)步将被执行。
图4描述了第二步判决方法在心跳线断后,发现唯一大子集且唯一大子集不是期望的主要子集时的模块协作以及时序关系。图5描述了第二步判决方法在心跳线断后,发现唯一大子集且唯一大子集与期望的主要子集相同时的模块协作以及时序关系。
应用第二步判决方法后,再分析上面五个节点的集群的例子:{A,B,C}子集所代表的3/4的计算能力因为是唯一大子集,所以它将替代{D}作为最终的主要子集,成为可继续工作的新集群。假设A是唯一大子集代表,则D节点还没来得及Fence{A,B,C}就先被AFence了。
Fence机制可以是基于电源管理的节点级Fence,被Fence的节点会由于失去电力而停止运行服务。
具体实施例中,Fence也可以是基于内核Panic的节点级Fence,被Fence的节点会由于CPU停止工作而停止运行服务。
总之,Fence机制不限于上述两种机制,只要能达到集群中每个节点都能Fence其它任何节点的效果的技术手段,均在本发明保护范围中。
具体实施例中,额外信息渠道可以是使用基于共享存储介质的判决盘来实现。为得到主要节点,基于共享存储介质的判决盘和第一步判决子模块的具体交互如下:
1)集群初始化时,在共享介质(比如iSCSI,AOE,SAN等)上开辟一块磁盘空间作为判决盘。判决盘在空间上被划分为若干个区块。集群的每个节点被分配一个从零开始递增的节点ID。然后以此ID作为索引,每个节点就对应到唯一的一个区块上(区块也是从零开始索引)。
2)在没有发生脑裂的正常情况下,所有能正常访问判决盘的节点都通过磁盘I/O操作向判决盘中自己对应的区块里写入当前时间戳。集群中的其他节点根据这个时间戳的变化与否来判断某个节点是否是健康的。如果某个节点长时间不能更新它的时间戳,则被认为是不健康节点。
3)在集群中的各个节点配置同样的主要节点选取规则,如在没有发生脑裂的正常情况下,所有健康节点都认为健康且索引最小的一个节点就是唯一的主要节点;也可以选择索引最大的一个节点作为主要节点。本发明对此不作限定,只要能达到选择出唯一健康节点作为主要节点的实现方式,均在本发明保护范围内。
4)节点故障或者心跳线断事件发生,如果恰好是主要节点故障,则在T2时间内,新的主要节点被选出来。
具体实施例中,额外信息渠道也可以是使用基于额外的Ethernet网络(不是心跳线)来实现。为得到主要节点,额外的Ethernet网络和第一步判决子模块的具体交互如下:
2)在集群中的各个节点配置同样的主要节点选择规则。如,在没有发生脑裂的正常情况下,所有健康节点都认为健康且MAC地址或IP地址最小的一个节点是唯一的主要节点。本发明对此不作限定,只要能达到选择出唯一健康节点作为主要节点的实现方式,均在本发明保护范围内。
3)节点故障或者心跳线断事件发生,如果恰好是主要节点故障,则在T2时间内,新的主要节点被选出来。
总之,额外信息渠道不限于上述两种实现方式,但不论哪种实现方式,能够获得判断出节点健康与否、能够选出主要节点的实现方式均在本发明保护范围内,本发明实施例对此不作限定。
具体实施例中,心跳通信模块可以使用但不限于Totem组播通信协议。
具体实施例中,服务控制逻辑模块可以使用但不限于Pacemaker或者OpenAIS的AMF。
下面a.1)到a.4)是在脑裂事件发生后,第一步判决方法借助当前主要节点这个既定的信息所做出的判决方法:
a.1)脑裂发生后,主要节点所在的子集被立即判决为期望的主要子集,其他子集则被判决为次要子集。
a.2)期望的主要子集中的各个节点的脑裂判决模块从底层心跳通信模块上报的脑裂事件消息中得到新的成员列表,也就是期望的主要子集的成员列表。
a.3)期望的主要子集指派其成员列表中IP最小的节点作为期望的主要子代表,对其它次要子集进行带延迟的Fence操作。延迟时间为Tdelay。
a.4)Tdelay时间后,期望的主要子代表执行Fence操作,期望的主要子集最终被判决为主要子集。期望的主要子集的各个节点上报此判决结果到各自的服务控制逻辑模块。
下面b.1)到b.6)是第二步判决方法。它紧接着第一步判决之后开始工作。
b.1)各个子集都把成员数量和原集群成员数量作对比:若子集的成员数量大于原集群成员数量的50%,则该子集认为自己是唯一大子集。
b.2)如果各个子集都不是唯一大子集,则第二步判决立即结束。转到a.4)步。
b.3)某个子集发现自己是唯一大子集,但该子集恰好是就是期望的主要子集,则第二步判决立即结束。转到a.4)步。
b.4)某个子集发现自己是唯一大子集,且不是期望的主要子集,则唯一大子集指派其成员列表中IP最小的节点立即对除唯一大子集之外的其他所有节点执行一个零延迟的节点级Fence操作,让他们停止工作。因为期望的主要子集的代表被Fence,所以上述a.4)步将不会被执行到。
b.5)唯一大子集最终判决为集群脑裂后的主要子集。该结果被上报到唯一大子集各个节点的服务控制逻辑模块。
b.6)由于其它子集都停止工作而不能访问判决盘,所以它们在额外信息渠道来看都不健康,从而失去了竞争主要节点的能力。T2时间后,新的主要节点必然将在唯一大子集中重新选举出来,为下一次新的脑裂判决做准备。
下面结合附图,对本发明的实施例二进行说明。
本发明实施例提供了一种集群脑裂处理方法,该方法可应用于如图1所示的节点中,由脑裂判决模块完成该方法。使用该方法,在集群脑裂时对集群进行管理控制的流程如图6所示,包括:
步骤601、在集群发生脑裂时,选取该集群中唯一允许继续服务的子集;
本发明实施例中,在所述集群的各个节点维护当前集群成员列表、成员数量和集群成员变化通知信息。优选的,可通过图1中的心跳通信模块维护上述信息。
集群内发生脑裂后,形成多个子集,此时需要选择一个作为唯一允许继续服务的子集,使其他子集停止工作。本步骤具体如图7所示,包括:
步骤6011、选取在脑裂发生前的主要节点所在子集为期望的主要子集;
本步骤中,根据发生脑裂前各节点之间心跳线的通信,各节点均可得知之前的主要节点,在发生脑裂时,即选择该主要节点所在子集为期望的主要子集。
选择主要节点的方式如下:
1、在集群初始化时,在共享介质上开辟一块磁盘空间作为判决盘,将所述判决盘分区,将所述集群中的每个节点唯一对应到所述判决盘的一个分区上,所述集群中的各个节点通过磁盘I/O操作向所述判决盘中对应的分区里写入当前时间戳。
然后,选择持续更新时间戳的节点之一作为主要节点。持续更新时间戳说明该节点连接正常,属于健康节点,可从中选择一个作为主要节点。具体的选择规则可根据需要配置,在集群中的全部节点上配置同样的规则。
如果主要节点发生故障,将该故障的节点排除后,从剩余的健康节点中再次选取新的主要节点。
2、所述集群中的各个节点在没有发生脑裂的正常情况下,通过额外的Ethernet网络周期广播或组播KeepAlive消息。
然后,选择持续发出所述KeepAlive消息的节点之一作为主要节点。持续发出KeepAlive消息说明该节点连接正常,属于健康节点,可从中选择一个作为主要节点。具体的选择规则可根据需要配置,在集群中的全部节点上配置同样的规则。
如果主要节点发生故障,将该故障的节点排除后,从剩余的健康节点中再次选取新的主要节点。
步骤6012、从所述期望的主要子集中指派一个代表节点,指示所述代表节点在第一延迟时间之后通知除所述期望的主要子集外的其他各个子集的全部节点停止工作。
步骤6013、选取节点数量大于脑裂发生前集群节点数量一半的子集作为唯一大子集;
本步骤为可选步骤,在存在这样节点数量大于脑裂发生前集群内全部节点数量一半的子集时,以该子集作为唯一大子集。
步骤6014、从所述唯一大子集中选择一个节点作为唯一大子集代表;
本步骤为可选步骤,即在步骤6013中确定存在唯一大子集时,本步骤选取该子集中的一个节点作为唯一大子集代表。
步骤6015、指示所述唯一大子集代表判定所述唯一大子集与所述期望的主要子集为不同子集时,在零时延或第二延迟时间后,通知除所述唯一大子集外的其他子集的全部节点停止工作,所述第二延迟时间小于所述第一延迟时间;
本步骤为可选步骤,在存在唯一大子集时执行本步骤。
本步骤中,通过小于第一延迟时间的第二延迟时间,这样,能够确保在完成确认是否存在唯一大子集操作之后,期望的主要子集才有可能发出要求其他子集停止工作的通知,不会发生存在唯一大子集,但在唯一大子集被选择出来之前,就由期望的主要子集通知该唯一大子集中的节点停止工作,导致处理能力损失的问题。
步骤6016、从所述期望的主要子集和所述唯一大子集中,选择唯一允许继续服务的子集;
本步骤具体涉及以下几种情况:
在不存在唯一大子集时,选择所述期望的主要子集作为唯一允许继续服务的子集;
在所述期望的主要子集与所述唯一大子集为同一子集时,以该子集作为唯一允许继续服务的子集;
在所述期望的主要子集与所述唯一大子集为不同子集时,以所述唯一大子集作为唯一允许继续服务的子集。
此外,在判定发生脑裂时,还需要中断各节点底层心跳通信与上层服务控制逻辑间的通信,至达到第一时间长度后,恢复所述底层心跳通信与上层服务控制逻辑间的通信。这样做的目的,是保证上层服务控制逻辑在第一时间长度内不对该集群脑裂事件作出响应,为在底层与上层间完成唯一允许继续服务的子集争取时间。
在中断底层心跳通信与上层服务控制逻辑间的通信的同时,完成唯一允许继续服务子集的选择。在以唯一大子集作为唯一允许继续服务子集时,还需要选择新的主要节点,具体的,从所述唯一大子集中选举一个节点作为新的主要节点,选举所述新的主要节点耗时从判定发生脑裂时起至第二时间长度止,所述第二时间长度小于所述第一时间长度。这样,在新的主要节点选择完成后,底层心跳通信与上层服务控制逻辑间的通信才恢复,上层服务控制逻辑直接获取了新的主要服务节点信息,避免了各节点各自判断自身运行状态带来的管理混乱的问题。
步骤602、控制除所述唯一允许继续服务的子集外的其他子集中的节点停止工作;
本步骤中,可由唯一允许继续服务的子集内的节点通知其他子集中的节点停止工作。
下面结合附图,对本发明的实施例三进行说明。
本发明实施例提供了一种集群脑裂处理装置,该装置的结构如图8所示,包括:
继续服务子集选择模块801,用于在集群发生脑裂时,选取该集群中唯一允许继续服务的子集;
节点停工控制模块802,用于控制除所述唯一允许继续服务的子集外的其他子集中的节点停止工作。
优选的,所述继续服务子集选择模块801的结构如图9所示,包括:
期望主要子集选取单元8011,用于选取在脑裂发生前的主要节点所在子集为期望的主要子集;
唯一大子集选取单元8012,用于选取节点数量大于脑裂发生前集群节点数量一半的子集作为唯一大子集;
继续服务子集选取单元8013,用于从所述期望的主要子集和所述唯一大子集中,选择唯一允许继续服务的子集。
优选的,所述继续服务子集选择模块801还包括:
代表节点选择单元8014,用于从所述期望的主要子集中指派一个代表节点,指示所述代表节点在第一延迟时间之后通知除所述期望的主要子集外的其他各个子集的全部节点停止工作。
优选的,所述继续服务子集选取单元8013的结构如图10所示,包括:
第一选取子单元1001,用于在不存在唯一大子集时,选择所述期望的主要子集作为唯一允许继续服务的子集;
第二选取子单元1002,用于在所述期望的主要子集与所述唯一大子集为同一子集时,以该子集作为唯一允许继续服务的子集;
第三选取子单元1003,用于在所述期望的主要子集与所述唯一大子集为不同子集时,以所述唯一大子集作为唯一允许继续服务的子集。
优选的,所述继续服务子集选择模块801还包括:
唯一大子集代表选择单元8015,用于从所述唯一大子集中选择一个节点作为唯一大子集代表,指示所述唯一大子集代表判定所述唯一大子集与所述期望的主要子集为不同子集时,在零时延或第二延迟时间后,通知除所述唯一大子集外的其他子集的全部节点停止工作,所述第二延迟时间小于所述第一延迟时间。
优选的,该装置还包括:
内部通信管理模块803,用于节点检测到心跳线通信发生中断时,中断该节点底层心跳通信与上层服务控制逻辑间的通信,至达到第一时间长度后,判定脑裂发生,恢复所述底层心跳通信与上层服务控制逻辑间的通信。
优选的,在以所述唯一大子集作为唯一允许继续服务的子集时,该装置还包括:
主要节点选举模块804,用于从所述唯一大子集中选举一个节点作为新的主要节点,选举所述新的主要节点耗时从判定发生脑裂时起至第二时间长度止,所述第二时间长度小于所述第一时间长度。
优选的,该装置还包括:
存储模块805,用于维护当前集群成员列表、成员数量和集群成员变化通知信息。
上述集群脑裂处理装置可集成于集群内的节点中,在底层心跳通信与上层服务控制逻辑间,结合本发明的实施例提供的集群脑裂处理方法,由节点完成相应功能。
本发明的实施例提供了一种集群脑裂处理方法和装置,在集群发生脑裂时,选取该集群中唯一允许继续服务的子集,控制除所述唯一允许继续服务的子集外的其他子集中的节点停止工作。实现了集群脑裂情况下对集群的有序管理,解决了集群脑裂后的控制问题。
本领域普通技术人员可以理解上述实施例的全部或部分步骤可以使用计算机程序流程来实现,所述计算机程序可以存储于一计算机可读存储介质中,所述计算机程序在相应的硬件平台上(如系统、设备、装置、器件等)执行,在执行时,包括方法实施例的步骤之一或其组合。
可选地,上述实施例的全部或部分步骤也可以使用集成电路来实现,这些步骤可以被分别制作成一个个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
上述实施例中的各装置/功能模块/功能单元可以采用通用的计算装置来实现,它们可以集中在单个的计算装置上,也可以分布在多个计算装置所组成的网络上。
上述实施例中的各装置/功能模块/功能单元以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。上述提到的计算机可读取存储介质可以是只读存储器,磁盘或光盘等。
任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求所述的保护范围为准。

Claims (18)

1.一种集群脑裂处理方法,其特征在于,包括:
在集群发生脑裂时,选取该集群中唯一允许继续服务的子集;
控制除所述唯一允许继续服务的子集外的其他子集中的节点停止工作。
2.根据权利要求1所述的集群脑裂处理方法,其特征在于,在集群发生脑裂时,选取该集群中唯一允许继续服务的子集包括:
选取在脑裂发生前的主要节点所在子集为期望的主要子集;
选取节点数量大于脑裂发生前集群节点数量一半的子集作为唯一大子集;
从所述期望的主要子集和所述唯一大子集中,选择唯一允许继续服务的子集。
3.根据权利要求2所述的集群脑裂处理方法,其特征在于,该方法还包括:
在集群初始化时,在共享介质上开辟一块磁盘空间作为判决盘,将所述判决盘分区,将所述集群中的每个节点唯一对应到所述判决盘的一个分区上;
所述集群中的各个节点通过磁盘I/O操作向所述判决盘中对应的分区里写入当前时间戳;
选择持续更新时间戳的节点之一作为主要节点。
4.根据权利要求2所述的集群脑裂方法,其特征在于,该方法还包括:
所述集群中的各个节点在没有发生脑裂的正常情况下,通过额外的Ethernet网络周期广播或组播KeepAlive消息;
选择持续发出所述KeepAlive消息的节点之一作为主要节点。
5.根据权利要求2所述的集群脑裂处理方法,其特征在于,选取在脑裂发生前的主要节点所在子集为期望的主要子集的步骤之后,还包括:
从所述期望的主要子集中指派一个代表节点,指示所述代表节点在第一延迟时间之后通知除所述期望的主要子集外的其他各个子集的全部节点停止工作。
6.根据权利要求5所述的集群脑裂处理方法,其特征在于,从所述期望的主要子集和所述唯一大子集中,选择唯一允许继续服务的子集包括:
在不存在唯一大子集时,选择所述期望的主要子集作为唯一允许继续服务的子集;
在所述期望的主要子集与所述唯一大子集为同一子集时,以该子集作为唯一允许继续服务的子集;
在所述期望的主要子集与所述唯一大子集为不同子集时,以所述唯一大子集作为唯一允许继续服务的子集。
7.根据权利要求6所述的集群脑裂处理方法,其特征在于,选取节点数量大于脑裂发生前集群节点数量一半的子集作为唯一大子集的步骤之后,还包括:
从所述唯一大子集中选择一个节点作为唯一大子集代表;
指示所述唯一大子集代表判定所述唯一大子集与所述期望的主要子集为不同子集时,在零时延或第二延迟时间后,通知除所述唯一大子集外的其他子集的全部节点停止工作,所述第二延迟时间小于所述第一延迟时间。
8.根据权利要求6所述的集群脑裂处理方法,其特征在于,该方法还包括:
在节点检测到心跳线通信发生中断时,中断该节点底层心跳通信与上层服务控制逻辑间的通信,至达到第一时间长度后,判定脑裂发生,恢复所述底层心跳通信与上层服务控制逻辑间的通信。
9.根据权利要求8所述的集群脑裂处理方法,其特征在于,在以所述唯一大子集作为唯一允许继续服务的子集时,该方法还包括:
从所述唯一大子集中选举一个节点作为新的主要节点,选举所述新的主要节点耗时从判定发生脑裂时起至第二时间长度止,所述第二时间长度小于所述第一时间长度。
10.根据权利要求1所述的集群脑裂处理方法,其特征在于,该方法还包括:
在所述集群的各个节点维护当前集群成员列表、成员数量和集群成员变化通知信息。
11.一种集群脑裂处理装置,其特征在于,包括:
继续服务子集选择模块,用于在集群发生脑裂时,选取该集群中唯一允许继续服务的子集;
节点停工控制模块,用于控制除所述唯一允许继续服务的子集外的其他子集中的节点停止工作。
12.根据权利要求11所述的集群脑裂处理装置,其特征在于,所述继续服务子集选择模块包括:
期望主要子集选取单元,用于选取在脑裂发生前的主要节点所在子集为期望的主要子集;
唯一大子集选取单元,用于选取节点数量大于脑裂发生前集群节点数量一半的子集作为唯一大子集;
继续服务子集选取单元,用于从所述期望的主要子集和所述唯一大子集中,选择唯一允许继续服务的子集。
13.根据权利要求12所述的集群脑裂处理装置,其特征在于,所述继续服务子集选择模块还包括:
代表节点选择单元,用于从所述期望的主要子集中指派一个代表节点,指示所述代表节点在第一延迟时间之后通知除所述期望的主要子集外的其他各个子集的全部节点停止工作。
14.根据权利要求13所述的集群脑裂处理装置,其特征在于,所述继续服务子集选取单元包括:
第一选取子单元,用于在不存在唯一大子集时,选择所述期望的主要子集作为唯一允许继续服务的子集;
第二选取子单元,用于在所述期望的主要子集与所述唯一大子集为同一子集时,以该子集作为唯一允许继续服务的子集;
第三选取子单元,用于在所述期望的主要子集与所述唯一大子集为不同子集时,以所述唯一大子集作为唯一允许继续服务的子集。
15.根据权利要求14所述的集群脑裂处理装置,其特征在于,所述继续服务子集选择模块还包括:
唯一大子集代表选择单元,用于从所述唯一大子集中选择一个节点作为唯一大子集代表,指示所述唯一大子集代表判定所述唯一大子集与所述期望的主要子集为不同子集时,在零时延或第二延迟时间后,通知除所述唯一大子集外的其他子集的全部节点停止工作,所述第二延迟时间小于所述第一延迟时间。
16.根据权利要求14所述的集群脑裂处理装置,其特征在于,该装置还包括:
内部通信管理模块,用于在节点检测到心跳线通信发生中断时,中断该节点底层心跳通信与上层服务控制逻辑间的通信,至达到第一时间长度后,判定脑裂发生,恢复所述底层心跳通信与上层服务控制逻辑间的通信。
17.根据权利要求16所述的集群脑裂处理装置,其特征在于,在以所述唯一大子集作为唯一允许继续服务的子集时,该装置还包括:
主要节点选举模块,用于从所述唯一大子集中选举一个节点作为新的主要节点,选举所述新的主要节点耗时从判定发生脑裂时起至第二时间长度止,所述第二时间长度小于所述第一时间长度。
18.根据权利要求11所述的集群脑裂处理装置,其特征在于,该装置还包括:
存储模块,用于维护当前集群成员列表、成员数量和集群成员变化通知信息。
CN201410515113.5A 2014-09-29 2014-09-29 集群脑裂处理方法和装置 Pending CN105450717A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201410515113.5A CN105450717A (zh) 2014-09-29 2014-09-29 集群脑裂处理方法和装置
PCT/CN2015/079096 WO2016050074A1 (zh) 2014-09-29 2015-05-15 集群脑裂处理方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410515113.5A CN105450717A (zh) 2014-09-29 2014-09-29 集群脑裂处理方法和装置

Publications (1)

Publication Number Publication Date
CN105450717A true CN105450717A (zh) 2016-03-30

Family

ID=55560485

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410515113.5A Pending CN105450717A (zh) 2014-09-29 2014-09-29 集群脑裂处理方法和装置

Country Status (2)

Country Link
CN (1) CN105450717A (zh)
WO (1) WO2016050074A1 (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107508694A (zh) * 2016-06-14 2017-12-22 中兴通讯股份有限公司 一种集群内的节点管理方法及节点设备
CN109257195A (zh) * 2017-07-12 2019-01-22 华为技术有限公司 集群中节点的故障处理方法及设备
CN111835534A (zh) * 2019-04-15 2020-10-27 华为技术有限公司 一种集群控制的方法及相关设备
CN112181305A (zh) * 2020-09-30 2021-01-05 北京人大金仓信息技术股份有限公司 数据库集群网络分区选择方法和装置
CN114374707A (zh) * 2022-03-22 2022-04-19 联想凌拓科技有限公司 用于存储集群的管理方法、装置、设备及介质
CN114756410A (zh) * 2022-06-15 2022-07-15 苏州浪潮智能科技有限公司 一种双机热备系统的数据恢复方法、装置及介质

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109684032B (zh) * 2018-12-04 2021-04-27 武汉烽火信息集成技术有限公司 防脑裂的OpenStack虚拟机高可用计算节点装置及管理方法
US11544228B2 (en) 2020-05-07 2023-01-03 Hewlett Packard Enterprise Development Lp Assignment of quora values to nodes based on importance of the nodes

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101291243A (zh) * 2007-04-16 2008-10-22 广东省新支点技术服务有限公司 高可用集群系统的裂脑预防方法
CN102308559A (zh) * 2011-07-26 2012-01-04 华为技术有限公司 一种用于集群计算机系统的投票仲裁方法及装置
CN102402395A (zh) * 2010-09-16 2012-04-04 上海中标软件有限公司 基于仲裁磁盘的高可用系统不间断运行方法
US8412790B2 (en) * 2009-02-12 2013-04-02 Nhn Corporation Method, system and computer readable recording medium for determining major group under split-brain syndrome
US20130268495A1 (en) * 2012-04-09 2013-10-10 Microsoft Corporation Split brain protection in computer clusters
CN103684941A (zh) * 2013-11-23 2014-03-26 广东新支点技术服务有限公司 基于仲裁服务器的集群裂脑预防方法和装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1550036B1 (en) * 2002-10-07 2008-01-02 Fujitsu Siemens Computers, Inc. Method of solving a split-brain condition in a cluster computer system
US8024432B1 (en) * 2008-06-27 2011-09-20 Symantec Corporation Method and apparatus for partitioning a computer cluster through coordination point devices
CN102394914A (zh) * 2011-09-22 2012-03-28 浪潮(北京)电子信息产业有限公司 集群脑裂处理方法和装置
CN103209095B (zh) * 2013-03-13 2017-05-17 广东中兴新支点技术有限公司 一种基于磁盘服务锁的裂脑预防的方法和装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101291243A (zh) * 2007-04-16 2008-10-22 广东省新支点技术服务有限公司 高可用集群系统的裂脑预防方法
US8412790B2 (en) * 2009-02-12 2013-04-02 Nhn Corporation Method, system and computer readable recording medium for determining major group under split-brain syndrome
CN102402395A (zh) * 2010-09-16 2012-04-04 上海中标软件有限公司 基于仲裁磁盘的高可用系统不间断运行方法
CN102308559A (zh) * 2011-07-26 2012-01-04 华为技术有限公司 一种用于集群计算机系统的投票仲裁方法及装置
US20130268495A1 (en) * 2012-04-09 2013-10-10 Microsoft Corporation Split brain protection in computer clusters
CN103684941A (zh) * 2013-11-23 2014-03-26 广东新支点技术服务有限公司 基于仲裁服务器的集群裂脑预防方法和装置

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107508694A (zh) * 2016-06-14 2017-12-22 中兴通讯股份有限公司 一种集群内的节点管理方法及节点设备
CN107508694B (zh) * 2016-06-14 2021-11-16 中兴通讯股份有限公司 一种集群内的节点管理方法及节点设备
CN109257195A (zh) * 2017-07-12 2019-01-22 华为技术有限公司 集群中节点的故障处理方法及设备
CN109257195B (zh) * 2017-07-12 2021-01-15 华为技术有限公司 集群中节点的故障处理方法及设备
US11115263B2 (en) 2017-07-12 2021-09-07 Huawei Technologies Co., Ltd. Intra-cluster node troubleshooting method and device
CN111835534A (zh) * 2019-04-15 2020-10-27 华为技术有限公司 一种集群控制的方法及相关设备
CN112181305A (zh) * 2020-09-30 2021-01-05 北京人大金仓信息技术股份有限公司 数据库集群网络分区选择方法和装置
CN112181305B (zh) * 2020-09-30 2024-06-07 北京人大金仓信息技术股份有限公司 数据库集群网络分区选择方法和装置
CN114374707A (zh) * 2022-03-22 2022-04-19 联想凌拓科技有限公司 用于存储集群的管理方法、装置、设备及介质
CN114374707B (zh) * 2022-03-22 2022-06-21 联想凌拓科技有限公司 用于存储集群的管理方法、装置、设备及介质
CN114756410A (zh) * 2022-06-15 2022-07-15 苏州浪潮智能科技有限公司 一种双机热备系统的数据恢复方法、装置及介质
CN114756410B (zh) * 2022-06-15 2022-11-11 苏州浪潮智能科技有限公司 一种双机热备系统的数据恢复方法、装置及介质

Also Published As

Publication number Publication date
WO2016050074A1 (zh) 2016-04-07

Similar Documents

Publication Publication Date Title
CN105450717A (zh) 集群脑裂处理方法和装置
CN105406980B (zh) 一种多节点备份方法及装置
CN106656682B (zh) 集群心跳检测方法、系统及装置
US7539150B2 (en) Node discovery and communications in a network
US20090259741A1 (en) Grid Computing Implementation
CN108551765A (zh) 输入/输出隔离优化
CN105515812A (zh) 资源的故障处理方法及装置
JP2005209201A (ja) 高可用性クラスタにおけるノード管理
US20170270015A1 (en) Cluster Arbitration Method and Multi-Cluster Cooperation System
CN107404394B (zh) 一种iptv系统容灾方法及iptv容灾系统
CN102394914A (zh) 集群脑裂处理方法和装置
CN115396291B (zh) 一种基于kubernetes托管的redis集群故障自愈方法
CN103490914A (zh) 一种网络应用设备多机热备的切换系统及方法
CN107277886A (zh) 一种基于wifi的物联网设备自组网方法
CN110971662A (zh) 一种基于Ceph的两节点高可用实现方法及装置
CN107104844B (zh) 一种ctdb迁移公共ip地址的方法及装置
CN102187627B (zh) 负载分担的方法及装置、宽带接入服务器系统
CN104052799B (zh) 一种利用资源环实现高可用存储的方法
US11544162B2 (en) Computer cluster using expiring recovery rules
CN114124803B (zh) 设备管理方法、装置、电子设备及存储介质
CN111367711A (zh) 一种基于超融合数据安全容灾方法
US10645163B2 (en) Site-aware cluster management
CN108897645B (zh) 一种基于备用心跳磁盘的数据库集群容灾方法和系统
CN112612652A (zh) 分布式存储系统异常节点重启方法及系统
JP5594668B2 (ja) ノード、クラスタリングシステム、クラスタリングシステムの制御方法、およびプログラム

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20160330

WD01 Invention patent application deemed withdrawn after publication