一种数据库集群节点间数据同步系统的制作方法

文档序号:14555053阅读:224来源:国知局
本发明涉及数据处理领域,尤其涉及一种数据库集群节点间数据同步系统。
背景技术
::在分布式数据库系统中,解决单点故障和单点性能瓶颈问题,主要有三种方法:主从复制(masterslavereplication)、故障转移群集(failoverclustering,也称为主备模式)和多主复制(multi-masterreplication)。主从复制中,集群中的一个节点被指定为主节点,只有该主节点允许写操作,其它节点只提供读操作,只允许一个节点进行写操作可以更容易实现集群数据的一致性。在主备模式中,正常情况下主节点对外提供服务,一个或多个备节点从主节点中拉取数据进行同步;当主节点异常时,通过选举算法选取一个备节点取代主节点继续对外提供服务。在多主复制中,所有主节点都能对外提供读写服务,多主复制系统负责将某个主节点的数据更改传递给其余主节点,并解决不同主节点成员之间并发更改导致的数据冲突。不论采用上述三种方式中的哪种方式解决单点故障和单点性能瓶颈问题,最重要的都是实现多个节点之间的数据同步。现有数据库数据同步方法为两类:基于事务的同步方法和基于日志的同步方法,这两种方法都有同步和异步的区别。前者中的异步事务同步方法把数据更改提交到延迟事务队列,集群中的所有节点会周期性地执行队列中的事务;前者中的同步事务同步方法使用两阶段提交的方式保证集群中所有节点之间的数据一致性。后者中的异步日志同步方法不等待所有节点返回日志同步成功消息则直接返回;后者中同步日志同步方法则会等待直到所有节点返回日志同步成功才返回操作成功的结果。虽然基于事务的同步方法和基于日志的同步方法实现了数据库集群中节点之间的数据同步,但仍存在以下不足:1、基于事务的同步方法和基于日志的同步方法是针对整个数据库实例,无法做到db级或表级的数据同步。2、现有数据库同步方法中异步方式可能导致数据库集群数据不一致的问题,例如:从数据库中只有部分节点日志同步成功时,如果主数据库宕机,就会造成从数据库节点之间数据的不一致。3、现有数据库同步方法可能因为某个节点阻塞导致性能低下的问题同步数据同步方法虽然保证了数据的一致性,但它要求所有从节点都返回日志同步结果后才能实现同步,如果某个从数据库由于网络延迟或者性能问题迟迟没有返回日志同步结果,就会导致阻塞整个集群。4、现有数据库同步方法都是单方向的,只能将数据从主数据库同步到从数据库,而无法实现任意节点之间的数据同步。技术实现要素:本发明的目的在于提供一种数据库集群节点间数据同步系统,从而解决现有技术中存在的前述问题。为了实现上述目的,本发明所述数据库集群节点间数据同步系统,所述系统包括:配置单元:负责将数据库集群中需要实现数据同步的多个节点和/或多个表组建成同一个分组;元数据存储单元:存储节点所属分组的信息、任意一个分组中包含的节点信息和/或表信息;元数据判断单元:遍历sql语句中涉及的所有表,根据元数据存储单元中的表信息判断该sql语句是否涉及同步表,如果否,则正常执行sql语句;如果是,则将该同步表信息和sql语句发送给读写判断单元;读写判断单元:判断接收到的sql语句是同步表的写操作还是读操作,如果是写操作,则将该同步表信息发送给paxos同步单元;如果是读操作,则将该同步表信息发送给日志重现单元;paxos同步单元:根据接收到的同步表信息,进行该同步表所属分组中多个节点之间的日志同步并执行写操作,同时,将写操作日志保存在各个节点的日志存储单元;日志存储单元:存储同步表的写操作日志;日志重现单元:依据同步表信息从日志存储单元中获取该同步表的写操作日志,通过日志重做使该同步表达到最新的一致状态,然后再进行读操作。优选地,所述paxos同步单元实现信息同步,具体为:s1,将客户端连接,以对同步表进行写操作的集群节点作为提议者,提议者选择一个提议序号n,所述提议序号n采用高位时间戳和低位服务器id的方式生成;s2,提议者向数据库集群的所有接受者发送准备请求,所述准备请求中携带提议编号n;s3,任意一个接受者收到所述准备请求后,进行如下:所述准备请求中携带提议编号n比该接受者之前响应过的其他请求携带的提议编号都大,则该接受者响应所述准备请求,并承诺不会响应之后接收到的其它任何提议编号小于等于n的请求;如果在接受所述准备请求前还响应过其他请求,则将最大提议编号及其对应的内容反馈给提议者;如果在接受所述准备请求前未响应过其他请求,则反馈给提议者空值;s4,当提议者接收到大多数接受者的响应后,检查所有响应中是否有已被接受的提议返回;如果任意一个响应中返回值不为空,则有已被接受的提议返回,将序号最高的提议对应的值替代该提议的初始值作为计算值,进入s5;如果所有响应中返回值都是空,将提议的初始值作为计算值,进入s5;s5,提议者向集群中的所有接受者广播接受请求,所述接受请求中包括提议序号n和s4中的计算值;s6,接受者收到所述接受请求后,将接受请求中的提议序号和当前minproposal进行比较,如果接收到的提议序号小于当前minproposal,则拒绝该接受请求,并将当前minproposal作为返回值反馈给提议者;如果接收到的提议序号大于等于当前minproposal,则接受该接受请求,然后保存该接受请求中的提议序号及计算值,同时,将minproposal更新为接受请求中的提议序号,然后将最新minproposal作为返回值反馈给提议者;s7,当提议者接收到大多数接受者的响应后,提议者将收到返回值与所述接受请求的提议编号n进行比较,判断是否存在任意一个返回值大于提议者的提议编号,如果是,则返回s1,进行下一轮信息同步,下一轮信息同步的提议者选取的提议编号为所有返回值中提议编号最大的下一个值;如果否,则所有接受者都接受所述接受请求,所述接受请求中的提议值被选定,达到一致性状态,信息同步结束执行。本发明的有益效果是:本发明所述数据库集群节点间数据同步系统,实现了数据库集群中多个节点之间进行数据同步,且支持基于表级、细粒度的同步配置,支持部分或全部节点之间的数据同步,而且更改同步策略也非常简单,只需要执行一些同步配置命令(也是一些sql语句),不需要重新修改数据库配置文件。另外,本发明所述数据库集群节点间数据同步系统既能保证数据的强一致性,又具有较高的性能,解决现有数据库同步方法中异步方式可能导致数据库集群数据不一致的问题,也解决了同步方式可能因为某个节点阻塞导致性能低下的问题;最后,本发明所述数据库集群节点间数据同步系统也支持不同方向的数据同步,没有只能将数据从主数据库同步到从数据库的限制。附图说明图1是数据库集群节点间数据同步系统的结构示意图;图2是paxos协议流程。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。关于本申请中的英文或英文缩写的说明:1、group表示分组,分组中包括需要实现数据同步的节点和表,并将分组中包括的表称之为同步表。2、table表示表,redo表示重做。3、proposer:提议发起者,它向集群发送提议请求,以便决定提议的值是否可以被批准。4、acceptor:提议接受者,它负责处理接收到的提议,根据存储的一些状态来决定是否接受该提议。5、replica:分布式系统中的一个节点,可以同时担任提议发起者和提议接受者。6、proposalnum:提议编号,编号高的提议具有高优先级。7、paxosinstance:paxos中用来对某个值达成一致意见的一个完整过程。8、acceptedproposal:在一个paxosinstance内,已被接受的提议。9、acceptedvalue:在一个paxosinstance内,已被接受的提议对应的值。10、minproposal:在一个paxosinstance内,当前已接收到的提议中最小的提议编号,该值会不断进行更新。本发明所述数据库集群节点间数据同步系统的几个关键点:关键点1,本发明实现细粒度数据同步。通过配置单元将数据库集群中的若干个节点组成group,通过将table添加到group,可以实现基于table级别的若干节点之间的数据同步。而原有的同步方法都是基于整个数据库实例的,而且重新调整需要同步的节点时,需要重新编写复杂的配置文件。关键点2,本发明保证强一致性的同时具有高性能。通过分布式一致性协议paxos实现的数据库集群中多个节点之间的数据同步能保证数据的强一致性,且只要大部分节点在线并能相互通信,就能正常对外提供服务。因此本发明所述系统既能保持数据库集群数据的强一致性,解决原有异步复制可能导致集群数据不一致问题,又不要求所有节点都保持正常工作状态,解决原有同步复制方法可能因为个别节点阻塞导致性能低下的问题。关键点3,本发明支持不同方向的数据同步。通过paxos协议实现的同步系统中各个数据库节点之间是对等的,并没有主从之分。因此本发明所述系统能解决现有数据库不同节点间数据同步方法中只能将数据从主数据库同步到从数据库的缺陷。实施例本实施例所述数据库集群节点间数据同步系统包括:一、配置单元扩充了数据库现有的语法解析器,支持创建组(creategroup)以及将表添加到组(inserttableintogroup)等sql操作,从而支持若干节点之间表级别的数据同步操作。二、元数据存储单元在数据库中添加了一些系统表用于存储配置单元提供的配置信息。三、日志存储单元在数据库中添加了一些系统表用于存储同步表的写操作日志。四、元数据判断单元会遍历sql语句中涉及的表,根据元数据存储单元提供的同步表信息判断该sql语句是否涉及同步表。如果不涉及任何同步表,则正常执行sql语句;如果涉及同步表,则将该sql语句发送给读写判断单元进行进一步判断。五、读写判断单元利用了现有的数据库语法解析器,对sql语句进行语法解析,从而判断是写操作还是读操作(selectstmt),其中,在sql语句中写操作的语法为insertstmt、deletestmt和updatestmt的一种或多种;在sql语句中读操作的语法为selectstmt。六、对于写操作,paxos同步单元会自动将该写操作对应的日志在数据库集群的不同节点之间进行同步,然后再执行写操作。七、对于读操作,日志重现单元会从日志存储单元中获取该同步表的写操作日志并通过日志redo使同步表达到最新的一致状态,然后再进行读操作。在本实施例中,paxos同步单元是实现不同节点之间数据同步的关键。该paxos同步单元主要实现分布式一致性协议paxos。paxos协议基于消息传递,解决了如何在分布式系统中就某个值(决议)达成一致的问题。在本实施例中,paxos同步单元的目的是为了确定第i条日志是什么写操作,最终确定每条写操作日志。日志重现单元只需要按照顺序redo这些日志即可实现不同节点之间的数据同步。paxos协议的核心实现paxosinstance主要包括准备(prepare)和接受(accept)两个阶段。如图2所示paxos协议的完整流程,整个过程由提议者(proposers)主导。提议者(proposers)会由某个它希望选定的值作为开始,然后经历准备阶段(preparephase)和接受阶段(acceptphase)两轮消息广播。具体过程如下:1)提议者(proposers)选择一个提议序号n,为了保证提议序号递增,可以采用高位时间戳和低位服务器id的方式生成。2)第一轮消息广播,提议者(proposers)向集群的所有接受者(acceptors)发送准备请求(prepare(n)),请求消息中带有自己的提议编号n。这实际上通过一个远程过程调用(rpc)完成。3)当接受者(acceptor)收到准备请求时,它会做出“两个承诺,一个应答”,两个承诺是指:1承诺永远不会应答不大于minproposal(n<=minproposal)的准备请求,2承诺永远不会接受小于minproposal(n<minproposal)的接受请求(随着协议的进行,变量minproposal的值会自动增长,如果当前的请求具有最高的提议编号(n>minproposal),那么就会更新minproposal);一个应答是指:返回已经接受过的提议中提议编号最大的提议的内容,如果没有已经接受过的提议则返回空值。4)提议者(proposers)会等待大多数接受者(acceptors)的响应,并检查是否有已被接受的提议返回。如果有接受者(acceptor)返回已被接受的提议,就会用其中序号最高的提议对应的值替代它所提议的初始值,然后用这个值继续后面的计算;如果没有接受者(acceptor)返回已被接受的提议,就用自己的初始值继续后面的计算。到这里就完成了paxos协议的准备阶段。5)在接受阶段,提议者(proposers)会向集群中的所有接受者(acceptors)广播接受请求(accept(n,value))。广播消息中包括一个提议序号n,这个序号必须与准备阶段的值相同,以及一个值,这个值可以是提议者(proposers)所提议的初始值,也可以是从接受者(acceptor)返回的接受值。这是第二个远程过程调用。6)当接受者接收到接受请求后,它会将接受请求的提议序号和自己保存的提议序号minproposal进行比较,根据之前的第二个承诺,如果接收到的提议序号n比保存的序号低(n<minproposal),那么就会拒绝这个接受请求;否则,就会接受这个提议,然后记下这个接受请求的提议序号,以及它的值,并更新当前的提议序号,保证它是最大的。无论接受还是拒绝这个请求,接受者(acceptor)都会返回它当前的提议序号minproposal。这样提议者(proposers)就可以根据这个返回值来判断接受请求是否被接受了。提议者(proposers)会等待直到它接收到多数响应。一旦收到这些响应,它就会通过比较返回值和提议序号来检查是否有接受请求被拒绝。如果接受请求被拒绝了(anyresult>n),那么这次提议需要回到步骤1)重新开始,下一轮提议者可以选取max(results)+1作为提议序号,这样就更有机会在竞争中取胜;否则,就表明所有接受者(acceptor)都接受了请求,此时提议值被选定,达到一致性状态,协议结束执行。通过采用本发明公开的上述技术方案,得到了如下有益的效果:本发明所述数据库集群节点间数据同步系统基于paxos协议,配置需要同步哪些数据库或者哪些表,能实现更细粒度的数据同步。因为paxos协议是强一致性算法,所以不存在异步数据同步可能导致分布式系统不一致的问题;因为paxos协议只需要满足集群半数节点可用并能正常通信时即可对外提供服务,所以也不存在现有同步数据同步方法可能出现的阻塞问题。在paxos协议中,集群中的每个节点既可作为提议者(即主数据库)、又可作为接受者(即从数据库),因此能实现任意方向的数据同步。综上,本发明基于paxos协议的数据库集群节点间数据同步方法很好地解决现有数据库同步方法存在的问题。以上所述仅是本发明的优选实施方式,应当指出,对于本
技术领域
:的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1