CN110417882B - 主节点的确定方法、装置和存储介质 - Google Patents
主节点的确定方法、装置和存储介质 Download PDFInfo
- Publication number
- CN110417882B CN110417882B CN201910662799.3A CN201910662799A CN110417882B CN 110417882 B CN110417882 B CN 110417882B CN 201910662799 A CN201910662799 A CN 201910662799A CN 110417882 B CN110417882 B CN 110417882B
- Authority
- CN
- China
- Prior art keywords
- node
- determining
- operation item
- reply message
- message
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/10—Active monitoring, e.g. heartbeat, ping or trace-route
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1095—Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Health & Medical Sciences (AREA)
- Cardiology (AREA)
- General Health & Medical Sciences (AREA)
- Computer And Data Communications (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本发明公开了一种主节点的确定方法,包括:确定第一节点符合第一预设条件且自身符合第二预设条件时,向至少一个第二节点发送第一请求消息,接收所述至少一个第二节点发送的第一答复消息;所述第二节点为服务器集群中除自身外的其他节点;根据所述至少一个第二节点发送的第一答复消息,确定预备主节点;向所述预备主节点发送第二请求消息,接收所述预备主节点发送的第二答复消息,根据所述第二答复消息确定主节点。本发明还公开了一种主节点的确定装置和存储介质。
Description
技术领域
本发明涉及容错环境下数据同步技术,尤其涉及一种主节点的确定方法、装置和计算机可读存储介质。
背景技术
在Raft分布式系统中,会用多个节点来提升系统的可用性,当其中一个节点出现故障时,其他节点可以替代。Raft分布式系统中包括三种身份的节点:跟随节点(Follower)、候选节点(Candidate)和领导节点(Leader)。其中,Leader为Raft分布式系统的主节点,Follower为Raft分布式系统的从节点。现有的Raft分布式系统存在频繁选举的问题。具体来说,现有的Raft分布式系统运行过程中,若Follower未收到Leader的心跳信号,则会变成Candidate,Candidate是分布式系统中的候选节点,会向其他节点“拉选票”,如果得到大部分的票则变成Leader。这个过程就叫做Leader选举(LeaderElection),简称选举。当网络环境较差或网络延迟较高时,Follower接收Leader的心跳信号超时,会频繁触发选举。而选举过程中,为避免所有节点都投给自己导致选举失败等情况,一轮选不出Leader,便令Follower随机休眠(Election Timeout)一段时间(150~300ms),休眠后再重新选举,第一个从随机休眠状态恢复过来的Follower作为Candidate会向所有其他Follower发出投票申请,还未苏醒的Follower只能投票给已经苏醒的Candidate。频繁选举和选举过程中随机休眠,导致选举效率降低,同步无法达成的问题。
发明内容
有鉴于此,本发明的主要目的在于提供一种主节点的确定方法、装置和计算机可读存储介质。
为达到上述目的,本发明的技术方案是这样实现的:
本发明实施例提供了一种主节点的确定方法,所述方法包括:
确定第一节点符合第一预设条件且自身符合第二预设条件时,向至少一个第二节点发送第一请求消息;所述第二节点为服务器集群中除自身外的其他节点;
接收所述至少一个第二节点发送的第一答复消息,根据所述至少一个第二节点发送的第一答复消息,确定预备主节点;
向所述预备主节点发送第二请求消息,接收所述预备主节点发送的第二答复消息,根据所述第二答复消息确定主节点。
上述方案中,所述确定第一节点符合第一预设条件且自身符合第二预设条件,包括:
确定在预设时间段内未收到所述第一节点发送的心跳信号且确定自身的标识符合预设节点条件。
上述方案中,所述第一答复消息,包括:第二节点确定的预备节点的标识;
所述根据所述至少一个第二节点发送的第一答复消息,确定预备主节点,包括:
从所述至少一个第二节点中各第二节点发送的预备节点的标识中,确定标识数量符合预设数量要求的预备节点,作为预备主节点。
上述方案中,所述根据所述第二答复消息确定主节点,包括:
确定所述第二答复消息为确认消息时,确定所述预备主节点为主节点;
确定所述第二答复消息为否认消息时,确定所述预备主节点的下一节点为新预备主节点,重新向所述新预备主节点发送第二请求消息,直至确定主节点。
上述方案中,所述方法还包括:
将所述主节点的标识和所述主节点的任期值,发送给所述至少一个第二节点。
本发明实施例提供了一种主节点的确定方法,所述方法包括:
接收第三节点发送的第一请求消息,根据所述第一请求消息和服务器集群中节点数量确定第一答复消息,向所述第三节点发送第一答复消息;
接收所述第三节点发送的第二请求消息,根据所述第二请求消息确定第二答复消息,向所述第三节点发送所述第二答复消息,用以告知自身是否为主节点。
上述方案中,所述根据所述第一请求消息和服务器集群中节点数量确定第一答复消息,包括:
确定第一任期值,根据所述第一请求消息和所述第一任期值确定第二任期值;
根据所述第二任期值和服务器集群中节点数量,确定预备节点的标识;
根据所述第二任期值和所述预备节点的标识生成所述第一答复消息。
上述方案中,所述第二请求消息,包括:第三任期值;所述第三任期值为确定预备节点的标识时对应的任期值;
所述根据所述第二请求消息确定第二答复消息,包括:
确定所述第三任期值与自身的任期值相同时,将确认消息作为所述第二答复消息;
确定所述第三任期值与自身的任期值不同时,将否认消息作为所述第二答复消息。
本发明实施例提供了一种处理装置,所述装置包括:处理器和用于存储能够在处理器上运行的计算机程序的存储器;其中,
所述处理器用于运行所述计算机程序时,执行以上任意一项所述主节点的确定方法的步骤。
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以上任意一项所述主节点的确定方法的步骤。
本发明实施例所提供的主节点的确定方法、装置和计算机可读存储介质,确定第一节点符合第一预设条件且自身符合第二预设条件时,向至少一个第二节点发送第一请求消息;所述第二节点为服务器集群中除自身外的其他节点;接收所述至少一个第二节点发送的第一答复消息,根据所述至少一个第二节点发送的第一答复消息,确定预备主节点;向所述预备主节点发送第二请求消息,接收所述预备主节点发送的第二答复消息,根据所述第二答复消息确定主节点。本发明实施例中,通过简易轮转选举,取消随机休眠机制,减少服务器集群中无效的时间延迟,提高了服务器集群的工作效率。
附图说明
图1为本发明实施例提供的一种主节点的确定方法的流程示意图;
图2为本发明实施例提供的另一种主节点的确定方法的流程示意图;
图3为本发明实施例提供的再一种主节点的确定方法的流程示意图;
图4为本发明实施例提供的还一种主节点的确定方法的流程示意图;
图5为本发明实施例提供的一种同步方法的流程示意图;
图6为本发明实施例提供的另一种同步方法的流程示意图;
图7为本发明实施例提供的日志对比示意图;
图8为本发明实施例提供的一种主节点的确定装置的结构示意图;
图9为本发明实施例提供的另一种主节点的确定装置的结构示意图;
图10为本发明实施例提供的一种同步装置的结构示意图;
图11为本发明实施例提供的另一种同步装置的结构示意图;
图12为本发明实施例提供的一种处理装置的结构示意图。
具体实施方式
在本发明的各种实施例中,第三节点确定第一节点符合第一预设条件且自身符合第二预设条件时,向至少一个第二节点发送第一请求消息;所述第二节点为服务器集群中除自身外的其他节点;接收所述至少一个第二节点发送的第一答复消息,根据所述至少一个第二节点发送的第一答复消息,确定预备主节点;向所述预备主节点发送第二请求消息,接收所述预备主节点发送的第二答复消息,根据所述第二答复消息确定主节点。相应的,第二节点接收第三节点发送的第一请求消息,根据所述第一请求消息和服务器集群中节点数量确定第一答复消息,向所述第三节点发送第一答复消息;接收所述第三节点发送的第二请求消息,根据所述第二请求消息确定第二答复消息,向所述第三节点发送所述第二答复消息,用以告知所述第三节点自身是否为主节点。
下面结合实施例对本发明再作进一步详细的说明。
图1为本发明实施例提供的一种主节点的确定方法的流程示意图;如图1所示,所述主节点的确定方法,包括:
步骤101、确定第一节点符合第一预设条件且自身符合第二预设条件时,向至少一个第二节点发送第一请求消息;所述第二节点为服务器集群中除自身外的其他节点。
具体地,所述第一节点可以指当前的服务器集群中的主节点(Leader)。本实施例提供的方法可以应用于服务器集群中请求更换主节点的发起节点(Sponsor),本实施例中记做第三节点。
具体地,所述确定第一节点符合第一预设条件且自身符合第二预设条件,包括:
确定在预设时间段内未收到所述第一节点发送的心跳信号且确定自身的标识(ID,Identity Document)符合预设节点条件。
这里,所述第三节点确定在预设时间段内未收到第一节点发送的心跳信号时,所述第三节点可以认为第一节点、即主节点宕机(具体指主节点无法正常工作),则确定第一节点符合第一预设条件。这里,所述预设时间段可以取100ms至300ms中的任意值。
所述第三节点确定自身为第一候选节点集中ID最小的节点时,确定自身的标识符合预设节点条件,即可确定自身符合第二预设条件。这里,所述第一候选节点集,包括:所述服务器集群中确定第一节点符合第一预设条件的节点。
进一步来说,服务器集群中所有确定第一节点符合第一预设条件(即确定主节点宕机)的节点,均可作为备选的发起节点,即作为所述第一候选节点集中的一个;当所述第一候选节点集中包括至少两个节点时,选择ID最小的节点作为所述发起节点。
需要说明的是,服务器集群中各个节点均对应有一个唯一的ID。所述节点可以为服务器、数据库等。
这里,所述第一请求消息,用于请求更换主节点。所述第二节点接收第一请求消息后,确定自身的任期值,记做第一任期值;根据所述第一请求消息和所述第一任期值确定第二任期值;根据所述第二任期值和服务器集群中节点数量,确定预备节点的标识;根据所述第二任期值和所述预备节点的标识生成所述第一答复消息。
需要说明的是,服务器集群中每一次进行选举(确定主节点的过程叫做选举)都是一个任期,任期值由整数表示,单调递增,每次选举完毕,任期值加1。服务器集群中各节点均保存有任期值,这里,所述第二节点确定的第一任期值表征第二节点自身当前记录的任期值;所述第二任期值可以为第一任期值加1。
步骤102、接收所述至少一个第二节点发送的第一答复消息;根据所述至少一个第二节点发送的第一答复消息,确定预备主节点。
具体地,所述第一答复消息,包括:第二节点根据自身的第一任期值和服务器集群中节点数量确定的预备节点的标识,以及,确定预备节点的标识时对应的第二任期值。
需要说明的是,所述第二节点接收到第一请求消息后,即可确定当前需要更换主节点,即进行一次选举,则将自身的第一任期值加1,得到的结果即为所述第二任期值。
这里,所述根据所述至少一个第二节点发送的第一答复消息,确定预备主节点,包括:
从所述至少一个第二节点中各第二节点发送的预备节点的标识中,确定标识数量符合预设数量要求的预备节点,作为预备主节点。
具体来说,根据所述至少一个第二节点中各第二节点发送的预备节点的标识,可以确定同一标识对应的数量;所述预设数量要求可以为同一标识对应的数量最多。
举例来说,假设服务器集群中共有5个第二节点,分别发送第一答复消息,各第二节点发送的第一答复消息包括有各第二节点确定的预备节点的标识(ID),具体的,所述5个第二节点包括:2号第二节点、3号第二节点、4号第二节点、5号第二节点、6号第二节点;各第二节点发送的第一答复消息中的预备节点的标识分别如下:
2号第二节点发送的第一答复消息中,预备节点的标识为2,即ID=2;
3号第二节点发送的第一答复消息中,ID=3;
4号第二节点发送的第一答复消息中,ID=3;
5号第二节点发送的第一答复消息中,ID=3;
6号第二节点发送的第一答复消息中,ID=4;
根据上述5个第二节点发送的第一答复消息,可以确定“ID=2”对应的数量为1个,“ID=3”对应的数量为3个,“ID=4”对应的数量为1个,可以看出“ID=3”对应的数量最多,则确定ID为3的预备节点作为预备主节点。
步骤103、向所述预备主节点发送第二请求消息,接收所述预备主节点发送的第二答复消息,根据所述第二答复消息确定主节点。
具体地,所述根据所述第二答复消息确定主节点,包括:
确定所述第二答复消息为确认消息时,确定所述预备主节点为主节点;
确定所述第二答复消息为否认消息时,根据所述预备主节点的下一节点为新预备主节点,重新向所述新预备主节点发送第二请求消息,依次类推,直至确定主节点。
这里,根据所述第二答复消息确定的主节点为服务器集群中新的主节点。
具体来说,所述第二请求消息,包括:第三任期值;所述第三任期值为确定预备节点的标识时对应的任期值;具体来说,第三节点根据各第二节点发送的预备节点的标识确定预备主节点,将确定预备主节点的标识时对应的任期值作为第三任期值,即所述第三任期值具体为确定预备主节点的标识时对应的任期值。
所述预备主节点接收到所述第二请求消息后,确定第三任期值,将所述第三任期值与自身的任期值进行对比,确定两者相同,则确认自身可成为主节点,发送确认消息;确定两者不相同,则确认自身不可成为主节点,则发送否认消息。
具体地,所述方法还包括:
将所述主节点的标识和所述主节点的任期值,发送给所述至少一个第二节点。
这里,所述第二节点为服务器集群中除第三节点自身外的其他节点,第二节点接收到主节点的标识和所述主节点的任期值,即可确定主节点并根据所述主节点的任期值更新自身的任期值(具体为将自身的任期值保持与主节点的任期值相同),从而保证各节点的任期同步。
这里,当所述预备主节点确定自身可成为主节点时,所述主节点的标识即为所述预备主节点的标识,所述主节点的任期值即为确定预备主节点的标识时对应的任期值,也即所述第三任期值。
需要说明的是,所述第一节点从宕机状态恢复到正常工作状态后,也需要和新的主节点完成同步。
图2为本发明实施例提供的另一种主节点的确定方法的流程示意图;如图2所示,所述主节点的确定方法,包括:
步骤201、接收第三节点发送的第一请求消息,根据所述第一请求消息和服务器集群中节点数量确定第一答复消息,向所述第三节点发送第一答复消息;
具体地,所述服务器集群中节点数量为服务器集群构建时确定并保存在服务器集群中各节点中。
所述根据所述第一请求消息和服务器集群中节点数量确定第一答复消息,包括:
确定第一任期值,根据所述第一请求消息和所述第一任期值,确定第二任期值;
根据所述第二任期值和服务器集群中节点数量,确定预备节点的标识;
根据所述第二任期值和所述预备节点的标识生成所述第一答复消息。
具体地,所述第一任期值为第二节点自身当前的任期值。所述根据第一请求消息和所述第一任期值,确定第二任期值,包括:根据所述第一请求消息将自身当前的任期值加1,得到新的任期值,作为第二任期值。
所述根据所述第二任期值和服务器集群中节点数量,确定预备节点的标识,包括:
将第二任期值与服务器集群中节点数量作求余计算,获得的计算结果作为预备节点的标识。
步骤202、接收所述第三节点发送的第二请求消息,根据所述第二请求消息确定第二答复消息,向所述第二节点发送所述第二答复消息,用以告知自身是否为主节点。
具体地,当第三节点确定任一第二节点为预备主节点后,还需进一步确认其是否可以成为主节点,具体通过发送第二请求消息进行确认。
这里,所述第二请求消息,包括:第三任期值;所述第三任期值为确定预备节点的标识时对应的任期值。
进一步的来说,所述第二请求消息用于请求成为预备主节点的第二节点确定自身是否可成为主节点;因此,所述第三任期值具体可以为确定预备主节点的标识时对应的任期值;
相应的,所述根据所述第二请求消息确定第二答复消息,包括:
确定为预备主节点的第二节点接收到所述第二请求消息后,确定所述第三任期值;
将所述第三任期值与自身当前的任期值进行对比,确定两者相同,则确认自身可以成为主节点,则发送确认消息;确定两者不相同,则确认自身不可成为主节点,则发送否认消息。
这里,所述第二节点确定自身当前的任期值和第三任期值相同,则可以确定自身处于最新的任期,可以成为主节点,发送确认消息;若两者不同,则可以确定自身并非处于最新的任期,不能成为主节点,发送否认消息。
本实施例中,服务器集群内完成主节点的确定后,所述主节点和服务器集群内的副节点之间需要进行同步,本实施例具体还提供了主节点的同步方法和副节点的同步方法,其中,主节点的同步方法具体可以参见下图5所示的方法,副节点的同步方法具体可以参见下图6所示的方法。
图3为本发明实施例提供的再一种主节点的确定方法的流程示意图;如图3所示,所述主节点的确定方法,包括:
步骤301、服务器集群初始化,确定初始的主节点(Leader)和副节点(Follower)。
具体来说,所述服务器集群初始化,包括:确定服务器集群内包括N个节点;各节点均为Follower;各节点对应唯一的节点ID,ID∈[0,N];设定所有节点的初始任期值(current_term_id)为0。
所述确定初始的Leader和Follower,包括:将ID最小的节点作为初始的Leader,其他节点均为Follower;各节点的任期值加1。
步骤302、Follower确定预设时间段内(100-300MS)未接收到Leader的心跳信号,则确定Leader宕机,确定该Follower成为发起节点(Sponsor)。
需要说明的是,服务器集群中可能存在有至少两个可能成为Sponsor的Follower,即服务器集群中有至少两个Follower在预设时间段内未接收到Leader的心跳信号,若存在至少两个可能成为Sponsor的Follower时,则从所述至少两个可能成为Sponsor的Follower中选择ID最小的Follower,作为Sponsor。
步骤303、Sponsor发送第一请求消息给服务器集群内除Sponsor外的其他节点。
这里,所述第一请求消息用于请求更换主节点。所述服务器集群内除Sponsor外的其他节点接收到第一请求消息后,可以竞选为新的Leader。
步骤304、服务器集群内除Sponsor外的其他节点更新自身的任期值,根据更新后的任期值和服务器集群中节点数量,计算得到计算结果,将计算结果发送给Sponsor。
所述更新的任期值的公式为:current_term_id=current_term_id+1。
所述根据更新后的任期值和服务器集群内的节点数量,计算得到计算结果,包括:
求更新后的任期值和节点数量的余数,即mod(current_term_id,mod N),得到预备节点的ID,作为计算结果。
这里,计算得到的预备节点,可能成为新的主节点,但可能存在多个不同的预备节点的ID的情况,因此需要从多个不同的预备节点的ID中选择一个作为预备主节点,具体通过步骤305实现。
步骤305、将服务器集群内除Sponsor外的其他节点发送的计算结果进行比对,确定数量最多的预备节点的ID,将确定的ID对应的节点作为预备Leader。
步骤306、Sponsor向预备Leader发送第二请求消息,预备Leader确认自身是否符合要求,并向Sponsor发送第二答复消息。
这里,所述第二请求消息,包括:第三任期值;所述第三任期值为计算得到预备节点的ID时对应的任期值。
具体来说,所述预备Leader确定自身当前的任期值和所述第二请求消息中第三任期值相同,将确认消息作为第二答复消息发送给Sponsor,否则,将否认消息作为第二答复消息发送给Sponsor。
步骤307、Sponsor确定接收到确认消息,将选举结果广播给其他节点;Sponsor确定接收到否认消息,则将节点ID+1,确定下一个预备Leader,并返回步骤306。
所述选举结果,包括:新的Leader的ID和新的Leader对应的任期值。
需要说明的是,确定新的Leader后,其他Follower需与新的Leader完成同步日志,并保持大部分节点为最新的任期值,具体同步方法如下图5、6、7的方法所示。
图4为本发明实施例提供的还一种主节点的确定方法的流程示意图;如图4所示,假如数据库服务器集群中有4个节点,运用上述选举方法确定主节点和副节点,所述选举方法,包括:
服务器集群中每个节点对应一个唯一ID:1、2、3、4;初始任期值为0,第1个任期由ID为1的服务器作为主节点。运行过程中,1号节点每隔100ms发送心跳给2号节点、3号节点、4号节点。如果在第1任期中,3号节点连续3次(即300ms内)没收到1号节点的心跳信号,则认为1号节点宕机,3号节点成为发起节点(Sponsor)。此时,如果3号节点和4号节点同时发现1号节点宕机,ID小者即3号节点当选为发起节点。3号节点广播第一请求消息给1号节点、2号节点、4号节点,用以请求更换Leader。2号节点、4号节点将自身当前的任期值(具体为1)+1后对4求余,得到ID=2,并将计算得到的ID发送给3号节点。3号节点收到半数以上(2号节点和4号节点,因为2>=4/2)的回复时,将返回的ID中最大的,也就是2号节点作为预备主节点。
3号节点发送第二请求消息(包含预备主节点的ID号和计算得到ID时对应的任期值)给2号节点,2号节点检查自身的任期值等于第二请求消息中的任期值,说明2号节点已经为最新的任期,向3号节点发送确认节点,以说明自身可以胜任Leader。3号节点向1号节点、2号节点、4号节点广播新的Leader的ID和任期值。2号节点成为主节点后发送心跳信号(包含操作项的索引和任期值)给3号节点和4号节点,3号节点、4号节点和2号节点完成数据同步,即实现与新的Leader数据同步。
需要说明的是,1号节点从宕机状态恢复为正常工作状态后,需要与2号节点完成数据同步。
本实施例提供的主节点的确定方法,Follower不需要随机休眠,另外,去掉现有的Candidate,替代为Sponsor,广播次数与现有的Raft协议中规定的广播次数相同(原来Raft协议有两次:1次呼吁投票,1次告知结果;本实施提供的方法也只有两次:1次告知投票,1次告知结果),仅增加Sponsor的单独通信次数,但从时间上来看,减少了时延。
以下对主节点确定后,主节点与备节点进行同步进行说明。
在对同步方法进行说明前,首先对服务器集群确定操作项进行说明。在实际应用中,用户通过客户端进行一项操作(Operation)时,比如命令在表1中增加一条数据3:“Add3in Sheet1”,客户端确定对应的指令并发送给Leader,Leader根据操作索引(每个操作项都有唯一的索引)、任期值和指令生成操作项(Index,term_id,cmd)并发送给Follower,此时Leader保存的操作项状态仍然为未执行(uncommitted);Follower将操作项持久化到硬盘,Follower将操作结果告知Leader,Leader收到大部分Follower发送的操作结果,变更操作项状态为已执行(committed)。Leader告知客户端操作执行完毕,广播给Follower以告知指令已执行。至此,服务器集群完成同步。
图5为本发明实施例提供的一种同步方法的流程示意图,如图5所示,所述同步方法,可以应用于主节点(Leader),所述方法包括:
步骤501、确定遗漏操作项队列和至少一个第一操作项;所述遗漏操作项队列,包括至少一个未执行的第二操作项。
这里,所述第一操作项为主节点告知副节点需要处理的操作项。
具体地,所述未执行的第二操作项指主节点已请求服务器集群中的副节点处理、但未被预设数量的副节点处理的操作项;这里,所述遗漏操作项队列用于保存未被预设数量(可以为服务器集群中节点数量的一半)的副节点处理的操作项。所述操作项,包括:操作项的索引、操作项对应的任期、操作项对应的指令。
这里,所述确定遗漏操作项队列,包括:
确定至少一个第二操作项,向至少一个副节点发送所述至少一个第二操作项;
接收至少一个副节点发送的操作结果消息;所述操作结果消息携带有副节点的标识和已处理的第二操作项的标识;
根据所述副节点的标识、所述已处理的第二操作项的标识和确定的所述至少一个第二操作项,确定至少一个未执行的第二操作项;
根据所述至少一个未执行的第二操作项,确定所述遗漏操作项队列。
这里,用户通过移动终端(具体可以指移动终端中安装的可以与服务器集群交互的客户端)人机交互界面进行操作,移动终端根据所述操作生成对应的指令,移动终端将所述指令发送给服务器集群,具体是发送到所述主节点,所述主节点根据所述指令生成操作项,所述操作项包括:所述指令;所述操作项还包括:主节点为所述操作项分配的索引、操作项对应的任期(即主节点当前的任期)。
所述主节点确定至少一个第二操作项,包括:主节点接收移动终端发送的至少一个指令;根据所述至少一个指令中的各指令生成对应的第二操作项,从而确定所述至少一个第二操作项。
具体来说,所述根据所述副节点的标识、所述已处理的第二操作项的标识和确定的所述至少一个第二操作项,确定至少一个未执行的第二操作项,包括:
从确定的所述至少一个第二操作项中,筛选出未被预设数量的副节点处理的第二操作项,作为未执行的第二操作项。
这里,所述预设数量可以为服务器集群中节点数量的一半。
需要说明的是,副节点接收到操作项后,根据所述操作项进行相应的操作,则可以发送操作结果消息,用以告知主节点已处理完毕(但副节点针对该操作项的状态仍标记为未执行);主节点需要确定预设数量的副节点均处理完毕后,才可以对该操作项的状态进行修改,具体修改为已执行;主节点告知副节点该操作项的状态修改为已执行,副节点才可对应修改为已执行。
步骤502、向副节点发送所述遗漏操作项队列和所述至少一个第一操作项;所述遗漏操作项队列和所述至少一个第一操作项由所述副节点接收并且并行处理所述至少一个未执行的第二操作项和所述至少一个第一操作项。
具体地,所述副节点接收到所述至少一个未执行的第二操作项和所述至少一个第一操作项后,无需考虑各第一操作项、各第二操作项对应的顺序,可并行处理各第一操作项、各第二操作项。
具体地,所述方法还包括:更新所述遗漏操作项队列;所述更新遗漏操作项队列,包括以下任意一种情况:
确定预设数量的副节点发送第三操作项的操作结果消息、所述第三操作项属于所述遗漏操作项队列且所述第三操作项无依赖的操作项时,从所述遗漏操作项队列中删除所述第三操作项;
确定预设数量的副节点发送第三操作项的操作结果消息、所述第三操作项属于所述遗漏操作项队列且所述第三操作项所依赖的第四操作项已执行时,从所述遗漏操作项队列中删除所述第三操作项。
这里,所述依赖是指执行某一操作项之前必须先执行完毕另外一个操作项。以上述第三操作项和第四操作项为例进行说明,假设第三操作项依赖所述第四操作项,则要求执行第三操作项之前必须确定第四操作项已执行完毕。
这里,所述预设数量可以为服务器集群中节点数量的一半。
所述遗漏操作项队列中各第二操作项可以对应保存有已处理的副节点、已处理的副节点的总数量、未处理的副节点、未处理的副节点的总数量等。
具体地,所述方法还包括:
发送所述第三操作项已执行的消息;具体指向服务器集群内所有副节点发送所述第三操作项已执行的消息;
接收所述未发送第三操作项的操作结果消息的副节点发送的第三请求消息;
向所述未发送第三操作项的操作结果消息的副节点发送所述第三操作项。
所述未发送第三操作项的操作结果消息的副节点单独接收到所述第三操作项后,可以处理所述第三操作项,并向主节点发送操作结果消息,提高了效率,也避免了副节点存在未处理的操作项(即避免了空洞的存在)。
以上所述的处理操作项(如第三操作项)具体包括:确定操作项包括的指令,根据所述指令进行相应的操作。所述处理操作项,还可以包括:将自身保存的操作项的状态修改为已处理,和/或,更新任期值(根据操作项包括的任期更新自身的任期值)。
本实施例中,通过遗漏操作项队列记录未执行的操作项,主节点在确定存在未执行的操作项时,可以通过遗漏操作项队列请求副节点处理未执行的操作项,从而保证所述服务器集群中副节点不必串行处理操作项,即使在并行处理操作项的情况下,也不会遗漏操作项,即解决了操作项可能被遗漏的问题;通过并行处理可以降低时延,提高处理效率。
图6为本发明实施例提供的另一种同步方法的流程示意图,如图6所示,所述同步方法,可以应用于副节点(Follower),所述方法包括:
步骤601、接收主节点发送的遗漏操作项队列和至少一个第一操作项;
步骤602、确定所述遗漏操作项队列中包括的至少一个未执行的第二操作项;
步骤603、并行处理所述至少一个第一操作项和所述至少一个未执行的第二操作项。
具体地,所述处理所述至少一个第一操作项和所述至少一个未执行的第二操作项之后,所述方法还包括:
向主节点发送操作结果消息;所述操作结果消息,包括:已处理的第二操作项的索引、已处理的遗漏操作项队列中的操作项的索引、自身的标识。
具体地,所述方法还包括:
接收第三操作项已执行的消息,向所述主节点发送第三请求消息,用以请求执行第三操作项;
接收所述主节点发送的所述第三操作项,处理所述第三操作项并向主节点发送操作结果消息。
以上所述的处理操作项(如第一操作项、第三操作项)具体包括:确定操作项包括的指令,根据所述指令进行相应的操作。所述处理操作项,还可以包括:将自身保存的操作项的状态修改为已处理,和/或,更新任期值(根据操作项包括的任期更新自身的任期值)。
本实施例所提供的上述同步方法,主节点通过遗漏操作项队列记录并告知备节点(即第二节点)未执行的操作项,可以并发处理不同的操作项,在高并发场景中可以有效避免强制串行处理导致的操作项阻塞,提高服务器集群的工作效率。
进一步说明,本实施例考虑实际应用中,Leader和Follower可以使用多条连接来传输,操作项到达的先后顺序不一定是发送顺序,为实现异步操作引入遗漏操作项队列。当索引为Indexn的操作项被大部分Follower提交并应用(即已执行)时,可以将之前未被应用的索引号Indexn-i到索引号Indexn之间的操作项先添加到遗漏操作项队列中,若遗漏操作项队列中的操作项被成功提交并应用,则从所述遗漏操作向队列中删除该操作项。从而,Follower收到操作项后即可处理操作项并回复操作结果消息给Leader,无需等之前的操作项执行完毕;Leader也无需等之前的操作项执行完毕,收到大多数Follower回复的操作结果消息即可提交并应用。
举例来说,若存在#1-#9共九个事务(所述事务包括有操作项),大部分Follower接收到事务#5-#9,但未接收到事务#4,事务#5-#9内所有操作项可正常操作。Leader中,事务#5-#9正常执行,并在遗漏操作项队列中添加#4,标记其为“未执行”。Leader在之后每次发送其他操作项时,一同发送遗漏操作项队列,未收到事务#4的Follower即可知道之前的事务#4未执行,则该Follower便会处理事务#4内的操作项,完成后告知给Leader。
待预设数量(可以是超过节点数量的一半)Follower提交了事务#4已处理的操作结果消息给Leader,Leader便会从遗漏操作项队列中删除事务#4,标记为已执行;而还未收到事务#4的Follower会形成一个“空洞”,此时事务#4已执行完毕,而该Follower还不知道事务#4的存在。下一个心跳时,有日志“空洞”的Follower可以向Leader发送申请填补“空洞”,Leader会将已经最终执行的事务#4单独发送给该Follower,该Follower处理事务并持久化;从而可以保证所有已执行的操作项严格一致。需要说明的是,若事务是有先后顺序的,例如事务#5必须依赖事务#4的执行,那么Leader就必须等待事务#4执行以后再执行事务#5。
通过上述方法实现异步操作,在高并发场景中即可避免现有技术中强制串行处理导致的事务阻塞。
在一实施例中,假如客户端要将数据库中张三的薪资修改为5000,客户端生成指令“Update sheet1set salary=5000where name=张三”并发送给主数据库(假设为2号节点)。运用上述同步方法实现服务器集群之间的同步,包括:2号节点发送修改操作项(AppendEntryRPC)给1号节点、3号节点、4号节点,所述修改操作项包含操作索引号(Index)、任期(term_id)、命令(cmd)。1号节点、3号节点、4号节点收到后执行命令并写入硬盘(但仍可随时回滚),返回执行结果(即所述操作结果消息)给2号节点,并将操作项的状态记为“未执行”。2号节点收到大多数(这里为超过一般数量的节点,即超过2个节点)Follower的操作结果消息后,将操作项变更为“已执行”。2号节点将命令执行后的结果记到库中,广播1号节点、3号节点、4号节点应用此结果,并发送“已执行”给客户端。至此,该操作项执行完成,大部分数据库完成同步。
在另一实施例中,假如客户端要执行两个操作:操作1,修改数据库表字段张三的薪资为5000;操作2,增加一条员工数据李四。运用上述同步方法实现服务器集群之间的同步,包括:
假设Leader为2号节点,2号节点发送操作项一和操作项二给1号节点、3号节点、4号节点,这里操作项一包括:index=1,term_id=2,cmd=“Update sheet1 set salary=5000where name=张三”;所述操作项二包括:index=2,term_id=2,cmd=“Insertsheet1张三,7000”。
假设3号节点、4号节点收到操作项一和操作项二并写入硬盘(但仍可随时回滚);1号节点仅收到操作项二,执行操作项二的命令并写入硬盘(但仍可随时回滚),1号节点、3号节点、4号节点均返回各自的执行结果给2号节点,将对应执行后的操作项的状态记为“未执行”。3号服务器关于操作项一的操作结果消息因网络丢包未发送到2号节点,2号节点收到3个关于操作项二的操作结果消息后,将操作项二的状态变更为“已执行”;2号节点只收到1个关于操作项一的操作结果消息;2号节点将操作项二的状态记为“已执行”,并告知1号节点、3号节点、4号节点和客户端,将操作项一添加“遗漏操作项队列”。2号节点经过一段时间后收到3号节点针对操作项一的操作结果消息,将操作项一的状态记为“已执行”并广播告知1号节点、3号节点、4号节点,将其从遗漏操作项列表中清除。
1号节点通过2号节点的广播中知道操作项一已被应用、即已执行完毕,而自己形成数据空洞,1号节点单独向2号节点请求重传操作项一,2号节点根据请求重传操作项一给1号节点,1号节点接收并执行命令,完成同步。
图7为本发明实施例提供的日志对比示意图;如图7所示,最上面一行对应新Leader,a~f对应Follower,每个格子代表一条操作项,格子内的数字代表该操作对应的任期。Follower要么少了数据比如b,要么多了数据,比如d,要么既少了又多了数据,比如f。Leader同样会为每个Follower维护一个nextIndex,表示Leader给各个Follower发送的下一条操作项的索引,初始化为Leader的最后一条操作项的下一个位置。Leader给Follower发送携带任期值(term_id)、操作项索引(nextIndex-1)的AppendEntriesRPC消息,Follower接收到后,会从自己的log查找是否存在这样的操作项,如果不存在,就给Leader回复拒绝消息,然后Leader则将nextIndex减1,再重复,直到AppendEntriesRPC消息被接收。以Leader和b为例,b从第4个槽位开始接收,Leader从槽位5开始推送操作项。以Leader和d为例,d需要删除最后两个槽位,与Leader保持一致。
图8为本发明实施例提供的一种主节点的确定装置的结构示意图;如图8所示,所述装置包括:第一处理模块、第二处理模块和第三处理模块;其中,
所述第一处理模块,用于确定第一节点符合第一预设条件且自身符合第二预设条件时,向至少一个第二节点发送第一请求消息;所述第二节点为服务器集群中除自身外的其他节点;
所述第二处理模块,用于接收所述至少一个第二节点发送的第一答复消息,根据所述至少一个第二节点发送的第一答复消息,确定预备主节点;
所述第三处理模块,用于向所述预备主节点发送第二请求消息,接收所述预备主节点发送的第二答复消息,根据所述第二答复消息确定主节点。
具体地,所述确定第一节点符合第一预设条件且自身符合第二预设条件,包括:
确定在预设时间段内未收到所述第一节点发送的心跳信号且确定自身的标识符合预设节点条件。
具体地,所述第一答复消息,包括:第二节点确定的预备节点的标识和确定预备节点的标识时对应的任期值;
所述第二处理模块,用于从所述至少一个第二节点中各第二节点发送的预备节点的标识中,确定标识数量符合预设数量要求的预备节点,作为预备主节点。
具体地,所述第三处理模块,用于确定所述第二答复消息为确认消息时,确定所述预备主节点为主节点;
确定所述第二答复消息为否认消息时,确定所述预备主节点的下一节点为新预备主节点,重新向所述新预备主节点发送第二请求消息,直至确定主节点。
所述第三处理模块,还用于将所述主节点的标识和所述主节点的任期值,发送给所述至少一个第二节点。
图9为本发明实施例提供的另一种主节点的确定装置的结构示意图;如图9所示,所述装置包括:第四处理模块、第五处理模块;其中,
所述第四处理模块,用于接收第三节点发送的第一请求消息,根据所述第一请求消息和服务器集群中节点数量确定第一答复消息,向所述第三节点发送第一答复消息;
所述第五处理模块,用于接收所述第三节点发送的第二请求消息,根据所述第二请求消息确定第二答复消息,向所述第三节点发送所述第二答复消息,用以告知自身是否为主节点。
具体地,所述第四处理模块,用于确定第一任期值,根据所述第一请求消息和所述第一任期值确定第二任期值;
根据所述第二任期值和服务器集群中节点数量,确定预备节点的标识;
根据所述第二任期值和所述预备节点的标识生成所述第一答复消息。
具体地,所述第二请求消息,包括:第三任期值;所述第三任期值为确定预备节点的标识时对应的任期值;
所述第五处理模块,用于确定所述第三任期值与自身的任期值相同时,将确认消息作为所述第二答复消息;
确定所述第三任期值与自身的任期值不同时,将否认消息作为所述第二答复消息。
需要说明的是:上述实施例提供的主节点的确定装置在进行主节点的确定时,仅以上述各程序模块的划分进行举例说明,实际应用中,可以根据需要而将上述处理分配由不同的程序模块完成,即将装置的内部结构划分成不同的程序模块,以完成以上描述的全部或者部分处理。另外,上述实施例提供的主节点的确定装置与主节点的确定方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图10为本发明实施例提供的一种同步装置的结构示意图;如图10所示,所述装置包括:第六处理模块、第七处理模块;其中,
所述第六处理模块,用于确定遗漏操作项队列和至少一个第一操作项;所述遗漏操作项队列,包括至少一个未执行的第二操作项;
所述第七处理模块,用于向副节点发送所述遗漏操作项队列和所述至少一个第一操作项;所述遗漏操作项队列和所述至少一个第一操作项由所述副节点接收并且并行处理所述至少一个未执行的第二操作项和所述至少一个第一操作项。
具体地,所述第六处理模块,用于确定至少一个第二操作项,向至少一个副节点发送所述至少一个第二操作项;
接收至少一个副节点发送的操作结果消息;所述操作结果消息携带有副节点的标识和已处理的第二操作项的标识;
根据所述副节点的标识、所述已处理的第二操作项的标识和确定的所述至少一个第二操作项,确定至少一个未执行的第二操作项;
根据所述至少一个未执行的第二操作项,确定所述遗漏操作项队列。
具体地,所述第六处理模块,还用于更新所述遗漏操作项队列;所述更新遗漏操作项队列,包括以下任意一种情况:
确定预设数量的副节点发送第三操作项的操作结果消息、所述第三操作项属于所述遗漏操作项队列且所述第三操作项无依赖的操作项时,从所述遗漏操作项队列中删除所述第三操作项;
确定预设数量的副节点发送第三操作项的操作结果消息、所述第三操作项属于所述遗漏操作项队列且所述第三操作项所依赖的第四操作项已执行时,从所述遗漏操作项队列中删除所述第三操作项。
具体地,所述第七处理模块,还用于发送所述第三操作项已执行的消息;
接收未发送第三操作项的操作结果消息的副节点发送的第三请求消息;
向所述未发送第三操作项的操作结果消息的副节点发送所述第三操作项。
图11为本发明实施例提供的另一种同步装置的结构示意图;如图11所示,所述装置包括:第八处理模块、第九处理模块和第十处理模块;其中,
所述第八处理模块,用于接收主节点发送的遗漏操作项队列和至少一个第一操作项;
所述第九处理模块,用于确定所述遗漏操作项队列中包括的至少一个未执行的第二操作项;
所述第十处理模块,用于并行处理所述至少一个第一操作项和所述至少一个未执行的第二操作项。
具体地,所述第八处理模块,还用于接收第三操作项已执行的消息,向所述主节点发送第三请求消息,用以请求执行第三操作项;
接收所述主节点发送的所述第三操作项,处理所述第三操作项并向主节点发送操作结果消息。
需要说明的是:上述实施例提供的同步装置在进行同步时,仅以上述各程序模块的划分进行举例说明,实际应用中,可以根据需要而将上述处理分配由不同的程序模块完成,即将装置的内部结构划分成不同的程序模块,以完成以上描述的全部或者部分处理。另外,上述实施例提供的同步装置与同步方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图12为本发明实施例提供的另一种处理装置的结构示意图。所述装置120包括:处理器1201和用于存储能够在所述处理器上运行的计算机程序的存储器1202;其中,在第一实施例中,所述处理器1201用于运行所述计算机程序时,执行:确定第一节点符合第一预设条件且自身符合第二预设条件时,向至少一个第二节点发送第一请求消息;所述第二节点为服务器集群中除自身外的其他节点;接收所述至少一个第二节点发送的第一答复消息,根据所述至少一个第二节点发送的第一答复消息,确定预备主节点;向所述预备主节点发送第二请求消息,接收所述预备主节点发送的第二答复消息,根据所述第二答复消息确定主节点。
在一实施例中,所述处理器1201还用于运行所述计算机程序时,执行:所述确定第一节点符合第一预设条件且自身符合第二预设条件,包括:确定在预设时间段内未收到所述第一节点发送的心跳信号且确定自身的标识符合预设节点条件。所述第一答复消息,包括:第二节点确定的预备节点的标识和确定预备节点的标识时对应的任期值。
在一实施例中,所述处理器1201还用于运行所述计算机程序时,执行:从所述至少一个第二节点中各第二节点发送的预备节点的标识中,确定标识数量符合预设数量要求的预备节点,作为预备主节点。
在一实施例中,所述处理器1201还用于运行所述计算机程序时,执行:确定所述第二答复消息为确认消息时,确定所述预备主节点为主节点;确定所述第二答复消息为否认消息时,确定所述预备主节点的下一节点为新预备主节点,重新向所述新预备主节点发送第二请求消息,直至确定主节点。
在一实施例中,所述处理器1201还用于运行所述计算机程序时,执行:将所述主节点的标识和所述主节点的任期值,发送给所述至少一个第二节点。
在第二实施例中,所述处理器1201用于运行所述计算机程序时,执行:接收第三节点发送的第一请求消息,根据所述第一请求消息和服务器集群中节点数量确定第一答复消息,向所述第三节点发送第一答复消息;接收所述第三节点发送的第二请求消息,根据所述第二请求消息确定第二答复消息,向所述第三节点发送所述第二答复消息,用以告知自身是否为主节点。
在一实施例中,所述处理器1201还用于运行所述计算机程序时,执行:确定第一任期值,根据所述第一请求消息和所述第一任期值确定第二任期值;根据所述第二任期值和服务器集群中节点数量,确定预备节点的标识;根据所述第二任期值和所述预备节点的标识生成所述第一答复消息。
在一实施例中,所述处理器1201还用于运行所述计算机程序时,执行:确定所述第三任期值与自身的任期值相同时,将确认消息作为所述第二答复消息;确定所述第三任期值与自身的任期值不同时,将否认消息作为所述第二答复消息。所述第二请求消息,包括:第三任期值;所述第三任期值为确定预备节点的标识时对应的任期值。
在第三实施例中,所述处理器1201用于运行所述计算机程序时,执行:确定遗漏操作项队列和至少一个第一操作项;所述遗漏操作项队列,包括至少一个未执行的第二操作项;向副节点发送所述遗漏操作项队列和所述至少一个第一操作项;所述遗漏操作项队列和所述至少一个第一操作项由所述副节点接收并且并行处理所述至少一个未执行的第二操作项和所述至少一个第一操作项。
在一实施例中,所述处理器1201还用于运行所述计算机程序时,执行:确定至少一个第二操作项,向至少一个副节点发送所述至少一个第二操作项;接收至少一个副节点发送的操作结果消息;所述操作结果消息携带有副节点的标识和已处理的第二操作项的标识;根据所述副节点的标识、所述已处理的第二操作项的标识和确定的所述至少一个第二操作项,确定至少一个未执行的第二操作项;根据所述至少一个未执行的第二操作项,确定所述遗漏操作项队列。
在一实施例中,所述处理器1201还用于运行所述计算机程序时,执行:更新所述遗漏操作项队列;所述更新遗漏操作项队列,包括以下任意一种情况:确定预设数量的副节点发送第三操作项的操作结果消息、所述第三操作项属于所述遗漏操作项队列且所述第三操作项无依赖的操作项时,从所述遗漏操作项队列中删除所述第三操作项;确定预设数量的副节点发送第三操作项的操作结果消息、所述第三操作项属于所述遗漏操作项队列且所述第三操作项所依赖的第四操作项已执行时,从所述遗漏操作项队列中删除所述第三操作项。
在一实施例中,所述处理器1201还用于运行所述计算机程序时,执行:发送所述第三操作项已执行的消息;接收未发送第三操作项的操作结果消息的副节点发送的第三请求消息;向所述未发送第三操作项的操作结果消息的副节点发送所述第三操作项。
在第四实施例中,所述处理器1201用于运行所述计算机程序时,执行:接收主节点发送的遗漏操作项队列和至少一个第一操作项;确定所述遗漏操作项队列中包括的至少一个未执行的第二操作项;并行处理所述至少一个第一操作项和所述至少一个未执行的第二操作项。
在一实施例中,所述处理器1201还用于运行所述计算机程序时,执行:接收第三操作项已执行的消息,向所述主节点发送第三请求消息,用以请求执行第三操作项;接收所述主节点发送的所述第三操作项,处理所述第三操作项并向主节点发送操作结果消息。
需要说明的是:上述实施例提供的主节点的确定装置与主节点的确定方法实施例属于同一构思,同步装置与同步方法属于同一构思,其具体实现过程分别可以详见方法实施例,这里不再赘述。
实际应用时,所述装置120还可以包括:至少一个网络接口1203。装置120中的各个组件通过总线系统1204耦合在一起。可理解,总线系统1204用于实现这些组件之间的连接通信。总线系统1204除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图5中将各种总线都标为总线系统1204。其中,所述处理器1204的个数可以为至少一个。网络接口1203用于装置120与其他设备之间有线或无线方式的通信。
本发明实施例中的存储器1202用于存储各种类型的数据以支持装置120的操作。
上述本发明实施例揭示的方法可以应用于处理器1201中,或者由处理器1201实现。处理器1201可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器1201中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器1201可以是通用处理器、数字信号处理器(DSP,DiGital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器1201可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本发明实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器1202,处理器1201读取存储器1202中的信息,结合其硬件完成前述方法的步骤。
在示例性实施例中,装置120可以被一个或多个应用专用集成电路(ASIC,Application Specific Integrated Circuit)、DSP、可编程逻辑器件(PLD,ProgrammableLogic Device)、复杂可编程逻辑器件(CPLD,Complex Programmable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable Gate Array)、通用处理器、控制器、微控制器(MCU,Micro Controller Unit)、微处理器(Microprocessor)、或其他电子元件实现,用于执行前述方法。
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,在第一实施例中,所述计算机程序被处理器运行时,执行:确定第一节点符合第一预设条件且自身符合第二预设条件时,向至少一个第二节点发送第一请求消息;所述第二节点为服务器集群中除自身外的其他节点;接收所述至少一个第二节点发送的第一答复消息,根据所述至少一个第二节点发送的第一答复消息,确定预备主节点;向所述预备主节点发送第二请求消息,接收所述预备主节点发送的第二答复消息,根据所述第二答复消息确定主节点。
在一实施例中,所述计算机程序被处理器运行时,执行:所述确定第一节点符合第一预设条件且自身符合第二预设条件,包括:确定在预设时间段内未收到所述第一节点发送的心跳信号且确定自身的标识符合预设节点条件。所述第一答复消息,包括:第二节点确定的预备节点的标识和确定预备节点的标识时对应的任期值。
在一实施例中,所述计算机程序被处理器运行时,执行:从所述至少一个第二节点中各第二节点发送的预备节点的标识中,确定标识数量符合预设数量要求的预备节点,作为预备主节点。
在一实施例中,所述计算机程序被处理器运行时,执行:确定所述第二答复消息为确认消息时,确定所述预备主节点为主节点;确定所述第二答复消息为否认消息时,确定所述预备主节点的下一节点为新预备主节点,重新向所述新预备主节点发送第二请求消息,直至确定主节点。
在一实施例中,所述计算机程序被处理器运行时,执行:将所述主节点的标识和所述主节点的任期值,发送给所述至少一个第二节点。
第二实施例中,所述计算机程序被处理器运行时,执行:接收第三节点发送的第一请求消息,根据所述第一请求消息和服务器集群中节点数量确定第一答复消息,向所述第三节点发送第一答复消息;接收所述第三节点发送的第二请求消息,根据所述第二请求消息确定第二答复消息,向所述第三节点发送所述第二答复消息,用以告知自身是否为主节点。
在一实施例中,所述计算机程序被处理器运行时,执行:确定第一任期值,根据所述第一请求消息和所述第一任期值确定第二任期值;根据所述第二任期值和服务器集群中节点数量,确定预备节点的标识;根据所述第二任期值和所述预备节点的标识生成所述第一答复消息。
在一实施例中,所述计算机程序被处理器运行时,执行:确定所述第三任期值与自身的任期值相同时,将确认消息作为所述第二答复消息;确定所述第三任期值与自身的任期值不同时,将否认消息作为所述第二答复消息。所述第二请求消息,包括:第三任期值;所述第三任期值为确定预备节点的标识时对应的任期值;
在第三实施例中,所述计算机程序被处理器运行时,执行:确定遗漏操作项队列和至少一个第一操作项;所述遗漏操作项队列,包括至少一个未执行的第二操作项;向副节点发送所述遗漏操作项队列和所述至少一个第一操作项;所述遗漏操作项队列和所述至少一个第一操作项由所述副节点接收并且并行处理所述至少一个未执行的第二操作项和所述至少一个第一操作项。
在一实施例中,所述计算机程序被处理器运行时,执行:确定至少一个第二操作项,向至少一个副节点发送所述至少一个第二操作项;接收至少一个副节点发送的操作结果消息;所述操作结果消息携带有副节点的标识和已处理的第二操作项的标识;根据所述副节点的标识、所述已处理的第二操作项的标识和确定的所述至少一个第二操作项,确定至少一个未执行的第二操作项;根据所述至少一个未执行的第二操作项,确定所述遗漏操作项队列。
在一实施例中,所述计算机程序被处理器运行时,执行:更新所述遗漏操作项队列;所述更新遗漏操作项队列,包括以下任意一种情况:确定预设数量的副节点发送第三操作项的操作结果消息、所述第三操作项属于所述遗漏操作项队列且所述第三操作项无依赖的操作项时,从所述遗漏操作项队列中删除所述第三操作项;确定预设数量的副节点发送第三操作项的操作结果消息、所述第三操作项属于所述遗漏操作项队列且所述第三操作项所依赖的第四操作项已执行时,从所述遗漏操作项队列中删除所述第三操作项。
在一实施例中,所述计算机程序被处理器运行时,执行:发送所述第三操作项已执行的消息;接收未发送第三操作项的操作结果消息的副节点发送的第三请求消息;向所述未发送第三操作项的操作结果消息的副节点发送所述第三操作项。
在第四实施例中,所述计算机程序被处理器运行时,执行:接收主节点发送的遗漏操作项队列和至少一个第一操作项;确定所述遗漏操作项队列中包括的至少一个未执行的第二操作项;并行处理所述至少一个第一操作项和所述至少一个未执行的第二操作项。
在一实施例中,所述计算机程序被处理器运行时,执行:接收第三操作项已执行的消息,向所述主节点发送第三请求消息,用以请求执行第三操作项;接收所述主节点发送的所述第三操作项,处理所述第三操作项并向主节点发送操作结果消息。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本发明各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种主节点的确定方法,其特征在于,所述方法包括:
确定第一节点符合第一预设条件且自身符合第二预设条件时,向至少一个第二节点发送第一请求消息;所述第二节点为服务器集群中除自身外的其他节点;
接收所述至少一个第二节点发送的第一答复消息,其中,所述第一答复消息包括:第二节点确定的预备节点的标识;
根据所述至少一个第二节点发送的第一答复消息,确定标识数量符合预设数量要求的预备节点,作为预备主节点;
向所述预备主节点发送第二请求消息,接收所述预备主节点发送的第二答复消息,根据所述第二答复消息确定主节点。
2.根据权利要求1所述的方法,其特征在于,所述确定第一节点符合第一预设条件且自身符合第二预设条件,包括:
确定在预设时间段内未收到所述第一节点发送的心跳信号且确定自身的标识符合预设节点条件。
3.根据权利要求1所述的方法,其特征在于,所述根据所述第二答复消息确定主节点,包括:
确定所述第二答复消息为确认消息时,确定所述预备主节点为主节点;
确定所述第二答复消息为否认消息时,确定所述预备主节点的下一节点为新预备主节点,重新向所述新预备主节点发送第二请求消息,直至确定主节点。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将所述主节点的标识和所述主节点的任期值,发送给所述至少一个第二节点。
5.一种主节点的确定方法,其特征在于,所述方法包括:
第二节点接收第三节点发送的第一请求消息,根据所述第二节点更新后的任期值和服务器集群中节点数量的余数,确定预备节点的标识;根据所述第二节点更新后的任期值和所述预备节点的标识确定第一答复消息,向所述第三节点发送第一答复消息;
所述第二节点中的预备主节点接收所述第三节点发送的第二请求消息,根据所述第二请求消息确定第二答复消息,向所述第三节点发送所述第二答复消息,用以告知自身是否为主节点,其中,所述预备主节点经由至少一个所述第二节点选举产生。
6.根据权利要求5所述的方法,其特征在于,所述根据所述第二节点更新后的任期值和服务器集群中节点数量的余数,确定预备节点的标识,包括:
确定第一任期值,根据所述第一请求消息和所述第一任期值确定第二节点更新后的任期值;
根据所述第二节点更新后的任期值和服务器集群中节点数量,确定预备节点的标识。
7.根据权利要求5所述的方法,其特征在于,所述第二请求消息,包括:第三任期值;所述第三任期值为确定预备节点的标识时对应的任期值;
所述根据所述第二请求消息确定第二答复消息,包括:
确定所述第三任期值与自身的任期值相同时,将确认消息作为所述第二答复消息;
确定所述第三任期值与自身的任期值不同时,将否认消息作为所述第二答复消息。
8.一种处理装置,其特征在于,所述装置包括:处理器和用于存储能够在处理器上运行的计算机程序的存储器;其中,
所述处理器用于运行所述计算机程序时,执行权利要求1至7任一项所述方法的步骤。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910662799.3A CN110417882B (zh) | 2019-07-22 | 2019-07-22 | 主节点的确定方法、装置和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910662799.3A CN110417882B (zh) | 2019-07-22 | 2019-07-22 | 主节点的确定方法、装置和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110417882A CN110417882A (zh) | 2019-11-05 |
CN110417882B true CN110417882B (zh) | 2022-04-08 |
Family
ID=68362404
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910662799.3A Active CN110417882B (zh) | 2019-07-22 | 2019-07-22 | 主节点的确定方法、装置和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110417882B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022021191A1 (zh) * | 2020-07-30 | 2022-02-03 | 华为技术有限公司 | 软件升级的方法、装置和系统 |
CN113965578B (zh) * | 2021-10-28 | 2024-01-02 | 上海达梦数据库有限公司 | 一种集群中主节点的选举方法、装置、设备及存储介质 |
CN114448769B (zh) * | 2022-04-02 | 2022-07-01 | 支付宝(杭州)信息技术有限公司 | 一种基于共识系统的节点竞选投票方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108616566A (zh) * | 2018-03-14 | 2018-10-02 | 华为技术有限公司 | raft分布式系统选主方法、相关设备及系统 |
CN108810100A (zh) * | 2018-05-22 | 2018-11-13 | 郑州云海信息技术有限公司 | 一种主节点的选举方法、装置及设备 |
CN109995835A (zh) * | 2017-12-29 | 2019-07-09 | 浙江宇视科技有限公司 | 主节点选举方法、装置和分布式存储系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10749954B2 (en) * | 2016-12-20 | 2020-08-18 | Futurewei Technologies, Inc. | Cross-data center hierarchical consensus scheme with geo-aware leader election |
-
2019
- 2019-07-22 CN CN201910662799.3A patent/CN110417882B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109995835A (zh) * | 2017-12-29 | 2019-07-09 | 浙江宇视科技有限公司 | 主节点选举方法、装置和分布式存储系统 |
CN108616566A (zh) * | 2018-03-14 | 2018-10-02 | 华为技术有限公司 | raft分布式系统选主方法、相关设备及系统 |
CN108810100A (zh) * | 2018-05-22 | 2018-11-13 | 郑州云海信息技术有限公司 | 一种主节点的选举方法、装置及设备 |
Non-Patent Citations (1)
Title |
---|
分布式数据交换平台的主节点选举算法的优化研究.;胡潇.;《中国优秀硕士学位论文全文数据库信息科技辑》;20190415(第4期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110417882A (zh) | 2019-11-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20230273937A1 (en) | Conditional master election in distributed databases | |
CN107888657B (zh) | 低延迟分布式存储系统 | |
CN110417882B (zh) | 主节点的确定方法、装置和存储介质 | |
US7765186B1 (en) | Update-anywhere replication of distributed systems | |
US7555516B2 (en) | Fast Paxos recovery | |
US7426653B2 (en) | Fault tolerant distributed lock management | |
US8005888B2 (en) | Conflict fast consensus | |
US20120102355A1 (en) | Consistent messaging with replication | |
CN105512266A (zh) | 一种实现分布式数据库操作一致性的方法及装置 | |
CN105493474B (zh) | 用于支持用于同步分布式数据网格中的数据的分区级别日志的系统及方法 | |
CN107623703B (zh) | 全局事务标识gtid的同步方法、装置及系统 | |
CN109144748B (zh) | 一种服务器、分布式服务器集群及其状态驱动方法 | |
CN110635941A (zh) | 一种数据库节点集群故障迁移方法与装置 | |
CN108108119B (zh) | 一种可扩展的存储集群事物的配置方法及装置 | |
EP1894096A1 (en) | Apparatus, system, and method for facilitating communication between an enterprise information system and a client | |
US7240088B2 (en) | Node self-start in a decentralized cluster | |
CN103782277A (zh) | 用于管理便携式计算装置上的平行资源请求的方法及系统 | |
US7748010B1 (en) | Global attribute uniqueness (GAU) using an ordered message service (OMS) | |
CN116232893A (zh) | 分布式系统的共识方法、装置、电子设备及存储介质 | |
CN112333283B (zh) | 自主高端存储阵列系统架构 | |
CN113783921A (zh) | 创建缓存组件的方法和装置 | |
WO2022130005A1 (en) | Granular replica healing for distributed databases | |
CN113918531A (zh) | 分布式表格系统的数据同步方法、装置以及服务端设备 | |
CN113037797A (zh) | 数据处理方法及其装置 | |
WO2024066001A1 (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 |