CN117061519A - 目标集群的主节点竞选方法、装置以及电子设备 - Google Patents

目标集群的主节点竞选方法、装置以及电子设备 Download PDF

Info

Publication number
CN117061519A
CN117061519A CN202311041593.1A CN202311041593A CN117061519A CN 117061519 A CN117061519 A CN 117061519A CN 202311041593 A CN202311041593 A CN 202311041593A CN 117061519 A CN117061519 A CN 117061519A
Authority
CN
China
Prior art keywords
node
election
cluster
nodes
sequence
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
CN202311041593.1A
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.)
Beijing Kingsoft Cloud Network Technology Co Ltd
Original Assignee
Beijing Kingsoft Cloud Network Technology Co Ltd
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 Beijing Kingsoft Cloud Network Technology Co Ltd filed Critical Beijing Kingsoft Cloud Network Technology Co Ltd
Priority to CN202311041593.1A priority Critical patent/CN117061519A/zh
Publication of CN117061519A publication Critical patent/CN117061519A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
    • H04L67/61Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources taking into account QoS or priority requirements

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本申请涉及一种目标集群的主节点竞选方法、装置以及电子设备。该方法包括:在目标集群中,在当前子节点的主节点异常的情况下,获取集群竞选序列,其中,目标集群内包括多个主节点和多个仲裁节点,每一个主节点对应有多个子节点,集群竞选序列中设置有每一个子节点竞选主节点的顺序;按照集群竞选序列中的顺序,向目标集群内的仲裁节点和/或主节点发起竞选请求,其中,竞选请求用于请求竞选当前子节点为主节点;在接收到的竞选回复消息的回复数量与发起的竞选请求的竞选数量之间的比值大于预定比例的情况下,确定当前子节点为主节点。本申请解决了Redis数据库的集群服务一直处于不可用状态的技术问题。

Description

目标集群的主节点竞选方法、装置以及电子设备
技术领域
本申请涉及数据库领域,尤其涉及一种目标集群的主节点竞选方法、装置以及电子设备。
背景技术
远程字典服务Redis数据库为一种单线程的内存键值对(key-value,kv)数据库服务,被广泛应用在互联网服务中。Redis cluster集群为Redis数据库的集群服务,集群内有多个节点,包括主节点、子节点与仲裁节点等。如果集群中有主节点在同一时间异常,则会有多个子节点在同一时间发起竞选请求,在此情况下,由于竞选的子节点多,因此每一个子节点收到的竞选回复消息都比较少,每一个子节点都无法竞选成为主节点,则集群一直处于不可用状态。
也就是说,现有技术中,Redis数据库的集群服务可能出现无法竞选出主节点而造成的集群一直处于不可用状态的问题。
发明内容
本申请提供了一种目标集群的主节点竞选方法、装置以及电子设备,以解决Redis数据库的集群服务一直处于不可用状态的技术问题。
第一方面,本申请提供了一种目标集群的主节点竞选方法,应用于当前子节点,包括:在目标集群中,在上述当前子节点的主节点异常的情况下,获取集群竞选序列,其中,上述目标集群内包括多个主节点和多个仲裁节点,每一个上述主节点对应有多个子节点,上述集群竞选序列中设置有每一个上述子节点竞选主节点的顺序;按照上述集群竞选序列中的顺序,向上述目标集群内的仲裁节点和/或主节点发起竞选请求,其中,上述竞选请求用于请求竞选上述当前子节点为主节点;在接收到的竞选回复消息的回复数量与发起的竞选请求的竞选数量之间的比值大于预定比例的情况下,确定所述当前子节点为主节点。
第二方面,本申请提供了一种目标集群的主节点竞选方法,应用于主节点或仲裁节点,包括:在目标集群中,接收当前子节点发送的竞选请求,其中,上述竞选请求为上述当前子节点的主节点异常的情况下,上述当前子节点按照集群竞选序列发起的请求,上述竞选请求用于请求竞选上述当前子节点为主节点,上述目标集群内包括多个主节点与多个仲裁节点,每一个上述主节点对应有多个子节点,上述集群竞选序列中设置有每一个上述子节点竞选主节点的顺序;根据上述当前子节点的当前状态确定是否发起竞选回复消息,其中,上述竞选回复消息用于表示同意上述当前子节点竞选为主节点。
第三方面,本申请提供了一种目标集群的主节点竞选装置,应用于当前子节点,包括:获取模块,用于在目标集群中,在上述当前子节点的主节点异常的情况下,获取集群竞选序列,其中,上述目标集群内包括多个主节点和多个仲裁节点,每一个上述主节点对应有多个子节点,上述集群竞选序列中设置有每一个上述子节点竞选主节点的顺序;第一发送模块,用于按照上述集群竞选序列中的顺序,向上述目标集群内的仲裁节点和/或主节点发起竞选请求,其中,上述竞选请求用于请求竞选上述当前子节点为主节点;确定模块,用于在接收到的竞选回复消息的回复数量与发起的竞选请求的竞选数量之间的比值大于预定比例的情况下,确定所述当前子节点为主节点。
第四方面,本申请提供了一种目标集群的主节点竞选装置,应用于主节点或仲裁节点,包括:接收模块,用于在目标集群中,接收当前子节点发送的竞选请求,其中,上述竞选请求为上述当前子节点的主节点异常的情况下,上述当前子节点按照集群竞选序列发起的请求,上述竞选请求用于请求竞选上述当前子节点为主节点,上述目标集群内包括多个主节点与多个仲裁节点,每一个上述主节点对应有多个子节点,上述集群竞选序列中设置有每一个上述子节点竞选主节点的顺序;确定模块,用于根据上述当前子节点的当前状态确定是否发起竞选回复消息,其中,上述竞选回复消息用于表示同意上述当前子节点竞选为主节点。
第五方面,本申请提供了一种电子设备,包括:至少一个通信接口;与上述至少一个通信接口相连接的至少一个总线;与上述至少一个总线相连接的至少一个处理器;与上述至少一个总线相连接的至少一个存储器,其中,上述存储器存储有计算机程序,上述处理器被配置为执行上述计算机程序时实现上述任一项上述的目标集群的主节点竞选方法。
第六方面,本申请还提供了一种计算机存储介质,存储有计算机可执行指令,上述计算机可执行指令用于执行本申请上述任一项上述的目标集群的主节点竞选方法。
本申请实施例提供的上述技术方案与现有技术相比具有如下优点:本申请实施例提供的该方法,在子节点的主节点异常的情况下,子节点可以按照集群竞选序列中的顺序来竞选,即使有多个主节点同时异常,也不会产生多个子节点同时竞选的情况,因此,每一次的竞选,只有一个子节点竞选,其他主节点和/或仲裁节点可以判断是否给该子节点投票,避免了竞选的子节点太多而一直选不出主节点,集群一直处于不可用状态的问题。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1为本申请实施例提供的一种目标集群的主节点竞选方法的流程图;
图2为本申请实施例提供的一种目标集群的主节点竞选方法的节点关系图;
图3为本申请实施例提供的一种目标集群的主节点竞选方法的可用区示意图;
图4为本申请实施例提供的一种目标集群的主节点竞选方法的集群竞选序列示意图;
图5为本申请实施例提供的另一种目标集群的主节点竞选方法的流程图;
图6为本申请实施例提供的又一种目标集群的主节点竞选方法的流程图;
图7为本申请实施例提供的一种目标集群的主节点竞选方法的发送竞选请求示意图;
图8为本申请实施例提供的又一种目标集群的主节点竞选方法的流程图;
图9为本申请实施例提供的又一种目标集群的主节点竞选方法的流程图;
图10为本申请实施例提供的一种目标集群的主节点竞选装置的结构示意图;
图11为本申请实施例提供的另一种目标集群的主节点竞选装置的结构示意图;
图12为本申请实施例提供的一种电子设备示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。当然,它们仅仅为示例,并且目的不在于限制本发明。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。
为了解决现有技术中Redis数据库的集群服务一直处于不可用状态的技术问题,本申请提供了一种目标集群的主节点竞选方法,能实现保持Redis数据库的集群服务的可用性的效果。
图1为本申请实施例提供的一种目标集群的主节点竞选方法的流程图。目标集群的主节点竞选方法应用在当前子节点。如图1所示,上述目标集群的主节点竞选方法包括:
S102,在目标集群中,在当前子节点的主节点异常的情况下,获取集群竞选序列,其中,目标集群内包括多个主节点和多个仲裁节点,每一个主节点对应有多个子节点,集群竞选序列中设置有每一个子节点竞选主节点的顺序;
S104,按照集群竞选序列中的顺序,向目标集群内的仲裁节点和/或主节点发起竞选请求,其中,竞选请求用于请求竞选当前子节点为主节点;
S106,在接收到的竞选回复消息的回复数量与发起的竞选请求的竞选数量之间的比值大于预定比例的情况下,确定所述当前子节点为主节点。
本申请中的目标集群可以为Redis数据库集群。集群中可以包括多个主节点master节点,每一个主节点对应多个子节点slave节点,集群中还包括了多个仲裁节点,仲裁节点为用于识别并解决分布式事务冲突的节点。图2为一种集群中节点间关系的示意图。图2中仅示出了集群中的部分节点。主节点1下有子节点1和子节点2,主节点2下有子节点3和子节点4,此外还有仲裁节点1。图2中的实线表示隶属关系且可以通讯,主节点1下有子节点1和子节点2隶属于主节点1。虚线表示可以进行通讯,但是没有隶属关系。
上述主节点与子节点中,属于同一个主节点的多个子节点中的所存储的数据库数据是相同的,子节点与主节点存储的数据也是相同的。需要说明的是,此处的相同指存储的数据是统一的,如子节点包括了kv1数据(kv表示一个对键值对),则子节点隶属的主节点,以及该主节点下的其他子节点,都应包括kv1,而并不是一定限制每一个节点中的所有数据一模一样。例如,图2中,主节点1、子节点1和子节点2包含的数据库的数据是相同的,主节点2、子节点3和子节点4包含的数据库的数据是相同的,两者各包含一半的数据库的数据。例如仅有图2的主节点1和主节点2,那么,主节点1和主节点2各包括数据库的一半数据。如果有3个主节点,则各包含数据库数据的三分之一。
本申请中,可以将一个主节点和隶属于该主节点的子节点视为一个节点组,集群中的每一个主节点都对应一个节点组,节点组中包括了该主节点和主节点下的子节点。一个节点组的主节点和子节点可以处于相同的可用区或者不同的可用区,一个可用区可以为一个机房,一个公司等。例如,以两个可用区为例,如图3所示,图3中两个可用区,分别为区域1和区域2,其中,主节点和子节点1位于区域1中,子节点2位于区域2中。此外,不同的节点组中的节点可以位于一个可用区中,如节点组1的主节点和节点组2的主节点位于一个可用区中。
上述异常可能为多种情况造成的,如停电,机器故障等,都可能产生异常,异常可以表现为节点无法再提供网络服务,节点下线,节点无响应等。
如果主节点异常,则需要尽快从主节点的节点组中的子节点中竞选出新的主节点,从而保证数据库集群的可用性。
每一个主节点和子节点在集群竞选序列中对应一个顺序。顺序的前后决定了哪一个子节点能够先发起竞选请求。图4为示例性的集群竞选序列的示意图。对于一个节点组中的节点,如果主节点异常,则多个子节点都可以发起竞选请求,但是也要遵循集群竞选序列中的顺序。与异常的主节点位于同一个可用区的子节点的顺序相比于与异常的主节点位于不同的可用区的子节点的顺序靠前。图4中的箭头表示集群竞选序列中的顺序。一个主节点和对应的子节点构成一个节点组,一个主节点1对应的节点组相比于主节点2对应的节点组的竞选顺序靠前。子节点1与子节点2的竞选顺序根据是否是主节点1位于同一个可用区确定,也有先后顺序。同一个可用区的子节点竞选顺序更靠前。子节点3与子节点4的竞选顺序根据是否是主节点2位于同一个可用区确定,也有先后顺序。
当轮到某一个子节点进行竞选时,子节点向目标集群内的仲裁节点和/或主节点发起竞选请求,然后根据接收到的竞选回复小的回复数量占发起的竞选请求的竞选数量的比例来查看是否能够竞选成为主节点。比例太低则不能竞选为主节点。比例高,则可以竞选成为主节点。预定比例可以为设置的值,如50%,表示超过50%的主节点和/或仲裁节点回复竞选回复消息,则子节点可以竞选为主节点,否则子节点不可以竞选为主节点。
本申请实施例提供的该方法,在子节点的主节点异常的情况下,子节点可以按照集群竞选序列中的顺序来竞选,即使有多个主节点同时异常,也不会产生多个子节点同时竞选的情况,因此,每一次的竞选,只有一个子节点竞选,其他主节点和/或仲裁节点可以判断是否给该子节点投票,避免了竞选的子节点太多而一直选不出主节点,集群一直处于不可用状态的问题。
作为一种可选的示例,如图5所示,按照集群竞选序列中的顺序,向目标集群内的仲裁节点和/或主节点发起竞选请求包括:
S502-1,在当前子节点在集群竞选序列中的顺序为第一位的情况下,向目标集群内的仲裁节点和/或主节点发起竞选请求;或者
S502-2,在所述当前子节点在所述集群竞选序列中的顺序为非第一位的情况下,若所述集群竞选序列中位于所述当前子节点前的其他子节点处于竞选成功状态或者处于竞选等待状态,则向所述目标集群内的仲裁节点和/或主节点发起所述竞选请求,若所述其他子节点中任意一个子节点处于竞选状态,则等待发起所述竞选请求,其中,所述竞选等待状态为子节点竞选失败后等待的状态,所述竞选状态表示子节点正在竞选。
本实施例中,要根据当前子节点在集群竞选序列中的顺序来决定什么时候由当前子节点进行竞选。如果当前子节点在集群竞选序列中的顺序是第一位的,则在当前子节点的主节点异常时,可以由当前子节点直接发送竞选请求参与竞选。而如果当前子节点在集群竞选序列中的顺序并不是第一位的,此时需要查看是否已经到了当前子节点竞选的时候,如果有当前子节点之外的子节点在竞选,则当前子节点不能竞选。集群竞选序列可以记录每一个子节点的状态,状态分为竞选状态、竞选等待状态和竞选成功状态,竞选状态表示正在竞选,竞选等待状态表示没有在竞选,竞选等待状态可能为主节点没有异常,因此不需要竞选,也有可能为竞选失败,因此处于等待下次竞选的状态,竞选成功状态表示已经竞选过而且竞选已经成功。如果当前子节点之前的子节点没有处于竞选状态的子节点,则当前子节点可以置于竞选状态并开始竞选。如果当前子节点之前的子节点有任意一个子节点处于竞选状态,则当前子节点要处于竞选等待状态,等待集群竞选序列中靠前的子节点竞选完成后当前子节点才能开始竞选。例如,如图4中,子节点1为竞选成功状态,子节点2为竞选等待状态,子节点3为竞选状态,则子节点3可以进行竞选。子节点3竞选完成后,置于竞选成功状态(成功)或者竞选等待状态(失败)。
作为一种可选的示例,如图6所示,在按照集群竞选序列中的顺序,向目标集群内的仲裁节点和/或主节点发起竞选请求之前,上述方法还包括:
S602,根据当前子节点中存储的数据计算出一个数据范围;
S604,根据当前子节点的数据范围的大小与其他子节点的数据范围的大小确定当前子节点在集群竞选序列中的顺序。
本实施例中,主节点和主节点下的子节点构成一个节点组,每一个节点组中的数据库数据是相同的。因此,一个节点组根据数据库数据计算出的数据范围是相同的。而不同的节点组由于存储的数据库数据并不相同,因此计算出的数据范围是不同的。
根据数据范围的大小决定节点在集群竞选序列中的顺序,可以为数据范围的最大值越大则节点在集群竞选序列中的顺序越靠前,或者数据范围的最大值越大则节点在集群竞选序列中的顺序越靠后,或者数据范围的最大值与最小值的差越大则节点在集群竞选序列中的顺序越靠前,或者数据范围的最大值与最小值的差越大则节点在集群竞选序列中的顺序越靠后。
通过数据范围确定出集群竞选序列后,每一个子节点可以在主节点异常的情况下,按照集群竞选序列中的顺序来竞选。
作为一种可选的示例,按照集群竞选序列中的顺序,向目标集群内的仲裁节点和/或主节点发起竞选请求包括:向每一个主节点和/或仲裁节点发起竞选请求;或者从主节点和/或仲裁节点中选择出多个节点,向选择出的每一个节点发送竞选请求。
本实施例中,发送竞选请求时,可以向所有的正常的主节点和正常的仲裁节点发送竞选请求,也可以从正常的主节点和正常的仲裁节点中,选择出部分节点,然后向选择出的部分节点发送竞选请求。正常的主节点和正常的仲裁节点表示节点在线,可以提供服务,异常的主节点由于已经不能提供服务,因此不会向异常的主节点或者异常的仲裁节点发送竞选请求。需要说明的是,主节点和仲裁节点中,主节点可能全部异常,则此时可以向仲裁节点发送竞选请求,而没有主节点可以发送竞选请求。在存在正常的主节点的情况下,也可以向正常的主节点发送竞选请求,而不向仲裁节点发送竞选请求。一般情况下既存在正常的主节点也存在仲裁节点,可以向两者发送竞选请求。
例如,如图7所示,当前子节点向正常的主节点1和正常的仲裁节点1发送竞选请求,而仲裁节点1回复有竞选回复消息,主节点1没有回复竞选回复消息。主节点2由于异常,因此当前子节点不会向其发送竞选请求。
作为一种可选的示例,在接收到的竞选回复消息的回复数量与发起的竞选请求的竞选数量之间的比值大于预定比例的情况下,确定所述当前子节点为主节点包括:在向主节点和/或仲裁节点发送竞选请求后,在预定时长内统计接收到的竞选回复消息的回复数量,其中,每一个竞选请求对应一个超时时长,在超时时长内收到竞选回复消息的情况下,确定接收到竞选回复消息;将预定时长内的回复数量与发起的竞选请求的竞选数量做比,得到回复数量占竞选数量的比例;在比例大于预定比例的情况下,确定当前子节点为主节点。
本实施例中,当前子节点会向多个主节点和/或仲裁节点发送竞选请求,每一个竞选请求会对应一个超时时长。如果一个竞选请求发送后,超过超时时长而没有收到竞选回复消息,则认为不会收到竞选回复消息。在超时时长内收到竞选回复消息,则竞选回复消息有效。当前子节点发送竞选消息要在预定时长内发送,如果超出预定时长,则再发送的竞选消息无效,超出预定时长接收到的竞选回复消息无效。
作为一种可选的示例,在确定当前子节点为主节点之后,上述方法还包括:向第一子节点中的正常的子节点发送通知消息,其中,第一子节点为主节点异常前,与当前子节点对应同一个主节点的其他子节点,通知消息用于通知第一子节点,当前子节点竞选为了新的主节点。
本实施例中,当前子节点竞选为新的主节点后,要通知同组的其他子节点,其他子节点收到消息后,会确定当前子节点已经成为了主节点。如图4中的主节点1异常,子节点1竞选成功,则子节点1成为了新的主节点,主节点下有子节点2。主节点1由于异常,可能会下线。如果主节点1再上线,则可以重新加入到子节点1(新的主节点)与子节点2的节点组,作为子节点,或者竞争成为主节点。
图8为本申请实施例提供的另一种目标集群的主节点竞选方法的流程图,目标集群的主节点竞选方法应用在主节点或仲裁节点。如图8所示,上述目标集群的主节点竞选方法包括:
S802,在目标集群中,接收当前子节点发送的竞选请求,其中,竞选请求为当前子节点的主节点异常的情况下,当前子节点按照集群竞选序列发起的请求,竞选请求用于请求竞选当前子节点为主节点,目标集群内包括多个主节点与多个仲裁节点,每一个主节点对应有多个子节点,集群竞选序列中设置有每一个子节点竞选主节点的顺序;
S804,根据当前子节点的当前状态确定是否发起竞选回复消息,其中,竞选回复消息用于表示同意当前子节点竞选为主节点。
本实施例中,主节点或仲裁节点收到当前子节点的竞选请求之后,要决定是否给当前子节点发送竞选回复消息。是否发送竞选回复消息要根据当前子节点的当前状态确定。
根据当前子节点的当前状态确定是否发起竞选回复消息包括:确定集群竞选序列中,位于当前子节点之前的其他子节点的竞选状态;在其他子节点处于竞选成功状态或者处于竞选等待状态的情况下,且在预定时长内仅接收到当前子节点的竞选请求的情况下,向当前子节点发送竞选回复消息。
也就是说,本实施例中,如果集群竞选序列中当前子节点之前有其他子节点处于竞选状态,如图4中的子节点4,之前存在子节点3处于竞选状态,则如果子节点4也发送了竞选请求,主节点与仲裁节点不会向子节点4返回竞选回复消息。如果一个节点组中有一个字节点已经发起了竞选请求,则如果有该节点组中的其他节点也发起竞选请求,主节点与仲裁节点也不会发送竞选回复消息。只有当前子节点在集群竞选序列中处于发送竞选消息的顺序,且预定时长内,没有接收到与当前子节点属于同组的其他子节点的竞选消息的情况下,才会给当前子节点发送竞选回复消息。
子节点发起竞选的触发条件可以有多种,下面结合示例进行说明:
集群内可以上设置集群任务clustercron事件,每次触发事件,子节点都会检查是否应该切换。通过ClusterHandleSlaveFailover命令进行切换。
集群内可以设置故障转移事件cluster failover,表示主节点故障要重新竞选主节点。发送clusterSendMFStart给子节点,子节点发送clustermsg_type_Mfstart到主节点,主节点停止写入pauseclient,并发送ping包给子节点更新自己写入的新的内容offset到子节点。子节点开始在beforesleep事件中操作server.cluster->mf_master_offset,cluster_todo_handle_manualf ailvoer,从而操作主节点睡眠或下线。当判断偏移量足够mf_can_start=1时,通过beforesleep事件中的clusterHandleSlaveFailover来启动竞选。
如图9所示,在竞选时,如果子节点已经符合了竞选条件,但是在一定时间内没有参与竞选,如在160秒内没有参与竞选,则不能自动竞选。如果开始了竞选,但是竞选时间到达一定时间,如到达30秒还没有竞选成功,则重置竞选时间并让子节点等待,等待已经时间后再竞选。等待的时间为500+0-500+rank秒。rank为子节点在集群竞选序列中的排序顺序。子节点竞选时,要更新集群竞选序列中的信息。更新信息后,开始竞选,发送竞选请求给主节点和/或仲裁节点,从而接收竞选回复消息。如果竞选后恢复消息超过了50%,则竞选成功,向同组其他子节点同步消息。主节点与仲裁节点在收到竞选请求后,首先看自身是否为主节点或仲裁节点,然后查看发送竞选请求的当前子节点所在的节点组中的子节点,是否在一定时间内已经发起了竞选请求,时间可以为30秒,如果30秒内已经收到了同一节点组内的节点发起的竞选请求,则本次当前子节点的竞选请求不回复。此外,还要查看集群竞选序列中是否轮到当前子节点进行竞选。最后,也要查看该轮投票中,主节点与仲裁节点已经投票过了。当各项条件都符合的情况下,主节点与仲裁节点可以给当前子节点发送竞选回复消息。此外,还可以设置强制竞选条件。如果集群不可用的时长超过了一定的时长,则当前子节点即使没有接收到足够的竞选回复消息,也可以强制竞选为主节点。
图10为本申请实施例提供的一种目标集群的主节点竞选装置的结构示意图。如图10所示,上述目标集群的主节点竞选装置包括:
获取模块1002,用于在目标集群中,在当前子节点的主节点异常的情况下,获取集群竞选序列,其中,目标集群内包括多个主节点和多个仲裁节点,每一个主节点对应有多个子节点,集群竞选序列中设置有每一个子节点竞选主节点的顺序;
第一发送模块1004,用于按照集群竞选序列中的顺序,向目标集群内的仲裁节点和/或主节点发起竞选请求,其中,竞选请求用于请求竞选当前子节点为主节点;
确定模块1006,用于在接收到的竞选回复消息的回复数量与发起的竞选请求的竞选数量之间的比值大于预定比例的情况下,确定所述当前子节点为主节点。
图11为本申请实施例提供的另一种目标集群的主节点竞选装置的结构示意图。如图11所示,上述目标集群的主节点竞选装置包括:
接收模块1102,用于在目标集群中,接收当前子节点发送的竞选请求,其中,竞选请求为当前子节点的主节点异常的情况下,当前子节点按照集群竞选序列发起的请求,竞选请求用于请求竞选当前子节点为主节点,目标集群内包括多个主节点与多个仲裁节点,每一个主节点对应有多个子节点,集群竞选序列中设置有每一个子节点竞选主节点的顺序;
确定模块1104,用于根据当前子节点的当前状态确定是否发起竞选回复消息,其中,竞选回复消息用于表示同意当前子节点竞选为主节点。
本申请中的目标集群可以为Redis数据库集群。集群中可以包括多个主节点master节点,每一个主节点对应多个子节点slave节点,集群中还包括了多个仲裁节点,仲裁节点为用于识别并解决分布式事务冲突的节点。图2为一种集群中节点间关系的示意图。图2中仅示出了集群中的部分节点。主节点1下有子节点1和子节点2,主节点2下有子节点3和子节点4,此外还有仲裁节点1。图2中的实线表示隶属关系且可以通讯,主节点1下有子节点1和子节点2隶属于主节点1。虚线表示可以进行通讯,但是没有隶属关系。
上述主节点与子节点中,属于同一个主节点的多个子节点中的所存储的数据库数据是相同的,子节点与主节点存储的数据也是相同的。需要说明的是,此处的相同指存储的数据是统一的,如子节点包括了kv1数据(kv表示一个对键值对),则子节点隶属的主节点,以及该主节点下的其他子节点,都应包括kv1,而并不是一定限制每一个节点中的所有数据一模一样。例如,图2中,主节点1、子节点1和子节点2包含的数据库的数据是相同的,主节点2、子节点3和子节点4包含的数据库的数据是相同的,两者各包含一半的数据库的数据。例如仅有图2的主节点1和主节点2,那么,主节点1和主节点2各包括数据库的一半数据。如果有3个主节点,则各包含数据库数据的三分之一。
本申请中,可以将一个主节点和隶属于该主节点的子节点视为一个节点组,集群中的每一个主节点都对应一个节点组,节点组中包括了该主节点和主节点下的子节点。一个节点组的主节点和子节点可以处于相同的可用区或者不同的可用区,一个可用区可以为一个机房,一个公司等。例如,以两个可用区为例,如图3所示,图3中两个可用区,分别为区域1和区域2,其中,主节点和子节点1位于区域1中,子节点2位于区域2中。此外,不同的节点组中的节点可以位于一个可用区中,如节点组1的主节点和节点组2的主节点位于一个可用区中。
上述异常可能为多种情况造成的,如停电,机器故障等,都可能产生异常,异常可以表现为节点无法再提供网络服务,节点下线,节点无响应等。
如果主节点异常,则需要尽快从主节点的节点组中的子节点中竞选出新的主节点,从而保证数据库集群的可用性。
每一个主节点和子节点在集群竞选序列中对应一个顺序。顺序的前后决定了哪一个子节点能够先发起竞选请求。图4为示例性的集群竞选序列的示意图。对于一个节点组中的节点,如果主节点异常,则多个子节点都可以发起竞选请求,但是也要遵循集群竞选序列中的顺序。与异常的主节点位于同一个可用区的子节点的顺序相比于与异常的主节点位于不同的可用区的子节点的顺序靠前。图4中的箭头表示集群竞选序列中的顺序。一个主节点和对应的子节点构成一个节点组,一个主节点1对应的节点组相比于主节点2对应的节点组的竞选顺序靠前。子节点1与子节点2的竞选顺序根据是否是主节点1位于同一个可用区确定,也有先后顺序。子节点3与子节点4的竞选顺序根据是否是主节点2位于同一个可用区确定,也有先后顺序。
当轮到某一个子节点进行竞选时,子节点向目标集群内的仲裁节点和/或主节点发起竞选请求,然后根据接收到的竞选回复小的回复数量占发起的竞选请求的竞选数量的比例来查看是否能够竞选成为主节点。比例太低则不能竞选为主节点。比例高,则可以竞选成为主节点。预定比例可以为设置的值,如50%,表示超过50%的主节点和/或仲裁节点回复竞选回复消息,则子节点可以竞选为主节点,否则子节点不可以竞选为主节点。
本申请实施例提供的该方法,在子节点的主节点异常的情况下,子节点可以按照集群竞选序列中的顺序来竞选,即使有多个主节点同时异常,也不会产生多个子节点同时竞选的情况,因此,每一次的竞选,只有一个子节点竞选,其他主节点和/或仲裁节点可以判断是否给该子节点投票,避免了竞选的子节点太多而一直选不出主节点,集群一直处于不可用状态的问题。
本实施例的其他示例请参见上述示例,在此不再赘述。
如图12所示,本申请实施例提供了一种电子设备,包括处理器111、通信接口112、存储器113和通信总线114,其中,处理器111,通信接口112,存储器113通过通信总线114完成相互间的通信,
存储器113,用于存放计算机程序;
在本申请一个实施例中,处理器111,用于执行存储器113上所存放的程序时,实现前述任意一个方法实施例提供的目标集群的主节点竞选方法。
本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现如前述任意一个方法实施例提供目标集群的主节点竞选方法的步骤。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
应理解的是,文中使用的术语仅出于描述特定示例实施方式的目的,而无意于进行限制。除非上下文另外明确地指出,否则如文中使用的单数形式“一”、“一个”以及“所述”也可以表示包括复数形式。术语“包括”、“包含”、“含有”以及“具有”是包含性的,并且因此指明所陈述的特征、步骤、操作、元件和/或部件的存在,但并不排除存在或者添加一个或多个其它特征、步骤、操作、元件、部件、和/或它们的组合。文中描述的方法步骤、过程、以及操作不解释为必须要求它们以所描述或说明的特定顺序执行,除非明确指出执行顺序。还应当理解,可以使用另外或者替代的步骤。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。

