基于操作序列号的分布式数据库有权重选举方法

文档序号:9217273阅读:524来源:国知局
基于操作序列号的分布式数据库有权重选举方法
【技术领域】
[0001]本发明涉及一种分布式数据库选举方法,尤其涉及一种基于操作序列号的分布式数据库有权重选举方法,属于数据库管理技术领域。
【背景技术】
[0002]如今,分布式计算系统中主从配置已经成为一个广泛被人接受的概念,而其中对于数据一致性保障的核心在于选举机制。在任意时刻一个集群中只能有一个节点作为主节点处理读写操作,其他节点则作为热备以防主节点出现故障。
[0003]现在,通用的做法是使用类似Paxos算法的选举机制,在多个节点之间分为选举者和投票者等不同角色,控制集群最后一定会选举出最多一个节点为主节点,并且其他全部节点均一致承认该节点为主节点。这种机制的使用是为了确保一个集群环境中,所有可以提供服务的节点均共同承认最多一个节点成为主节点。否则如果在网络不稳定的情况下,一个集群内存在两个或以上的节点认为自己是主节点并提供写入服务,则可能会造成数据冲突导致数据损坏。
[0004]而在选举的过程当中,传统的做法是假设集群中所有节点为对等关系,因此任何节点均可以发起升主的投票,并且任何节点都有同样的概率成为主节点。但是在实际的数据库操作中,当主节点不停地将自己接收到的数据发布给其他从节点时,必定有的从节点在网络上先接收到数据进行处理,这样该从节点同步的数据自然比其他节点更多,该从节点自然会包含更加“靠近”当前操作的数据。这种情况下,如果主节点失败,从节点之间的选举必须以“最靠近”当前操作的数据节点为主节点,其他节点为从该节点同步数据,以保证尽可能最多的用户操作被保留下来。所以,对等选举机制在一个分布式数据库中无法满足需求。
[0005]为了解决上述问题,谈兴秋在论文《增量同步约束条件下的多节点间主节点选举算法》(刊载于《现在电子技术》2013年第14期第36卷)中公开了一种多节点间主节点选举算法,选举一个节点作为主节点,提供数据写服务,其他节点作为备节点提供读服务,主节点与备节点之间采用增量同步方式同步数据系统运行模式的需要,通过一个基于数据版本作为主要约束条件的主备选举算法实现。并规定了在数据增量同步条件下进行主备选举时,需要遵循的条件,描述了在选举过程中,节点状态、各个状态转换关系以及在各个状态下需要进行的相关处理。
[0006]但是,在主从同步系统中,如果主节点发生故障,从节点并不能发现问题,而是依靠人工干预将主节点降为从节点,并给从节点下达升主命令。不能保障系统在最短的时间内发现主节点故障,并从原有的从节点中按照权重选举出一个新的主节点做单一的写入操作。

【发明内容】

[0007]针对现有技术的不足,本发明所要解决的技术问题在于提供一种基于操作序列号的分布式数据库有权重选举方法。
[0008]为实现上述发明目的,本发明采用下述的技术方案:
[0009]一种基于操作序列号的分布式数据库有权重选举方法,包括如下步骤:
[0010]SI,在分布式数据库运行时,通过发送包含操作序列号的心跳消息进行节点间信息的同步;
[0011]S2,通过异常检测判断集群中是否存在正常的主节点,当存在正常的主节点时,根据心跳消息更新本地节点存储的操作序列号;否则,转向步骤S3 ;
[0012]S3,当从节点检测到集群中不存在正常的主节点时,向集群中其他节点发送请求成为主节点的消息,并根据操作序列号选举出主节点。
[0013]其中较优地,在步骤SI中,通过发送包含操作序列号的心跳消息进行节点间信息的同步,包括如下步骤:
[0014]S11,读取本地节点当前的操作序列号并保存;
[0015]S12,设置定时器触发时间,当定时器触发时间到达后,本地节点将当前的操作序列号写入心跳消息,遍历集群中所有被标记为正常的节点,并向各个节点发送;
[0016]S13,接收到其他节点的心跳消息后,解析其中包含的操作序列号并保存在缓存中;
[0017]S14,集群内的节点通过发送和接收包含操作序列号的心跳消息完成节点间信息的同步。
[0018]其中较优地,所述心跳消息包含节点的当前角色、本地节点状态和本地节点最新的事务日志号;所述节点状态为本地节点的运行状态,包含正常和异常,其中,异常包括非正常和未知;当某节点的触发时间达到后,标记为异常的节点不再被遍历。
[0019]其中较优地,每个节点对其他节点传入的心跳消息均保存一个数据结构,所述数据结构标明最近得到的心跳消息的时间以及发送心跳消息的节点状态。
[0020]其中较优地,在步骤S2中,判断集群中是否存在正常的主节点,包括判断集群中主节点是否存在以及集群中的主节点是否出现断连;
[0021]其中,判断集群中的主节点是否出现断连包括如下步骤:
[0022]S211,从节点监听心跳消息,并设置定时器触发时间;
[0023]S212,定时器触发时间到达后,判断上一次接收到的主节点的心跳消息的时间加上所述主节点的超时时间,与当前时间的差值,如果所述差值大于当前时间则心跳消息没有超时,继续等待;
[0024]S213,如果所述差值小于当前时间,则将主节点在本地节点的数据结构中的状态置为断连状态。
[0025]其中较优地,所述超时时间通过节点之前收到的心跳消息的时间进行实时计算得出。
[0026]其中较优地,在步骤S2中,判断集群中主节点是否存在,包括如下步骤:
[0027]S221,主节点监听心跳消息,并设置定时器触发时间;
[0028]S222,定时器触发时间到达后,判断上一次接收到的从节点的心跳消息的时间加上该从节点的超时时间,与当前时间的差值,如果差值大于当前时间则心跳消息没有超时,继续等待;否则,将该从节点置为断连状态,转向步骤S223 ;
[0029]S223,判断该集群中正常节点的数量,如果正常节点的数量小于或等于集群中半数节点的数量,则将该主节点的当前角色降为从节点,否则,继续监听心跳消息。
[0030]其中较优地,在步骤S2中,当存在正常的主节点时,根据心跳消息更新本地节点存储的操作序列号,包括如下步骤:
[0031]S231,实时监听心跳消息;
[0032]S232,收到节点的心跳消息后解析其操作序列号,并判断节点状态;
[0033]S223,如果节点状态为正常,则更新本地节点存储的所述节点的最新的操作序列号,存入所述节点的数据结构中,并根据数据结构中最近接收的心跳消息的时间计算新的超时时间。
[0034]其中较优地,在步骤S3中,向集群中其他节点发送请求成为主节点的消息,并根据操作序列号选举出主节点,:
[0035]S31,当从节点检测到集群中不存在正常的主节点时,进入静默期,如果所述从节点在静默期收到其他节点的投票请求,则根据自身信息进行投票检验,并投票表决;否则,进入备节点阶段;
[0036]S32,判断自身条件是否满足投票条件,当自身条件满足投票条件时,向其他节点发起投票操作;
[0037]S33,其他节点根据自身信息进行投票检验,并投票表决;若其他节点返回拒绝,或者在一个投票周期内没有收到集群中超过半数节点的同意请求,则继续步骤S32,否则转向步骤S34 ;
[0038]S34,向所有进行过表决的节点发起当选主节点的宣布请求,进行过表决的节点收到当选主节点的宣布请求后,根据步骤S31中的自身信息再次判断,若校验通过则返回确认,否则拒绝;
[0039]S35,发起选举的从节点接收其他节点的宣布表决,当存在反对票
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1