基于计算存储分离框架下的冗余存储资源的共识方法和系统

文档序号:29939449发布日期:2022-05-07 14:10阅读:105来源:国知局
1.本发明涉及一种于计算存储分离框架下的冗余存储资源的共识方法和系统,属于电子数字数据处理
技术领域
:。
背景技术
::2.伴随着互联网应用数量的快速增长,各种类型的数据呈现爆炸式增长,各大公司的数据量已经达到eb/zb级别。为了避免单点存储成为系统高可用与高扩展的瓶颈,分布式数据系统通常会采用数据复制技术,即在多个物理节点上保存同一份数据的多个副本。数据副本的引入缩短了用户与服务器之间的距离,降低了访问的延迟。并且,避免了高并发访问下单点失效引起的系统崩溃,提高了系统的可用性与容错性。3.计算存储分离是分布式集群中的一个常见搭建方式。在该框架下,集群中的海量的持久化数据会被集中保存在多个专门的节点中,作为集群的服务存在提供其他节点使用。这些专门保存海量数据的节点称为存储节点,组成集群的冗余存储资源。其他使用存储节点提供服务的节点,统称为计算节点,组成集群的冗余计算资源,可以根据需求部署多种类型的服务。4.提高了系统的可用性与容错性的关键在于,充分利用集群中各种冗余资源,避免单一资源的可用性影响整体的可用性,产生短板效应。以常见共识技术为基础的数据复制技术,在日志复制与leader节点选举的过程中,过多的依赖冗余计算资源,在计算与存储两种冗余资源的利用率上缺少平衡性,造成可用性瓶颈。技术实现要素:5.发明目的:针对现有技术中存在的问题与不足,本发明提供一种基于计算存储分离框架下冗余存储资源的共识方法和系统,该发明基于常见的raft技术,改善集群可用计算资源受较大冲击时的共识技术的整体可用性。常见的raft技术在可用计算资源较少的情况下不可用,而本发明提高共识过程中冗余存储资源的利用率,在保持数据的安全性等共识技术特性的前提下,改善传统共识技术集群的可用性,有效利用冗余存储资源,能够改善计算存储分离框架下的冗余计算资源和存储资源利用率的平衡性。6.技术方案:一种基于计算存储分离框架下冗余存储资源的共识方法,改善可用计算资源较少场景下的系统可用性,保证数据的安全性,并提高计算存储分离框架下raft共识集群的冗余存储资源的利用率;主要包含:7.3)基于冗余存储资源的日志复制过程;8.4)基于冗余存储资源的leader节点选举过程。9.基于冗余存储资源的日志复制过程:10.当客户端向复制状态机服务器集群提交了一个请求,集群中的节点会将该请求写入本地的日志当中。此后,复制状态机服务器集群会尝试将该日志项复制到集群中的所有日志中。当集群中的超过一半的节点,都接受了这个更改,那么该请求将会被提交,并被计算节点中的其他服务执行。这一过程即为日志复制。与常见的共识技术的日志复制过程不同,本技术将日志项写入存储节点中,借助冗余存储资源保证可用性与数据的安全性,只需要少量的运行本技术的计算节点推动。为了保证集群中不会出现冲突的日志项,本技术的日志复制过程,会将整个集群的计算节点划分为两种角色:leader节点和follower节点。集群只有唯一的leader节点推动日志复制过程,将新的客户端请求以日志项的形式,写入存储节点并持久化保存。leader节点复用raft技术维护计算节点中的状态,包含term值、复制日志以及存储节点进展的跟踪。如果由于通信等原因,导致一些日志项没有成功写入存储节点中,那么leader节点按照raft技术的方式,将多个未写入的日志项一并复制到存储节点,直到成功写入。在本技术的日志复制过程中,leader节点的流程如下:11.1)leader节点l收到来自客户端的请求,将其添加到本地的日志中,并将该日志项写入集群中的所有存储节点中,对于每一个存储节点n:12.a)生成msgapp消息ae(t,l→n,ti,e[i+1,i+k],c)写入存储节点n,其中t表示leader节点l当前的term值,l→n表示从节点l写入存储节点n,ti,表示节点l中第i个日志项的term值,e[i+1,i+k]表示节点l中第i+1到i+k个日志项,c表示节点l中前c个日志项已经提交;[0013]b)读取存储节点n来自其他计算节点的更新部分,如果更新部分中term值的最大值tmax超过存储节点的已知的最大term值n.t,将n.t更新为tmax,与此同时分析生成真实日志进展n.e;[0014]c)如果更新后msgapp消息携带的leader节点term值ae.t等于n.t,且msgapp消息携带的日志项片段ae.e添加到n.e中,那么msgapp消息就成功写入存储节点n中。[0015]2)如果集群中超过一半的存储节点都成功写入该日志项,则该日志已提交。节点l将成功提交的结果反馈给客户端。[0016]集群中的其他计算节点都是follower节点,总是定期读取指定的存储节点n,因而每次需要处理的更新规模较大。通过更新的预处理,如果一个msgapp消息m1中的日志项下标-term对(i,ti)在另外一个msgapp消息m2中能找到拥有相同下标和term值的日志项,那么将m2中下标超过i的日志项删除,将m1中的全部日志项添加到m2日志项的尾部。通过依次将多个msgapp合并成一个msgapp,减少存储节点真实日志进展n.e的生成难度。在生成n.e之后,就需要按照n.e来更新本地日志。本技术在日志复制过程中复用raft技术中leader的保活措施,因此只要集群中的leader正常运行,集群中的follower节点就能从对应的存储节点n中读到更新,尽管这些更新可能不会对n.e产生变更。[0017]在整个日志复制的过程中,日志项的复制发生在leader节点和存储节点之间,leader节点与follower节点之间是解耦的,通过存储节点完成更新。即使当前只有一个leader节点在正常运行,只要正常运行的存储节点超过总数的一半,那么日志复制的过程就能够正常运行。[0018]基于冗余存储资源的leader节点选举过程:[0019]本技术依赖leader节点完成日志复制过程,可是在集群初始化或者由于分布式环境下的各类故障导致集群leader节点无法服务时,需要集群及时从其他计算节点中,选举出一个新的leader节点,继续进行日志复制的过程,保证集群的可用性。leader节点选举要求,最终产生的新leader节点必须是全局唯一的,保证日志复制正常运行。在leader节点选举的过程中,整个集群的计算节点划分为两种角色:candidate节点和follower节点,其中candidate节点将msgvote消息保存到存储节点中,如果在存储节点上没有发现相同或者更大的term值,并且存储节点上没有发现比candidate节点更新的日志项,那么就可以确认该选票有效;而follower节点并不参与投票,与日志复制过程中的行为一样,只需要关注当前集群是否有新的leader节点通过leader节点选举产生。为了保证日志复制过程中复制的都是同一个leader节点的日志项,本技术沿用raft技术中的term值对leader节点进行区分。如果发现两个term值的leader节点同时进行日志复制,所有计算节点总是以更大term值的为准。term值每次在leader节点选举时都会增加,每个term值最多选出一个leader节点。follower节点会设置超时时限,在对应的存储节点超过这一时限没有更新的时候转化为candidate节点,并且自增本地的term值,开始leader节点选举。在leader节点选举的过程中,可能会产生多个candidate节点,甚至多个candidate以相同的term值,参与leader节点选举的过程,因此candidate节点在读取到与自己相同或者更大的term值的其他节点的选票的时候,应当立刻退出选举,减少竞争规模。follower节点在转变为candidate节点之前可能存在日志落后的现象,因此在candidate节点确认选票的同时,也会确认本地日志是否落后。在本技术的leader节点选举过程中,candidate节点的流程如下:[0020]1)follower节点f发现存储节点长期没有更新,转变为candidate节点c,自增本地的term值开始leader节点选举过程,并将选票写入集群中的所有存储节点中,对于每一个存储节点n:[0021]a)生成msgvote消息rv(t,c→n,ti,i)写入存储节点n,其中i表示candidate节点c当前的term值,c→n表示从节点c写入存储节点n,ti表示节点c中最后一个日志项的term值,i表示节点c中最后一个日志项的下标;[0022]b)读取节点n来自其他计算节点的更新部分,分析生成存储节点的已知的最大term值n.t,以及真实日志进展n.e;[0023]c)检查msgvote携带的term值rv.t是否大于n.t,且c.e不落后于n.e。[0024]2)如果集群中超过一半的存储节点上没有发现相同或者更大的term值,且没有发现比节点更c新的日志项,则candidate节点c就会成功晋选成为leader节点,并立刻广播msgapp。否则,节点c会重新退化为follower节点。[0025]在整个leader节点选举的过程中,follower节点只需要从存储节点中获取当前的更新即可,不参与选举的过程,因此本技术中原本在raft技术中用于保存follower节点投票结果的votefor值一直被赋值为空即可。candidate节点通过存储节点进行选举,follower节点不参与投票。只要正常运行的存储节点超过总数的一半,那么leader节点选举的过程就能够正常运行。[0026]一种基于计算存储分离框架下冗余存储资源的共识系统,包含:基于冗余存储资源的日志复制模块和基于冗余存储资源的leader节点选举模块;[0027]基于冗余存储资源的日志复制模块:当客户端向复制状态机服务器集群提交了一个请求,将日志项写入存储节点中,将整个集群的计算节点划分为两种角色:leader节点和follower节点;集群只有唯一的leader节点推动日志复制过程,将新的客户端请求以日志项的形式,写入存储节点并持久化保存;[0028]基于冗余存储资源的leader节点选举模块:在集群初始化或者由于分布式环境下的各类故障导致集群leader节点无法服务时,需要集群及时从其他计算节点中,选举出一个新的leader节点,继续进行日志复制的过程,保证集群的可用性。[0029]系统的具体实现过程和方法相同。[0030]一种计算机设备,该计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行上述计算机程序时实现如上所述的基于计算存储分离框架下冗余存储资源的共识方法。[0031]一种计算机可读存储介质,该计算机可读存储介质存储有执行如上所述的基于计算存储分离框架下冗余存储资源的共识方法的计算机程序。[0032]有益效果:与现有技术相比,本发明提供的基于计算存储分离框架下冗余存储资源的共识方法,有效改善可用计算资源较少场景下的系统可用性,保证数据的安全性,提高计算存储分离集群中的冗余存储资源的利用率。在raft共识技术的基础上,给出了基于冗余存储节点的日志复制和leader节点选举过程。有效的改善了集群的系统可用性,同时保证数据安全性。附图说明[0033]图1为本发明实施例的日志复制过程中的计算节点与存储节点关系示意图;[0034]图2为本发明实施例的leader节点选举过程中的计算节点与存储节点关系示意图。具体实施方式[0035]下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本技术所附权利要求所限定的范围。[0036]基于计算存储分离框架下冗余存储资源的共识方法,其主要包含:[0037]1)基于冗余存储资源的日志复制过程;[0038]2)基于冗余存储资源的leader节点选举过程。[0039]基于冗余存储资源的日志复制过程:[0040]当客户端向复制状态机服务器集群提交了一个请求,集群中的节点会将该请求写入本地的日志当中。此后,复制状态机服务器集群会尝试将该日志项复制到集群中的所有日志中。当集群中的超过一半的节点,都接受了这个更改,那么该请求将会被提交,并被计算节点中的其他服务执行。这一过程即为日志复制。与常见的共识技术的日志复制过程不同,本技术将日志项写入存储节点中,借助冗余存储资源保证可用性与数据的安全性,只需要少量的运行本技术的计算节点推动。为了保证集群中不会出现冲突的日志项,本技术的日志复制过程,会将整个集群的计算节点划分为两种角色:leader节点和follower节点。集群只有唯一的leader节点推动日志复制过程,将新的客户端请求以日志项的形式,写入存储节点并持久化保存。leader节点复用raft技术维护计算节点中的状态,包含term值、复制日志以及存储节点进展的跟踪。如果由于通信等原因,导致一些日志项没有成功写入存储节点中,那么leader节点按照raft技术的方式,将多个未写入的日志项一并复制到存储节点,直到成功写入。在本技术的日志复制过程中,leader节点的流程如下:[0041]1)leader节点l收到来自客户端的请求,将其添加到本地的日志中,并将该日志项写入集群中的所有存储节点中,对于每一个存储节点n:[0042]a)生成msgapp消息ae(t,l→n,ti,e[i+1,i+k],c),写入存储节点n;[0043]b)读取存储节点n来自其他计算节点的更新部分,分析生成存储节点的已知的最大term值n.t,以及真实日志进展n.e;[0044]c)对照n.t和n.e,检查msgapp消息是否成功写入存储节点n中;[0045]2)如果集群中超过一半的存储节点都成功写入该日志项,则该日志已提交。节点l将成功提交的结果反馈给客户端。[0046]对于msgapp,其中t表示节点l的term值,通过leader节点选举的过程产生。leader节点的日志复制过程,该term值会随着日志项写入到存储节点中。在领导人选举的中间过程,可能会短暂出现多个leader的情况,因此如果在存储节点中,发现了来自其他leader节点、更大的term值,节点l立刻转变follower节点,并更新本地的term值。msgapp中的e[i+1,i+k]携带了节点l的本地日志中的第i+1到i+k的日志项,且日志中的第i项的term为ti。存储节点真实日志进展n.e在日志复制过程中增量式更新,而n.e生成的关键在于日志项下标-term对(i,ti)。在一轮日志复制的过程中,对于节点n中来自节点l、或者其他leader节点的msgapp,当上一轮分析的日志进展n.e中存在日志项,满足下标为i且term值为ti,那么其中的日志项更新添加到这一轮分析的日志进展n.e中。如果本轮生存的真实日志进度n.e落后,节点l就会对冲突的部分进行重传,不断减少i的值直到找到满足n.e中存在匹配的(i,ti)。msgapp中携带当前已提交日志项下标c,表示节点l在一个由m个存储节点的集群中,前c个日志项已经成功写入至少个存储节点时。此时这些日志项在之后任何的日志复制过程中都不会改变,因为任意读取集群中超过一半的。集群中的所有计算节点可以安全的执行这些日志项。该值总是单调非递减的,不会出现已执行的日志项重新变回非提交状态的情况。[0047]集群中的其他计算节点都是follower节点,总是定期读取指定的存储节点n,因而每次需要处理的更新规模较大。通过更新的预处理,将其中能够根据日志项下标-term对(i,ti)进行日志项拼接的msgapp合并成一个msgapp,减少存储节点真实日志进展n.e的生成难度。在生成n.e之后,就需要按照n.e来更新本地日志。本技术在日志复制过程中复用raft技术中leader的保活措施,因此只要集群中的leader正常运行,集群中的follower节点就能从对应的存储节点n中读到更新,尽管这些更新可能不会对n.e产生变更。[0048]如图1所示,在整个日志复制的过程中,日志项的复制发生在leader节点和存储节点之间,leader节点与follower节点之间是解耦的,通过存储节点完成更新。即使当前只有一个leader节点在正常运行,只要正常运行的存储节点超过总数的一半,那么日志复制的过程就能够正常运行。[0049]基于冗余存储资源的leader节点选举过程:[0050]本技术依赖leader节点完成日志复制过程,可是在集群初始化或者由于分布式环境下的各类故障导致集群leader节点无法服务时,需要集群及时从其他计算节点中,选举出一个新的leader节点,继续进行日志复制的过程,保证集群的可用性。leader节点选举要求,最终产生的新leader节点必须是全局唯一的,保证日志复制正常运行。在leader节点选举的过程中,整个集群的计算节点划分为两种角色:candidate节点和follower节点,其中candidate节点将选票保存到存储节点中,并确认该选票是否有效;而follower节点并不参与投票,与日志复制过程中的行为一样,只需要关注当前集群是否有新的leader节点通过leader节点选举产生。follower节点会在对应的存储节点长期没有更新的时候转化为candidate节点,并且自增本地的term值,开始leader节点选举。在leader节点选举的过程中,可能会产生多个candidate节点,甚至多个candidate以相同的term值,参与leader节点选举的过程,因此candidate节点在读取到与自己相同或者更大的term值的其他节点的选票的时候,应当立刻退出选举,减少竞争规模。follower节点在转变为candidate节点之前可能存在日志落后的现象,因此在candidate节点确认选票的同时,也会确认本地日志是否落后。在本技术的leader节点选举过程中,candidate节点的流程如下:[0051]1)follower节点f发现存储节点长期没有更新,转变为candidate节点c,自增本地的term值开始leader节点选举过程,并将选票写入集群中的所有存储节点中,对于每一个存储节点n:[0052]a)生成msgvote消息rv(t,c→n,ti,i),写入节点n;[0053]b)读取节点n来自其他计算节点的更新部分,分析生成存储节点的已知的最大term值n.t,以及真实日志进展n.e;[0054]c)检查msgvote携带的term值rv.t是否大于n.t,且c.e不落后于n.e。[0055]2)如果集群中超过一半的存储节点的选票都满足要求,则candidate节点c就会成功晋选成为leader节点,并立刻广播msgapp。否则,节点c会重新退化为follower节点。[0056]对于msgvote,其中t表示当前节点c的term值在自增后的值。candidate节点在开始leader节点选举之前,会自增term值。因此如果旧leader节点进行日志复制与leader节点选举同时进行,旧leader节点就会在确认环节发现更新的term值,因而退出日志复制。msgvote中的i和ti分别为candidate节点本地日志中的最后一个日志项的下标和term值,通过将存储节点真实日志进展n.e与rv中的最后一项的下标-term值对(i,ti)进行比对,即满足rv.ti>lastlogterm(n.e),或者rv.ti=lastlogterm(n.e)∧rv.i≥lastlogindex(n.e)。当candidate成功晋选,就立刻以当前的term值,开始日志复制的过程。candidate节点leader节点选举的过程中,如果读到了携带相同或者更大的term值的msgapp之后,就说明当前集群中已经产生了新的leader。此时,candidate节点立刻退出选举,并转变回follower节点。[0057]在整个leader节点选举的过程中,follower节点只需要从存储节点中获取当前的更新即可,不参与选举的过程,因此本技术中的follower节点相较于raft技术的,votefor值一直被赋值为空即可。如图2所示,candidate节点通过存储节点进行选举,follower节点不参与投票。只要正常运行的存储节点超过总数的一半,那么leader节点选举的过程就能够正常运行。[0058]该方法的使用过程如下:[0059]1)部署计算存储分离框架下的共识技术集群。选择多个节点作为存储节点提供集群的持久化存储服务;共识技术集群常用于搭建集群协同服务,选择集群中的非存储节点部署共识技术,本技术实现选择etcd项目作为共识协同服务基础进行改装。集群协同服务提供全局共享变量的读写接口,对客户端的读写请求响应成功或失败。[0060]2)客户端发起读写请求。多个客户端并发地向协同服务集群发起写请求,收到响应后,如果响应状态为成功,则将请求的相关信息记录下来,该请求对应一个操作,其中信息包括变量名和变量值。客户端读写请求负载由benchmark生成。[0061]3)检测数据安全性与集群可用性。多个客户端并发地向协同服务集群发起写请求。在写入阶段通过kill的方式终止etcd进程,模拟部分计算资源失效;通过手动关闭/重启mysql服务器进程,模拟存储资源的可用性波动。之后多个客户端并发地向协同服务集群发起读请求,确认成功写入的变量名与变量值是否匹配或者丢失。[0062]下面,通过如下的一个具体实例来对本发明的技术方案进行详细的说明。选用mysql服务器作为存储节点实例,我们实现了一个micro-benchmark测试框架用于测试集群的可用性与数据安全性。micro-benchmark随机生成多个不重复的变量名以及对应的变量值,向etcd服务器节点运行负载并保证每个变量都只会被写入最多一次,同时收集处理速度与变量信息进行核对。[0063]1)硬件环境:[0064]在阿里云环境下部署3台运行mysql的服务器,3台运行etcd的服务器。分为3个数据中心,1台运行micro-benchmark客户端。运行etcd的服务器上同时运行监护进程,定期kill掉etcd进程或者重新唤起etcd进程进行重启模拟计算资源的可用性波动。通过手动关闭/重启mysql服务器进程,模拟存储资源的可用性波动。micro-benchmark启动24个客户端,并产生所需负载,并在获得请求响应后进行记录。[0065]2)运行过程:[0066]对于给定的试验参数,micro-benchmark首先会生成给定数目的拥有不同变量名的键值对,然后单轮实验分为两个阶段:首先是通过客户端将生成的键值对通过界面写入etcd服务器中,在此阶段:[0067]1)模拟计算资源可用性对系统的影响:每隔5s随机选择一个etcd服务器终止服务,在将集群的可用etcd服务器降低到1个的时候,再每隔5s随机重启一个etcd服务器,直到恢复全部的etcd服务器。[0068]2)模拟存储资源可用性对系统的影响:随机选择一个mysql服务器终止服务,再过5s重启该mysql服务器。[0069]之后在所有的键值对写入etcd集群之后,再另外启动一组客户端读取etcd服务器中保存的数据,与micro-benchmark中生成的数据进行比对。数据安全性的评估通过比对键值对是否匹配,仅比对成功写入etcd服务器的键值对;可用性的测量参考etcd集群的吞吐率,检测某个etcd服务器的失效/重启对吞吐率的冲击,并结合etcd服务器日志的分析。实验结果见表2。[0070]实验参数及默认值如表1。[0071]3)运行结果:[0072]表1实验参数与默认值[0073]实验参数默认值mysql存储引擎innodbmysql隔离级别repeatable-read变量个数25000客户端请求超时500ms[0074]表2实验结果[0075][0076]基于计算存储分离框架下冗余存储资源的共识系统,包含:基于冗余存储资源的日志复制模块和基于冗余存储资源的leader节点选举模块;[0077]基于冗余存储资源的日志复制模块:当客户端向复制状态机服务器集群提交了一个请求,将日志项写入存储节点中,将整个集群的计算节点划分为两种角色:leader节点和follower节点;集群只有唯一的leader节点推动日志复制过程,将新的客户端请求以日志项的形式,写入存储节点并持久化保存;[0078]基于冗余存储资源的leader节点选举模块:在集群初始化或者由于分布式环境下的各类故障导致集群leader节点无法服务时,需要集群及时从其他计算节点中,选举出一个新的leader节点,继续进行日志复制的过程,保证集群的可用性。[0079]显然,本领域的技术人员应该明白,上述的本发明实施例的基于计算存储分离框架下冗余存储资源的共识方法各步骤或基于计算存储分离框架下冗余存储资源的共识系统各模块可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1