Claims (12)

1.一种目标集群的主节点竞选方法,其特征在于,应用于当前子节点,包括:
在目标集群中,在所述当前子节点的主节点异常的情况下,获取集群竞选序列,其中,所述目标集群内包括多个主节点和多个仲裁节点,每一个所述主节点对应有多个子节点,所述集群竞选序列中设置有每一个所述子节点竞选主节点的顺序;
按照所述集群竞选序列中的顺序,向所述目标集群内的仲裁节点和/或主节点发起竞选请求,其中,所述竞选请求用于请求竞选所述当前子节点为主节点;
在接收到的竞选回复消息的回复数量与发起的竞选请求的竞选数量之间的比值大于预定比例的情况下,确定所述当前子节点为主节点。
2.根据权利要求1所述的方法,其特征在于,所述按照所述集群竞选序列中的顺序,向所述目标集群内的仲裁节点和/或主节点发起竞选请求包括:
在所述当前子节点在所述集群竞选序列中的顺序为第一位的情况下,向所述目标集群内的仲裁节点和/或主节点发起所述竞选请求;或者,
在所述当前子节点在所述集群竞选序列中的顺序为非第一位的情况下,若所述集群竞选序列中位于所述当前子节点前的其他子节点处于竞选成功状态或者处于竞选等待状态,则向所述目标集群内的仲裁节点和/或主节点发起所述竞选请求,若所述其他子节点中任意一个子节点处于竞选状态,则等待发起所述竞选请求,其中,所述竞选等待状态为子节点竞选失败后等待的状态,所述竞选状态表示子节点正在竞选。
3.根据权利要求1所述的方法,其特征在于,在按照所述集群竞选序列中的顺序,向所述目标集群内的仲裁节点和/或主节点发起竞选请求之前,所述方法还包括:
根据所述当前子节点中存储的数据计算出一个数据范围;
根据所述当前子节点的数据范围的大小与其他子节点的数据范围的大小确定所述当前子节点在所述集群竞选序列中的顺序。
4.根据权利要求1所述的方法,其特征在于,所述按照所述集群竞选序列中的顺序,向所述目标集群内的仲裁节点和/或主节点发起竞选请求包括:
向每一个所述主节点和/或所述仲裁节点发起所述竞选请求;或者
从所述主节点和/或所述仲裁节点中选择出多个节点,向选择出的每一个节点发送所述竞选请求。
5.根据权利要求1所述的方法,其特征在于,所述在接收到的竞选回复消息的回复数量与发起的竞选请求的竞选数量之间的比值大于预定比例的情况下,确定所述当前子节点为主节点包括:
在向所述主节点和/或所述仲裁节点发送所述竞选请求后,在预定时长内统计接收到的所述竞选回复消息的回复数量,其中,每一个所述竞选请求对应一个超时时长,在所述超时时长内收到所述竞选回复消息的情况下,确定接收到所述竞选回复消息;
将所述预定时长内的所述回复数量与发起的所述竞选请求的竞选数量做比,得到所述回复数量占所述竞选数量的比例;
在所述比例大于预定比例的情况下,确定所述当前子节点为主节点。
6.根据权利要求1所述的方法,其特征在于,在确定所述当前子节点为主节点之后,所述方法还包括:
向第一子节点中的正常的子节点发送通知消息,其中,所述第一子节点为所述主节点异常前,与所述当前子节点对应同一个主节点的其他子节点,所述通知消息用于通知所述第一子节点,所述当前子节点竞选为了新的主节点。
7.一种目标集群的主节点竞选方法,其特征在于,应用于主节点或仲裁节点,包括:
在目标集群中,接收当前子节点发送的竞选请求,其中,所述竞选请求为所述当前子节点的主节点异常的情况下,所述当前子节点按照集群竞选序列发起的请求,所述竞选请求用于请求竞选所述当前子节点为主节点,所述目标集群内包括多个主节点与多个仲裁节点,每一个所述主节点对应有多个子节点,所述集群竞选序列中设置有每一个所述子节点竞选主节点的顺序;
根据所述当前子节点的当前状态确定是否发起竞选回复消息,其中,所述竞选回复消息用于表示同意所述当前子节点竞选为主节点。
8.根据权利要求7所述的方法,其特征在于,所述根据所述当前子节点的当前状态确定是否发起竞选回复消息包括:
确定所述集群竞选序列中,位于所述当前子节点之前的其他子节点的竞选状态;
在所述其他子节点处于竞选成功状态或者处于竞选等待状态的情况下,且在预定时长内仅接收到所述当前子节点的竞选请求的情况下,向所述当前子节点发送所述竞选回复消息。
9.一种目标集群的主节点竞选装置,其特征在于,应用于当前子节点,包括:
获取模块,用于在目标集群中,在所述当前子节点的主节点异常的情况下,获取集群竞选序列,其中,所述目标集群内包括多个主节点和多个仲裁节点,每一个所述主节点对应有多个子节点,所述集群竞选序列中设置有每一个所述子节点竞选主节点的顺序;
第一发送模块,用于按照所述集群竞选序列中的顺序,向所述目标集群内的仲裁节点和/或主节点发起竞选请求,其中,所述竞选请求用于请求竞选所述当前子节点为主节点;
确定模块,用于在接收到的竞选回复消息的回复数量与发起的竞选请求的竞选数量之间的比值大于预定比例的情况下,确定所述当前子节点为主节点。
10.一种目标集群的主节点竞选装置,其特征在于,应用于主节点或仲裁节点,包括:
接收模块,用于在目标集群中,接收当前子节点发送的竞选请求,其中,所述竞选请求为所述当前子节点的主节点异常的情况下,所述当前子节点按照集群竞选序列发起的请求,所述竞选请求用于请求竞选所述当前子节点为主节点,所述目标集群内包括多个主节点与多个仲裁节点,每一个所述主节点对应有多个子节点,所述集群竞选序列中设置有每一个所述子节点竞选主节点的顺序;
确定模块,用于根据所述当前子节点的当前状态确定是否发起竞选回复消息,其中,所述竞选回复消息用于表示同意所述当前子节点竞选为主节点。
11.一种电子设备,其特征在于,包括:至少一个通信接口;与所述至少一个通信接口相连接的至少一个总线;与所述至少一个总线相连接的至少一个处理器;与所述至少一个总线相连接的至少一个存储器,其中,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时实现权利要求1至8任意一项中所述的方法。
12.一种计算机可读的存储介质,所述存储介质存储有计算机可执行指令,所述计算机可执行指令用于执行本申请上述权利要求1至8任一项所述的方法。
CN202311041593.1A 2023-08-17 2023-08-17 目标集群的主节点竞选方法、装置以及电子设备 Pending CN117061519A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311041593.1A CN117061519A (zh) 2023-08-17 2023-08-17 目标集群的主节点竞选方法、装置以及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311041593.1A CN117061519A (zh) 2023-08-17 2023-08-17 目标集群的主节点竞选方法、装置以及电子设备

Publications (1)

Publication Number Publication Date
CN117061519A true CN117061519A (zh) 2023-11-14

Family

ID=88654924

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311041593.1A Pending CN117061519A (zh) 2023-08-17 2023-08-17 目标集群的主节点竞选方法、装置以及电子设备

Country Status (1)

Country Link
CN (1) CN117061519A (zh)

Similar Documents

Publication Publication Date Title
CN108616566B (zh) raft分布式系统选主方法、相关设备及系统
CN107295080B (zh) 应用于分布式服务器集群的数据存储方法和服务器
CN114268532B (zh) 一种基于Raft协议的竞选方法、分布式系统及存储介质
EP3326065B1 (en) Leaderless consistency protocol
US4814984A (en) Computer network system with contention mode for selecting master
CN112328421B (zh) 一种系统故障处理方法、装置、计算机设备和存储介质
CN109040184B (zh) 一种主节点的选举方法及服务器
JPH05276175A (ja) データ通信方法及び通信システム
CN115102839B (zh) 一种主从节点选举方法、装置、设备及介质
CN105554142B (zh) 消息推送的方法、装置及系统
CN109347590B (zh) 车载以太网中DoIP实体的同步方法和DoIP实体
CN113395192B (zh) 互联方法、系统及设备
CN110635941A (zh) 一种数据库节点集群故障迁移方法与装置
CN114866365B (zh) 仲裁机选举方法、装置、智能设备及计算机可读存储介质
WO2012113226A1 (zh) 一种机器事务控制方法、装置和系统
CN113905050A (zh) 一种互联网访问信息的探测方法、装置和系统
KR101075462B1 (ko) 서브넷에서 마스터 노드를 선출하는 방법
CN115277712B (zh) 分布式锁服务提供方法、装置、系统及电子设备
CN117061519A (zh) 目标集群的主节点竞选方法、装置以及电子设备
CN113467953A (zh) 服务状态的切换方法、装置、服务器及存储介质
CN116260707B (zh) 基于共识的区块链节点灾备方法、装置、设备及存储介质
EP2071764A1 (en) A method, device and communication system thereof of electing local master
CN110781039B (zh) 哨兵进程选举方法及装置
CN111586110B (zh) 一种raft在出现点对点故障时的优化处理方法
CN114116178B (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