CN111708668B - 集群故障的处理方法、装置及电子设备 - Google Patents
集群故障的处理方法、装置及电子设备 Download PDFInfo
- Publication number
- CN111708668B CN111708668B CN202010477541.9A CN202010477541A CN111708668B CN 111708668 B CN111708668 B CN 111708668B CN 202010477541 A CN202010477541 A CN 202010477541A CN 111708668 B CN111708668 B CN 111708668B
- Authority
- CN
- China
- Prior art keywords
- node
- cluster
- nodes
- root
- slave
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3006—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is distributed, e.g. networked systems, clusters, multiprocessor systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
- G06F16/184—Distributed file systems implemented as replicated file system
- G06F16/1844—Management specifically adapted to replicated file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Quality & Reliability (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及集群故障的处理方法、装置及电子设备,涉及云计算领域。该方法包括:接收集群的根节点上报的节点信息,其中,根节点通过集群中节点之间的相互通信确定;根据接收的节点信息确定集群中根节点的个数;在根节点的个数大于一个的情况下,确定集群出现网络分区故障。该方法可以在网络分区的情况下自动发现数据库集群的故障,及时发现问题,避免生产事故。
Description
技术领域
本发明涉及云计算技术领域,更具体地,涉及一种集群故障的处理方法、一种集群故障的处理方法以及一种电子设备。
背景技术
数据库(例如,Redis)被广泛运用于内容识别的各种业务场景中,在数据库集群中,当我们遇到单机内存、并发、流量等瓶颈时,通过数据库集群能达到高可用的目的。
数据库集群中的节点分为Master节点(主节点)和Slave节点(从节点),Master节点负责所有的读写请求和集群关键信息的维护,而Slave节点只负责进行主节点数据和状态信息的复制。
各节点间例如可以采用P2P的Gossip协议进行通信,集群中每个Master节点都会定期向其他Master节点发送ping消息,接收节点回复pong消息,如果在cluster-node-timout时间内Master节点A向Master节点B通信一直失败,A会将B标记为主观下线,同时A会向Master集群内广播B被认定为主观下线的消息。当半数以上的Master节点都认定B为主观下线时,B将会被认定为客观下线,完成故障发现。
相关技术中,集群的故障发现功能只能应对在网络正常的情况下,服务器故障导致个别Master节点故障的情况,而对于网络分区的相关故障,将无法进行故障发现。
因此,有必要提出一种进行集群故障处理的新的技术方案。
发明内容
本发明的一个目的是提供一种进行集群故障处理的新的技术方案。
根据本发明的第一方面,提供了一种集群故障的处理方法,所述集群包括多个节点,所述多个节点包括至少一个主节点,所述主节点对应至少一个从节点,其中,所述方法由所述集群外的监控器实施,包括:
接收所述集群的根节点上报的节点信息,其中,所述根节点通过所述集群中节点之间的相互通信确定;
根据接收的所述节点信息确定所述集群中根节点的个数;
在所述根节点的个数大于一个的情况下,确定所述集群出现网络分区故障。
可选地,在所述确定所述集群出现网络分区故障之后,所述方法还包括:
向所述集群的根节点发送合并指令,以使所述集群中大于一个的根节点之间进行合并操作;
接收所述集群中大于一个的根节点的合并反馈信息;
在所述合并反馈信息表示所述合并操作执行失败的情况下,确认所述集群出现网络分区故障。
可选地,在所述确定所述集群出现网络分区故障之后,所述方法还包括:
向所述集群的多个节点发送状态上报指令,以使所述多个节点中的每个节点向所述监控器上报自身的状态信息,其中,所述状态信息包括节点标识、节点地址、节点类型、所属根节点的标识、所属主节点的信息、所对应哈希槽的标识中的至少一项;
接收所述多个节点发送的状态信息。
可选地,在所述接收所述多个节点发送的状态信息后,所述方法还包括:
根据每个节点所属根节点的标识,确定至少两个网络连通区,其中,所述网络连通区与所述根节点一一对应;
检测每个主节点和对应的从节点是否位于同一网络连通区;
如果第一主节点和至少一个对应的从节点位于第一网络连通区,并且所述第一主节点的至少一个从节点位于第二网络连通区,则向所述集群发送释放指令,以清除所述第二网络连通区内的从节点与所述第一主节点之间的主从关系。
可选地,在所述接收所述多个节点发送的状态信息后,所述方法还包括:
根据预设频率定期向所述集群的每个节点发送连通性检测指令;
根据每个节点对所述连通性检测指令的响应结果,确定所述集群中的多个节点是否存在下线节点;
在所述集群中存在下线节点并且所述下线节点的节点类型为主节点的情况下,从所述下线节点的从节点中确定出新的主节点。
可选地,所述从所述下线节点的从节点中确定出新的主节点,包括:
向所述下线节点的从节点发送偏移量上报指令,以使所述从节点反馈自身同步数据的偏移量;
从所述下线节点的从节点中确定偏移量最大的从节点,并向所述偏移量最大的从节点发送类型转换指令,以使所述偏移量最大的从节点转换为主节点。
可选地,所述方法还包括:
向所述集群发送哈希槽清除指令,以清除所述下线节点和对应的哈希槽之间的对应关系;
向所述集群发送哈希槽分配指令,以建立所述下线节点对应的哈希槽和所述偏移量最大的从节点之间的对应关系。
可选地,所述方法还包括:
在所述合并反馈信息表示所述合并操作执行成功的情况下,向所述集群发送网络分区恢复指令,以使所述集群恢复至正常运行状态。
根据本发明的第二方面,提供了一种集群故障的处理方法,由集群中的第一节点实施,包括:
接收所述集群中第二节点发送的父节点标识,其中,每个节点的父节点标识初始为自身标识;
将所述第二节点发送的父节点标识与自身的父节点标识进行比较,以更新自身的父节点标识;
经过至少一次所述更新步骤后,如果自身的父节点标识与自身标识相同,则确定自身为根节点;
在自身为根节点的情况下,向如前文所述的监控器发送自身的节点信息。
根据本发明的第三方面,提供了一种集群故障的处理装置,所述集群包括多个节点,所述多个节点包括至少一个主节点,所述主节点对应至少一个从节点,其中,所述装置应用于所述集群外的监控器,包括:
第一接收模块,用于接收所述集群的根节点上报的节点信息,其中,所述根节点通过所述集群中节点之间的相互通信确定;
第一处理模块,用于根据接收的所述节点信息确定所述集群中根节点的个数;
第二处理模块,用于在所述根节点的个数大于一个的情况下,确定所述集群出现网络分区故障。
可选地,所述装置还包括复查模块,用于:
向所述集群的根节点发送合并指令,以使所述集群中大于一个的根节点之间进行合并操作;
接收所述集群中大于一个的根节点的合并反馈信息;
在所述合并反馈信息表示所述合并操作执行失败的情况下,确认所述集群出现网络分区故障。
可选地,所述装置还包括状态收集模块,用于:
向所述集群的多个节点发送状态上报指令,以使所述多个节点中的每个节点向所述监控器上报自身的状态信息,其中,所述状态信息包括节点标识、节点地址、节点类型、所属根节点的标识、所属主节点的信息、所对应哈希槽的标识中的至少一项;
接收所述多个节点发送的状态信息。
可选地,所述装置还包括主从控制模块,用于:
根据每个节点所属根节点的标识,确定至少两个网络连通区,其中,所述网络连通区与所述根节点一一对应;
检测每个主节点和对应的从节点是否位于同一网络连通区;
如果第一主节点和至少一个对应的从节点位于第一网络连通区,并且所述第一主节点的至少一个从节点位于第二网络连通区,则向所述集群发送释放指令,以清除所述第二网络连通区内的从节点与所述第一主节点之间的主从关系。
可选地,所述装置还包括故障转移模块,所述故障转移模块进一步包括:
发送单元,用于根据预设频率定期向所述集群的每个节点发送连通性检测指令;
检测单元,用于根据每个节点对所述连通性检测指令的响应结果,确定所述集群中的多个节点是否存在下线节点;
选主单元,用于在所述集群中存在下线节点并且所述下线节点的节点类型为主节点的情况下,从所述下线节点的从节点中确定出新的主节点。
可选地,所述选主单元进一步包括:
偏移量获取子单元,用于向所述下线节点的从节点发送偏移量上报指令,以使所述从节点反馈自身同步数据的偏移量;
主从转换子单元,用于从所述下线节点的从节点中确定偏移量最大的从节点,并向所述偏移量最大的从节点发送类型转换指令,以使所述偏移量最大的从节点转换为主节点。
可选地,所述装置还包括清除模块,用于:
向所述集群发送哈希槽清除指令,以清除所述下线节点和对应的哈希槽之间的对应关系;
向所述集群发送哈希槽分配指令,以建立所述下线节点对应的哈希槽和所述偏移量最大的从节点之间的对应关系。
可选地,所述装置还包括恢复模块,用于:
在所述合并反馈信息表示所述合并操作执行成功的情况下,向所述集群发送网络分区恢复指令,以使所述集群恢复至正常运行状态。
根据本发明的第四方面,提供了一种集群故障的处理装置,应用于集群中的第一节点,包括:
接收模块,用于接收所述集群中第二节点发送的父节点标识,其中,每个节点的父节点标识初始为自身标识;
更新模块,用于将所述第二节点发送的父节点标识与自身的父节点标识进行比较,以更新自身的父节点标识;
确定模块,用于经过至少一次所述更新步骤后,如果自身的父节点标识与自身标识相同,则确定自身为根节点;
发送模块,用于在自身为根节点的情况下,向如前文所述的监控器发送自身的节点信息。
根据本发明的第五方面,还提供了一种电子设备,包括存储器和处理器,所述存储器存储有可执行命令,所述处理器执行所述可执行命令时,实现如本发明第一方面或者第二方面所述的方法。
本实施例中集群故障的处理方法,通过监控器获取集群的根节点信息,并通过根节点信息判断集群是否出现网络分区故障,可以在网络分区的情况下自动发现数据库集群的故障,及时发现问题,避免生产事故。
通过以下参照附图对本发明的示例性实施例的详细描述,本发明的其它特征及其优点将会变得清楚。
附图说明
被结合在说明书中并构成说明书的一部分的附图示出了本发明的实施例,并且连同其说明一起用于解释本发明的原理。
图1是可用于实现本发明实施例的电子设备的示意图。
图2是根据本发明实施例的集群故障的处理方法的流程图。
具体实施方式
现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,技术、方法和设备应当被视为说明书的一部分。
在这里示出和讨论的所有例子中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它例子可以具有不同的值。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
<硬件配置>
图1示出了可用于实现本发明的实施例的电子设备的硬件配置。
参见图1,电子设备1000包括处理器1100、存储器1200、接口装置1300、通信装置1400、显示装置1500和输入装置1600。处理器1100例如可以是中央处理器CPU、微控制单元MCU等。存储器1200例如包括ROM(只读存储器)、RAM(随机存取存储器)、诸如硬盘的非易失性存储器等。接口装置1300例如包括USB接口、串行接口等。通信装置1400例如是有线网卡或无线网卡。显示装置1500例如是液晶显示屏。输入装置1600例如包括触摸屏、键盘、鼠标、麦克风等。
应用于本说明书的实施例中,电子设备1000的存储器1200用于存储指令,该指令用于控制处理器1100进行操作以支持实现根据本说明书任意实施例的方法。技术人员可以根据本说明书所公开方案设计指令。指令如何控制处理器进行操作,这是本领域公知,故在此不再详细描述。
本领域技术人员应当理解,尽管在图1中示出了电子设备1000的多个装置,但是,本说明书实施例的电子设备1000可以仅涉及其中的部分装置,例如,只涉及处理器1100、存储器1200和通信装置1400。
图1所示的硬件配置仅是解释性的,并且决不是为了要限制本发明、其应用或用途。
<方法实施例>
本实施例提供了一种集群故障的处理方法,例如由图1所示的电子设备1000实施。
本实施例中,集群包括多个节点,多个节点包括至少一个主节点,主节点对应至少一个从节点。
此外,还需要说明的是,本发明适用于所有数据库集群,在后续实施例中以Redis数据库的集群为例,但不限于Redis数据库,因此,以下示例不构成对本发明的限制。
本实施例中,电子设备1000是集群外的监控器。监控器是专门用于监控集群状态的组件,例如是一种客户端软件,能够和所有节点通信。
如图2所示,该方法包括以下步骤S1100-S1300。
在步骤S1100中,接收集群的根节点上报的节点信息,其中,根节点通过集群中节点之间的相互通信确定。
本实施例中,根节点通过集群中节点之间的相互通信确定的。一个根节点对应一个网络连通区。其中,网络连通区是指能够两两之间进行数据交换的多个节点的集合。同一个网络连通区内的两个节点之间存在连通关系。。
本实施例中,连通关系是指两个节点可以直接或间接进行通信。
在一个例子中,根节点(root节点)的获取过程包括:多个节点中的第一节点基于一致性协议,获取第二节点的父节点(parent节点)信息;第一节点根据第二节点的父节点信息和预设的更新规则,更新自身的父节点信息;第一节点在父节点为自身的情况下,判断自身为根节点。
在上述例子中,某个节点的父节点初始为该节点自身。
在上述例子中,一致性协议例如是Gossip协议。
在上述例子中,更新规则例如是节点ID最小原则或者节点ID最大原则。
在一个例子中,第一节点根据第二节点的父节点信息和预设更新规则,更新自身的父节点信息,包括:在第一节点在自身和第二节点对应不同父节点的情况下,获取自身的根节点和第二节点的根节点;第一节点根据自身的根节点、第二节点的根节点和预设更新规则,更新自身的父节点信息。
上述获取自身的根节点和第二节点的根节点,例如为:在链条E-F-G-H-K-J(根节点)中,E的父节点是F,根节点是J,则E会将自己的父节点改为J,使得链条变为E-J,其中E的父节点和根节点都是J。
上述获取根节点的过程可以基于Union-Find(并查集)算法实现。并查集(Union-FindSet),也称为不相交集数据结构(DisjointedSetDataStructure)。是指一系不相交的集合(Sets),提供合并(Union)和查找(Find)两种操作。find(i)即查找I所归属的集合,通常我们使用find(i)和find(j)判断i和j是否连通,即是否属于同一个集合。Union方法即将I和J所在的两个集合连通起来,执行这个方法后,I所在集合和所有元素和J所在集合的所有元素都连通
在一个例子中,根节点的节点信息的获取过程包括如下步骤。
1.集群内所有Master和Slave节点遵循Gossip协议在集群内相互传播信息,信息中携带自己所属的parent节点nodeId(节点ID)。
2.当节点A接收到节点B的信息后,将会检查B的parent节点和自己的parent节点是否是同一个。
3.如果是同一个,说明两个节点已经处于同一个连通图中,节点A停止动作。
4.如果不相同,则节点A执行find操作,根据parent节点找到最终的root节点(即parent节点等于自身的节点)。
5.find操作会将parent节点更新为root节点进行路径压缩。
6.节点A判断自身和节点B的root节点是否一致,若一致说明两个节点已经处于同一个连通图中,节点A停止动作。
7.如果root节点不相同,此时由于A与B间可以相互通信,因此节点A发起对自身的root节点和B的root节点进行Union操作,例如取nodeId最小的root节点作为新连通图的root节点,并对二者的根节点进行更新。此时A与B处于同一连通图中。
7.由于Redis集群通信遵循Gossip协议,因此一段时间后,可以相互通信的节点间都有着同一个root节点。
8.如果节点的parent节点等于自己,则该节点为root节点,每个连通图中只会有一个root节点。
9.root节点定时向监控器上报自身状态。
在步骤S1200中,根据接收的节点信息确定集群中根节点的个数。
本实施例中,监控器可根据接收的节点信息确定根节点ID的个数,即为集群中根节点的个数。
在步骤S1300中,在根节点的个数大于一个的情况下,确定集群出现网络分区故障。
本实施例中,根节点的个数大于一个,意味着集群网络包括至少两个分区,即出现了网络分区故障。
本实施例中集群故障的处理方法,通过监控器获取集群的根节点信息,并通过根节点信息判断集群是否出现网络分区故障,可以在网络分区的情况下自动发现Redis集群的故障,及时发现问题,避免生产事故。
在一个例子中,在确定集群出现网络分区故障之后,该方法还包括:向集群的根节点发送合并指令,以使集群中大于一个的根节点之间进行合并操作;接收集群中大于一个的根节点的合并反馈信息;在合并反馈信息表示合并操作执行失败的情况下,确认集群出现网络分区故障。
通过上述过程可实现对网络分区故障的再次确认,以保障分区故障检测的准确性。
作为对网络分区故障再次确认的一个例子,在前述步骤9之后,还包括以下步骤:
10.若Redis监控器同一时间段只收到一个root节点上报信息,则说明网络处于正常状态,节点间可以彼此通信。继续监控。
11.若Redis监控器接收到两个及以上的root节点上报信息,则说明Redis集群可能发生了网络分区故障。
12.Redis监控器向多个root节点发出Union请求。
13.Union请求中会携带另一个节点B的地址信息,接收到Union请求的节点A首先会向节点B进行ping操作,成功则两个节点进行Union操作,取nodeId最小的root节点作为新连通图的root节点。
14.更新并返回Union成功。失败返回Union失败。
15.若所有root节点间都可以Union成功,则网络正常,此时Redis集群已更新为所有节点属于一个连通图。
16.若存在Union失败,则确认发生了网络分区。
在一个例子中,在出现网络分区故障的情况下,该方法还包括以下由监控器检测集群状态的步骤:向集群的多个节点发送状态上报指令,以使多个节点中的每个节点向监控器上报自身的状态信息,其中,状态信息包括节点标识、节点地址、节点类型、所属根节点的标识、所属主节点的信息、所对应哈希槽的标识中的至少一项;接收多个节点发送的状态信息。
在由监控器检测集群状态一个例子中,具体包括以下步骤1-4。
1.监控器通知所有root节点发生了网络分区,root节点遵循Gossip协议在可连通节点中传播当前处于网络分区模式
2.所有节点收到改信息后切换至网络分区模式,并更新parent节点信息为root节点。
3.网络分区模式下所有节点定期向Redis监控器上报状态,包含nodeId,地址,所属root节点,节点类型(Master/Slave),Master节点上报哈希槽信息,Slave上报所属Master节点的nodeId。
4.网络分区模式下,Redis集群丧失自动故障转移能力,故障发现和故障转移职责从Redis集群内移交至Redis监控器,同时监控器负责管理维护节点元数据信息。
Redis集群没有使用一致性hash,而是引入了哈希槽的概念。Redis集群中内置了16384个哈希槽,当需要在Redis集群中放置一个key-value时,redis先对key使用crc16算法算出一个结果,然后把结果对16384求余数,这样每个key都会对应一个编号在0-16383之间的哈希槽,redis会根据节点数量大致均等的将哈希槽映射到不同的节点。
在上述例子中,原本是集群中的每个节点都会维护集群元数据,互相广播更新,变为由监控器维护元数据,有利于避免在网络分区故障的情况下出现元数据不一致,避免网络分区期间数据丢失。
在一个例子中,在集群出现网络分区故障的情况下,该方法还包括以下进行重新指配主从节点的步骤:根据每个节点所属根节点的标识,确定至少两个网络连通区,其中,网络连通区与根节点一一对应;检测每个主节点和对应的从节点是否位于同一网络连通区;如果第一主节点和至少一个对应的从节点位于第一网络连通区,并且第一主节点的至少一个从节点位于第二网络连通区,则向集群发送释放指令,以清除第二网络连通区内的从节点与第一主节点之间的主从关系。
在另外一个例子中,进行主从节点指配的过程包括:在目标主节点和至少一个目标从节点位于同一分区的情况下,保持目标主节点和目标从节点不变,并且将目标主节点位于其他分区的从节点释放;或者,在目标主节点位于第一分区、目标主节点的至少两个从节点位于第二分区的情况下,将目标主节点释放,并且在目标主节点的至少两个从节点中重新指配主节点。
作为一个例子,通过以下步骤重新指配主节点。
1.如果Master节点和其所有Slave节点处于同一个网络分区,则不需改变,由监控器继续查看下一个Master节点
2.如果Master节点和Slave节点处于不同分区,查看同一分区下的Slave节点个数是否大于等于1,如果是,释放不在同一分区的Slave节点资源,继续查看下一个节点
3.如果Master节点和其下所有Slave节点处于不同分区,查看Master节点所在的分区是否有资源新起Slave节点,如果是,新加Slave节点,释放其他分区Slave资源。
4.如果Master节点和其下所有Slave节点处于不同分区并且Master所处网络分区下没有资源可以分配新的Slave,则查看是否存在某一分区下的Slave节点个数大于等于2,如果是,提升其中偏移量最大的Slave节点为Master节点,保证一主多从的拓扑结构不变。随后释放Master节点资源和其余分区Slave节点资源。
5.如果不存在某一分区下的Slave节点个数大于等于2,则查找是否存在某个Slave节点所在的分区下有资源可以新起Slave节点,如果有,新加Slave节点,提升原Slave节点为Master,然后释放资源。
6.如果以上情况都不成立,则通过邮件等方式通知管理员新增机器。
7.重新指配Slave节点完成后,监控器向集群内广播ping消息,更新全部Master节点与Slave节点信息。
在上述例子中,在网络分区期间自动重新指配主从节点,节省人力与时间,保证集群在分区状态下的可用性。
在一个例子中,在集群出现网络分区故障的情况下,该方法还包括以下故障转移的步骤:根据预设频率定期向集群的每个节点发送连通性检测指令;根据每个节点对连通性检测指令的响应结果,确定集群中的多个节点是否存在下线节点;在集群中存在下线节点并且下线节点的节点类型为主节点的情况下,从下线节点的从节点中确定出新的主节点。以及,向集群发送哈希槽清除指令,以清除下线节点和对应的哈希槽之间的对应关系;向集群发送哈希槽分配指令,以建立下线节点对应的哈希槽和偏移量最大的从节点之间的对应关系。
在上述例子中,从下线节点的从节点中确定出新的主节点,包括:向下线节点的从节点发送偏移量上报指令,以使从节点反馈自身同步数据的偏移量;从下线节点的从节点中确定偏移量最大的从节点,并向偏移量最大的从节点发送类型转换指令,以使偏移量最大的从节点转换为主节点。
作为一个例子,故障转移的过程具体包括以下步骤。
1.当监控器监控到某个节点在cluster-node-timeout时间内一直通信失败,则认为该节点存在故障,标记该节点为下线状态。
2.如果该节点为Slave节点,监控器不做处理,等待Slave节点恢复后自动与Master节点同步,全量复制Master现有数据。
3.如果该节点为Master节点,监控器向Master下所有Slave节点下发请求进行资格检查,Slave节点向监控器上报偏移量。
4.监控器选择偏移量最大的Slave节点替换Master节点,该Slave节点取消复制变为主节点。
5.执行clusterDelSlot操作撤销故障主节点负责的槽,并执行clusterAddSlot将槽委派给该Slave节点。
6.监控器向集群内广播pong消息,通知集群内所有节点该Slave节点变成Master节点,并接管了故障Master的槽信息。
在上述例子中,在网络分区期间自动进行故障转移,节省人力与时间,保证集群高可用。
在一个例子中,在一个例子中,在集群出现网络分区故障的情况下,该方法还包括以下集群恢复的步骤:在合并反馈信息表示合并操作执行成功的情况下,向集群发送网络分区恢复指令,以使集群恢复至正常运行状态。
作为一个例子,集群恢复的过程包括以下步骤。
1.当监控器监控到所有节点恢复为同一root节点时,说明网络分区恢复。
2.监控器向root节点下发网络分区恢复请求,root节点遵循Gossip协议在传播信息时携带当前处于正常状态,连通图中所有节点收到该信息后切换至正常状态。
3.监控器将故障发现与自动转移权转移至集群内自我管理。回归集群正常运行状态。
在上述例子中,在网络分区恢复后由监控器接管恢复为集群内自我管理,有利于及时恢复到正常状态。
在本实施例中,Redis监控器通过Union-Find算法来检测Redis集群中是否存在网络分区,如果存在网络分区,则将故障发现和故障转移职责从Redis集群内移交至Redis监控器。Redis监控器同时负责集群元数据维护,如果发现Master节点和Slave节点处于不可连通的网络中,将会重新指配Slave节点,以确保Slave和Master处于同一网络环境中。监控器负责监控节点故障,当有节点故障发生时,监控器负责作为领导者执行故障转移并通知所有节点。当监控器检测到网络分区恢复时,故障发现和故障转移职责会从Redis监控器移交回Redis集群,保证弹性恢复。
本实施例还提供另外一种集群故障的处理方法,由集群中的第一节点实施,包括以下步骤:接收集群中第二节点发送的父节点标识,其中,每个节点的父节点标识初始为自身标识;将第二节点发送的父节点标识与自身的父节点标识进行比较,以更新自身的父节点标识;经过至少一次更新步骤后,如果自身的父节点标识与自身标识相同,则确定自身为根节点;在自身为根节点的情况下,向监控器发送自身的节点信息。
<装置实施例>
本实施例提供了一种集群故障的处理装置,集群包括多个节点,多个节点包括至少一个主节点,主节点对应至少一个从节点,其中,装置应用于集群外的监控器,包括第一接收模块、第一处理模块和第二处理模块。
第一接收模块,用于接收集群的根节点上报的节点信息,其中,根节点通过集群中节点之间的相互通信确定。
第一处理模块,用于根据接收的节点信息确定集群中根节点的个。
第二处理模块,用于在根节点的个数大于一个的情况下,确定集群出现网络分区故障。
在一个例子中,该装置还包括复查模块,用于:向集群的根节点发送合并指令,以使集群中大于一个的根节点之间进行合并操作;接收集群中大于一个的根节点的合并反馈信息;在合并反馈信息表示合并操作执行失败的情况下,确认集群出现网络分区故障。
在一个例子中,装置还包括状态收集模块,用于:向集群的多个节点发送状态上报指令,以使多个节点中的每个节点向监控器上报自身的状态信息,其中,状态信息包括节点标识、节点地址、节点类型、所属根节点的标识、所属主节点的信息、所对应哈希槽的标识中的至少一项;接收多个节点发送的状态信息。
在一个例子中,该装置还包括主从控制模块,用于:根据每个节点所属根节点的标识,确定至少两个网络连通区,其中,网络连通区与根节点一一对应;检测每个主节点和对应的从节点是否位于同一网络连通区;如果第一主节点和至少一个对应的从节点位于第一网络连通区,并且第一主节点的至少一个从节点位于第二网络连通区,则向集群发送释放指令,以清除第二网络连通区内的从节点与第一主节点之间的主从关系。
在一个例子中,该装置还包括故障转移模块,故障转移模块进一步包括:发送单元,用于根据预设频率定期向集群的每个节点发送连通性检测指令;检测单元,用于根据每个节点对连通性检测指令的响应结果,确定集群中的多个节点是否存在下线节点;选主单元,用于在集群中存在下线节点并且下线节点的节点类型为主节点的情况下,从下线节点的从节点中确定出新的主节点。
在一个例子中,选主单元进一步包括:偏移量获取子单元,用于向下线节点的从节点发送偏移量上报指令,以使从节点反馈自身同步数据的偏移量;主从转换子单元,用于从下线节点的从节点中确定偏移量最大的从节点,并向偏移量最大的从节点发送类型转换指令,以使偏移量最大的从节点转换为主节点。
在一个例子中,该装置还包括清除模块,用于:向集群发送哈希槽清除指令,以清除下线节点和对应的哈希槽之间的对应关系;向集群发送哈希槽分配指令,以建立下线节点对应的哈希槽和偏移量最大的从节点之间的对应关系。
在一个例子中,该装置还包括恢复模块,用于:在合并反馈信息表示合并操作执行成功的情况下,向集群发送网络分区恢复指令,以使集群恢复至正常运行状态。
本实施例还提供一种集群故障的处理装置,应用于集群中的第一节点,包括:接收模块,用于接收集群中第二节点发送的父节点标识,其中,每个节点的父节点标识初始为自身标识;更新模块,用于将第二节点发送的父节点标识与自身的父节点标识进行比较,以更新自身的父节点标识;确定模块,用于经过至少一次更新步骤后,如果自身的父节点标识与自身标识相同,则确定自身为根节点;发送模块,用于在自身为根节点的情况下,向监控器发送自身的节点信息。
本实施例中集群故障的处理装置能够实现本发明方法实施例中描述的各个步骤,也能实现相同的技术效果,这里不再赘述。
<电子设备实施例>
本实施例提供一种电子设备,包括处理器和存储器,存储器存储有能够被处理器执行的机器可执行指令,处理器执行机器可执行指令以实现本发明方法实施例描述的集群故障的处理方法。
本实施例中的电子装置能够实现本发明方法实施例中描述的各个步骤,也能实现相同的技术效果,这里不再赘述。
本发明可以是***、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。
这里参照根据本发明实施例的方法、装置(***)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本发明的多个实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。对于本领域技术人员来说公知的是,通过硬件方式实现、通过软件方式实现以及通过软件和硬件结合的方式实现都是等价的。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。本发明的范围由所附权利要求来限定。
Claims (11)
1.一种集群故障的处理方法,其特征在于,所述集群包括多个节点,所述多个节点包括至少一个主节点,所述主节点对应至少一个从节点,其中,所述方法由所述集群外的监控器实施,包括:
接收所述集群的根节点上报的节点信息,其中,所述根节点通过所述集群中节点之间的相互通信确定;
根据接收的所述节点信息确定所述集群中根节点的个数;
在所述根节点的个数大于一个的情况下,确定所述集群出现网络分区故障;
在所述确定所述集群出现网络分区故障之后,所述方法还包括:
向所述集群的根节点发送合并指令,以使所述集群中大于一个的根节点之间进行合并操作;
接收所述集群中大于一个的根节点的合并反馈信息;
在所述合并反馈信息表示所述合并操作执行失败的情况下,确认所述集群出现网络分区故障。
2.根据权利要求1所述的方法,其特征在于,在所述确定所述集群出现网络分区故障之后,所述方法还包括:
向所述集群的多个节点发送状态上报指令,以使所述多个节点中的每个节点向所述监控器上报自身的状态信息,其中,所述状态信息包括节点标识、节点地址、节点类型、所属根节点的标识、所属主节点的信息、所对应哈希槽的标识中的至少一项;
接收所述多个节点发送的状态信息。
3.根据权利要求2所述的方法,其特征在于,在所述接收所述多个节点发送的状态信息后,所述方法还包括:
根据每个节点所属根节点的标识,确定至少两个网络连通区,其中,所述网络连通区与所述根节点一一对应;
检测每个主节点和对应的从节点是否位于同一网络连通区;
如果第一主节点和至少一个对应的从节点位于第一网络连通区,并且所述第一主节点的至少一个从节点位于第二网络连通区,则向所述集群发送释放指令,以清除所述第二网络连通区内的从节点与所述第一主节点之间的主从关系。
4.根据权利要求2所述的方法,其特征在于,在所述接收所述多个节点发送的状态信息后,所述方法还包括:
根据预设频率定期向所述集群的每个节点发送连通性检测指令;
根据每个节点对所述连通性检测指令的响应结果,确定所述集群中的多个节点是否存在下线节点;
在所述集群中存在下线节点并且所述下线节点的节点类型为主节点的情况下,从所述下线节点的从节点中确定出新的主节点。
5.根据权利要求4所述的方法,其特征在于,所述从所述下线节点的从节点中确定出新的主节点,包括:
向所述下线节点的从节点发送偏移量上报指令,以使所述从节点反馈自身同步数据的偏移量;
从所述下线节点的从节点中确定偏移量最大的从节点,并向所述偏移量最大的从节点发送类型转换指令,以使所述偏移量最大的从节点转换为主节点。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
向所述集群发送哈希槽清除指令,以清除所述下线节点和对应的哈希槽之间的对应关系;
向所述集群发送哈希槽分配指令,以建立所述下线节点对应的哈希槽和所述偏移量最大的从节点之间的对应关系。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述合并反馈信息表示所述合并操作执行成功的情况下,向所述集群发送网络分区恢复指令,以使所述集群恢复至正常运行状态。
8.一种集群故障的处理方法,其特征在于,由集群中的第一节点实施,包括:
接收所述集群中第二节点发送的父节点标识,其中,每个节点的父节点标识初始为自身标识;
将所述第二节点发送的父节点标识与自身的父节点标识进行比较,以更新自身的父节点标识;
经过至少一次所述更新步骤后,如果自身的父节点标识与自身标识相同,则确定自身为根节点;
在自身为根节点的情况下,向如权利要求1所述的监控器发送自身的节点信息。
9.一种集群故障的处理装置,其特征在于,所述集群包括多个节点,所述多个节点包括至少一个主节点,所述主节点对应至少一个从节点,其中,所述装置应用于所述集群外的监控器,包括:
第一接收模块,用于接收所述集群的根节点上报的节点信息,其中,所述根节点通过所述集群中节点之间的相互通信确定;
第一处理模块,用于根据接收的所述节点信息确定所述集群中根节点的个数;
第二处理模块,用于在所述根节点的个数大于一个的情况下,确定所述集群出现网络分区故障;
还包括复查模块,用于:向集群的根节点发送合并指令,以使集群中大于一个的根节点之间进行合并操作;接收集群中大于一个的根节点的合并反馈信息;在合并反馈信息表示合并操作执行失败的情况下,确认集群出现网络分区故障。
10.一种集群故障的处理装置,其特征在于,应用于集群中的第一节点,包括:
接收模块,用于接收所述集群中第二节点发送的父节点标识,其中,每个节点的父节点标识初始为自身标识;
更新模块,用于将所述第二节点发送的父节点标识与自身的父节点标识进行比较,以更新自身的父节点标识;
确定模块,用于经过至少一次所述更新步骤后,如果自身的父节点标识与自身标识相同,则确定自身为根节点;
发送模块,用于在自身为根节点的情况下,向如权利要求1所述的监控器发送自身的节点信息。
11.一种电子设备,其特征在于,包括存储器和处理器,所述存储器存储有可执行命令,所述处理器执行所述可执行命令时,实现如权利要求1-8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010477541.9A CN111708668B (zh) | 2020-05-29 | 2020-05-29 | 集群故障的处理方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010477541.9A CN111708668B (zh) | 2020-05-29 | 2020-05-29 | 集群故障的处理方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111708668A CN111708668A (zh) | 2020-09-25 |
CN111708668B true CN111708668B (zh) | 2023-07-07 |
Family
ID=72538409
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010477541.9A Active CN111708668B (zh) | 2020-05-29 | 2020-05-29 | 集群故障的处理方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111708668B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113810216B (zh) * | 2020-12-31 | 2024-06-18 | 京东科技控股股份有限公司 | 一种集群的故障切换方法、装置及电子设备 |
CN113315657B (zh) * | 2021-05-26 | 2023-11-24 | ***数智科技有限公司 | 基于并查集的电信传输网络客户影响分析方法和*** |
CN115037595B (zh) * | 2022-04-29 | 2024-04-23 | 北京华耀科技有限公司 | 网络恢复方法、装置、设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012209625A (ja) * | 2011-03-29 | 2012-10-25 | Nec Corp | クラスタシステムの結線作業の煩雑さを軽減するシステム及び方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6877107B2 (en) * | 2001-07-05 | 2005-04-05 | Softwired Ag | Method for ensuring operation during node failures and network partitions in a clustered message passing server |
US9098439B2 (en) * | 2012-01-05 | 2015-08-04 | International Business Machines Corporation | Providing a fault tolerant system in a loosely-coupled cluster environment using application checkpoints and logs |
CN102594596B (zh) * | 2012-02-15 | 2014-08-20 | 华为技术有限公司 | 识别集群网络中可用分区的方法、装置及集群网络*** |
US9146820B2 (en) * | 2013-04-29 | 2015-09-29 | King Fahd University Of Petroleum And Minerals | WSAN simultaneous failures recovery method |
US10320702B2 (en) * | 2015-09-30 | 2019-06-11 | Veritas Technologies, LLC | Input/output fencing optimization |
CN107526659B (zh) * | 2016-06-21 | 2021-02-12 | 伊姆西Ip控股有限责任公司 | 用于失效备援的方法和设备 |
CN106656624B (zh) * | 2017-01-04 | 2019-05-14 | 合肥康捷信息科技有限公司 | 基于Gossip通信协议和Raft选举算法的优化方法 |
US10237346B2 (en) * | 2017-02-08 | 2019-03-19 | Vmware, Inc. | Maintaining partition-tolerant distributed metadata |
US10719417B2 (en) * | 2018-01-30 | 2020-07-21 | EMC IP Holding Company, LLC | Data protection cluster system supporting multiple data tiers |
CN109040212B (zh) * | 2018-07-24 | 2021-09-21 | 苏州科达科技股份有限公司 | 设备接入服务器集群方法、***、设备及存储介质 |
-
2020
- 2020-05-29 CN CN202010477541.9A patent/CN111708668B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012209625A (ja) * | 2011-03-29 | 2012-10-25 | Nec Corp | クラスタシステムの結線作業の煩雑さを軽減するシステム及び方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111708668A (zh) | 2020-09-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111708668B (zh) | 集群故障的处理方法、装置及电子设备 | |
CN109729111B (zh) | 用于管理分布式***的方法、设备和计算机程序产品 | |
CN109683826B (zh) | 用于分布式存储***的扩容方法和装置 | |
US9367261B2 (en) | Computer system, data management method and data management program | |
JP2018045715A (ja) | 複製されたデータインスタンスのためのフェイルオーバーおよび復旧 | |
US10462250B2 (en) | Distributed caching cluster client configuration | |
US9960964B2 (en) | System, method and apparatus to manage services in a network | |
US9262323B1 (en) | Replication in distributed caching cluster | |
US20190075084A1 (en) | Distributed Lock Management Method, Apparatus, and System | |
CN107404509B (zh) | 分布式服务配置***及信息管理方法 | |
US20130139178A1 (en) | Cluster management system and method | |
CN109144748B (zh) | 一种服务器、分布式服务器集群及其状态驱动方法 | |
CN112083889A (zh) | 数据迁移方法、装置、设备及可读存储介质 | |
CN105959078B (zh) | 一种集群时间同步方法、集群及时间同步*** | |
JPWO2014076838A1 (ja) | 仮想マシン同期システム | |
CN104850416A (zh) | 一种升级***、方法、装置及云计算节点 | |
US10659289B2 (en) | System and method for event processing order guarantee | |
WO2017071384A1 (zh) | 报文处理的方法及装置 | |
US20180260466A1 (en) | Identifier based data replication | |
CN106254814B (zh) | 一种会议恢复的方法、业务管理中心及*** | |
CN111104250B (zh) | 用于数据处理的方法、设备和计算机可读介质 | |
CN111147312A (zh) | 资源配置的管理方法及装置、资源配置缓存的管理方法及装置、配置管理*** | |
EP3570169A1 (en) | Method and system for processing device failure | |
JP2010244463A (ja) | イベント検出制御方法及びシステム | |
CN108206843B (zh) | 一种集群访问方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |