基于单阶段提交并具备自恢复功能的分布式键值存储方法

文档序号:10555452阅读:247来源:国知局
基于单阶段提交并具备自恢复功能的分布式键值存储方法
【专利摘要】本发明公开了一种基于单阶段提交并具备自恢复功能的分布式键值存储方法,包括五个步骤:第一,基于单阶段提交;第二,系统具备自恢复功能,无论是存储服务程序退出后重启或节点离线后恢复,系统都能自动恢复到故障前的状态;第三,系统具备强一致性,写入过程一旦完成,能够保证在系统任何一个节点上都能读取到最新写入的值;第四,支持半数以上节点故障后正常运行,本发明中的分布式键值存储系统可以允许由奇数个节点组成,也允许由偶数个节点组成,即使大部分节点故障,系统仅剩下一个健康节点也能够继续运行;第五,系统具备自动扩展功能,系统加入一个新的节点后该节点自动从主节点恢复数据,作为跟随节点运行。
【专利说明】
基于单阶段提交并具备自恢复功能的分布式键值存储方法
技术领域
[0001 ]本发明属于分布式存储技术领域,具体涉及一种基于单阶段提交并具备自恢复功能的强一致性分布式键值存储系统。
【背景技术】
[0002]当前的计算机业界流行的分布式键值存储系统一般基于多阶段提交,通信交互过程复杂,实现的软件产品不容易稳定;同时一般要求半数以上的节点存活系统才能继续正常运行;并且故障的节点一般需要人工进行补全数据,或者将系统停止运行后进行恢复才能重新加入系统运行;在功能上有可能出现写入成功后还会读取到旧的数据的情况。

【发明内容】

[0003]为克服现有技术上的缺陷,本发明目的是在于提供一种基于单阶段提交并具备自恢复功能的强一致性分布式键值存储系统。目的在于使系统的通信过程更加简单可靠,系统可用性更高,并具有自我恢复功能和强一致性的确定性,使得分布式键值存储系统更适合工程化使用。
[0004]为实现上述目的,本发明的技术方案如下:
[0005]—种基于单阶段提交并具备自恢复功能的分布式键值存储方法,包括以下步骤:
[0006]步骤I):其中的分布式键值存储系统的写入过程只需主控节点发出一次报文,跟随节点回复一次报文即完成;即基于单阶段提交;
[0007]步骤2):无论是存储服务程序退出后重启或节点离线后恢复,分布式键值存储系统都自动恢复到故障前的状态;即系统具备自恢复功能;
[0008]步骤3):步骤I)中的写入过程一旦完成,分布式键值存储系统任何一个节点上都能读取到最新写入的值;即系统具备强一致性;
[0009]步骤4):分布式键值存储系统允许由奇数个节点组成,也允许由偶数个节点组成,即使大部分节点故障,系统仅剩下一个健康节点也能够继续运行;即支持半数以上节点故障后正常运行;
[0010]步骤5):分布式键值存储系统加入一个新的节点后该节点自动从主节点恢复数据,作为跟随节点运行;即系统具备自动扩展功能。
[0011]在上述步骤I)中,客户端发出的写请求全部交给主控节点处理,首先由主节点写入一个待提交的存储空间,并同时发出请求写入的提案报文,待有N个以上节点返回同意提交的报文后,主节点再从待提交的存储空间把最新的值拷贝到正式的存储空间,N为副本数的阈值;跟随节点在返回同意提交的报文前先把键值存入待提交的存储空间,收到大于N个的同意提交报文后再把数据存入正式的存储空间;存储空间均在共享内存中。
[0012]进一步的,在步骤2)中,每个节点都部署一组服务监控进程,监视存储服务进程一旦退出后会自动将其重启;服务监视进程有两个,一个监视服务进程和另一个与它同组的监视进程,第二个负责监视与它同组的监视进程。
[0013]进一步的,在步骤2)中,跟随节点离线恢复后,将从主节点申请恢复所有的键值对,然后再参与分布式键值存储系统运行;
[0014]主节点的离线恢复分为两种情况:离线时间短于阈值,分布式键值存储系统内仍然以该节点为主机,所有的写入操作此时会被阻塞,分布式键值存储系统的数据不会发生改变,离线恢复后不需要恢复数据,本机仍然作为主控节点继续运行;离线时间超过阈值,本机变为跟随节点运行,从分布式键值存储系统新选举的主节点恢复数据,恢复数据时发出本机所有键值对的版本号,新主机发现版本较旧的将主动发出最新版本数据提供给离线恢复节点。
[0015]进一步的,在步骤3)中,一旦客户端的写入操作成功完成,分布式键值存储系统中有N个以上节点有当前最新的值;且读取操作被引导到主控节点执行,获取最新的值;若主节点离线,则通过分布式键值存储系统内的数据同步过程使新选举的主节点有最新的值以实现分布式键值存储系统的强一致性。
[0016]进一步的,在步骤4)中,分布式键值存储系统中要求每次写入操作有N个节点同意提交即可成功,则分布式键值存储系统允许同时最多有N-1个节点发生故障;同时如果分布式键值存储系统的节点逐批发生故障,每批故障节点数小于N,当剩余健康节点数小于等于N时,分布式键值存储系统自动调整阈值N为比健康节点数少I,使分布式键值存储系统能够继续正常运行。
[0017]进一步的,跟随节点的存储服务进程退出重启后从主节点恢复数据。主节点的进程故障重启后恢复方式分为两种情况:故障时间短于阈值,从本机的共享内存恢复数据,本机仍然为主节点;故障时间超过阈值,从分布式键值存储系统新选举的主节点恢复数据,本机变为跟随节点运行。
[0018]进一步的,其特征在于,步骤2)中跟随节点离线恢复时以及跟随节点进程退出重启后从主节点恢复数据过程中,如果主节点离线,则等待剩余的节点完成同步后从主节点重新开始数据恢复过程。
[0019]进一步的,分布式键值存储系统利用心跳和优先级执行主节点选举算法;对于分布式键值存储系统中的每个节点都会有一个唯一的节点编号,编号越小的优先级越高;系统启动时,第一个节点自动升为主节点;分布式键值存储系统运行过程中,当主控节点离线后,剩余节点会根据心跳中的节点编号判断目前该由哪一个优先级最高的节点升为主节点。
[0020]进一步的,分布式键值存储系统中任何一个节点发现节点离线,进程故障时间超过阈值或者接收到数据恢复请求都会触发全分布式键值存储系统内的数据同步过程;每个节点把每一个数据副本数小于节点离线前的健康节点数的键值对都广播出去,每一个其他节点都向这个节点确认修复完毕。每个节点都完成一遍广播和接收确认过程后,系统同步过程完成
[0021]有益效果:本发明通过以上步骤,可达到以下有益效果:
[0022]1.本发明通信过程更加简单可靠,比传统的两阶段提交方式减少一倍的报文,读写效率将比业界流行的开源软件会有成倍的提高。
[0023]2.本发明可用性更高,不需要系统搭建时必须奇数个节点,且允许超过半数以上的节点故障也能运行,即使只剩一个健康节点也能继续运行。
[0024]3.本发明的自恢复能力强,无论是主节点或跟随节点上的进程退出还是直接两类节点的离线,都能够自动恢复到故障前的状态,且不需要人工干预。
[0025]4.本发明具有强一致性,当客户端写入成功的时刻后,确保任何节点上都能读取到最新的值,即使有进程或者节点故障发生。
[0026]5.本发明支持跨平台,所有程序支持LINUX/AIX/HPUX/WINDOWS平台。
[0027]综上所述,本发明是一种简单可靠、可用性高、自恢复能力强、强一致性的分布式键值存储系统。
【附图说明】
[0028]图1是本发明基于单阶段提交的分布式数据写入流程图;
[0029]图2是本发明节点离线恢复后的数据恢复流程图;
[0030]图3是本发明进程故障重启后的数据恢复流程图;
[0031]图4是本发明系统内数据同步流程图;
[0032]图5是本发明的主控节点选举流程图。
【具体实施方式】
[0033]下面结合附图对本发明作进一步详细说明。
[0034]在进行技术方案阐述前,本发明先说明以下几个概念:
[0035]I)主控节点:简称主节点,负责发起写入操作和提供读取功能的节点;
[0036]2)跟随节点:响应主节点提交请求和参与选举准备随时升级为主节点的节点;
[0037]3)副本数阈值:当主节点发出请求写入的提案报文后,收到大于此值的同意提交报文数才会继续完成写入;
[0038]4)键值对版本号:每个键值对具备的一个自然数,初始为I。每次值进行修改时数值会加I;
[0039]5)节点编号:系统中每个节点都有的一个全局唯一的自然数。
[0040]6)优先级:与节点编号紧密关联,节点编号越小,优先级越高。
[0041]下面结合附图对本发明的基于单阶段提交并具备自恢复功能的强一致性分布式键值存储系统作进一步的说明。
[0042]为了具体说明分布式键值存储系统的实施方式,现假定集群中总共有4个节点:node 1、node2、node3、node4,副本数阈值设置为2,写入过程完成的时限是200毫秒,节点离线和进程故障后引起主节点切换的时间阈值是4秒,假设初始状态中nodel为主控节点。
[0043]图1是本发明基于单阶段提交的分布式数据写入流程图。主控节点nodel接收到写入请求后首先检查键值对中key对应的待提交空间是否为空,如果不为空则说明上一轮写入正在进行中,此写入请求被阻塞,等待上一轮写入完成。如果为空则先写入待提交空间,置键值对状态为pending,然后主节点发出请求提交的报文,报文中包括键值对本身和值的版本号,发出的节点名等信息。跟随节点收到报文后先把键值对存入待提交空间,置键值对状态为pending,然后发出同意提交的报文,报文中包括键值对中的key、版本号和节点名等信息。每个节点都会接收同意提交的报文,如果版本号匹配则报文数加一,待达到副本数阈值2时则把待提交空间的数据写入正式的存储空间,并把版本号加一,置键值对状态为success。如果某个节点超过200毫秒没有收到大于等于2个的同意提交报文,则置键值对状态为fail。
[0044]图2是本发明节点离线恢复后的数据恢复流程图。图2的(a)中,主控节点nodel离线后,为了防止网络抖动误判,设置了一个阈值4秒。如果离线时间小于4秒则此时主控节点还没有发生切换,即其他节点认为nodel仍然在线,所有的写入操作还是被导向nodel。这期间由于nodel不能提供服务整个系统的状态不会有任何改变,所以nodel如果在4秒内恢复可以继续作为主节点运行。
[0045]如果nodel离线超过4秒,则主控节点发生切换,假设node2升为主节点,则node2可以继续提供存储服务。nodel恢复后系统的状态可能已发生改变,nodel只能作为跟随节点加入系统,然后需要做一次全恢复以保证系统的副本数足够多,副本冗余度越高,则一次性运行故障的节点越多。由于系统内每个节点自身的数据并不一定是最新的,但是整个系统范围内肯定有最新的值,所以需要从整个系统获取数据进行恢复。具体方法是系统内未离线的节点先做一次数据同步,具体方法会在图4的说明中详细描述。数据同步完成后nodel向node2发出自身所有键值对的版本号,node2会把自身版本号更新的键值对发回给nodel进行恢复。
[0046]图2的(b)是跟随节点node2离线的处理流程。不论离线多长时间,启动时都向nodel发出自身所有键值对的版本号,nodel会把自身版本号更新的键值对发回给node2进行恢复。如果node2恢复过程中node I离线,则node3、node4会进行同步,使得它们都具有最新版本的数据,然后node2从新升级为主节点的node3进行数据恢复。
[0047]图3是本发明进程故障重启后的数据恢复流程图。图3的(a)中,主控节点nodel的服务进程故障后,如果故障持续时间小于4秒,则此时主控节点还没有发生切换,即其他节点认为nodel仍然能够提供服务,所有的写入操作还是被导向nodel。这期间由于nodel不能提供服务整个系统的状态不会有任何改变,所以nodel如果在4秒内恢复可以继续作为主节点运行,但是此时因为进程重启,进程自身空间的数据都已丢失,需要从共享内存中把所有键值对数据加载进来。
[0048]如果nodel的进程故障持续时间超过4秒,则主控节点发生切换,假设node2升为主节点,则node2可以继续提供存储服务。nodel上进程恢复后系统的状态可能已发生改变,nodel只能作为跟随节点加入系统,并且从本机共享内存恢复已经不能确保是最新的数据。需要等待系统内未故障的节点先做一次数据同步,同步完成后nodel向node2发出自身所有键值对的版本号,node2会把自身版本号更新的键值对发回给nodel进行恢复。
[0049]图3的(b)是跟随节点node2的进程故障处理流程。不论故障多长时间,启动时都向nodel发出自身所有键值对的版本号,nodel会把自身版本号更新的键值对发回给node2进行恢复。如果node2的进程恢复过程中110(161离线,贝11110(163、110(164会进行同步,使得它们都具有最新版本的数据,然后node2从新升级为主节点的node3进行数据恢复。
[0050]图4是本发明系统内数据同步流程图。假设nodel节点离线时间超过阈值,node2、node3、node4都开始检查本机是否有副本数小于4的键值对,如果有把所有此类键值对加入同步报文中并发出,如果没有则发出一个不含有键值对的同步完成报文。假设node3、n0de4直接发出同步完成报文。每个节点收到同步报文后,如果发现有比本地更新版本的键值对则更新并发出同步成功报文,如果没有直接发出同步成功报文。发出同步报文的节点收到全部节点的同步成功报文后发出同步完成报文。最后每个节点都收到所有节点的同步完成报文后,同步流程完成。
[0051]node2接收到另外两个节点的同步成功报文后也发出同步完成报文。同时前面也收到了 node3和node4的同步完成报文,此时node2确认全系统数据最新,可以提供恢复数据服务和正常的分布式存储服务了。
[0052]图5是本发明的主控节点选举流程图。当原主控节点离线或者其上的服务进程故障时,每个健康节点会检查4秒内接收到的其他节点的心跳报文,4秒内收到过心跳的节点都认为是健康节点。然后检查自身是否是健康节点中节点号最小的节点,如果是则本机升为新的主控节点。如果不是则继续作为跟随节点运行。
[0053]通过上述实施例可知,本发明通信过程更加简单可靠,比传统的两阶段提交方式减少一倍的报文,读写效率将比业界流行的开源软件有成倍的提高。而且可用性更高,不需要系统搭建时必须奇数个节点,且允许超过半数以上的节点故障也能运行,即使只剩一个健康节点也能继续运行。同时自我恢复能力强,无论是主节点或跟随节点上的进程退出还是直接两类节点的离线,都能够自动恢复到故障前的状态,且不需要人工干预。且发明具有强一致性,当客户端写入成功的时刻后,确保任何节点上都能读取到最新的值。
[0054]此外,本发明扩展性强,节点加入系统后能自动加载最新的数据,使得基于本发明的分布式键值存储系统更适合工程化使用。同时系统支持跨平台,所有程序支持LINUX/AIX/HPUX/WINDOWS平台。
[0055]以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
【主权项】
1.一种基于单阶段提交并具备自恢复功能的分布式键值存储方法,其特征在于,包括以下步骤: 步骤I):其中的分布式键值存储系统的写入过程只需主控节点发出一次报文,跟随节点回复一次报文即完成; 步骤2):无论是存储服务程序退出后重启或节点离线后恢复,分布式键值存储系统都自动恢复到故障前的状态; 步骤3):步骤I)中的写入过程一旦完成,分布式键值存储系统任何一个节点上都能读取到最新写入的值; 步骤4):分布式键值存储系统允许由奇数个节点组成,也允许由偶数个节点组成,即使大部分节点故障,系统仅剩下一个健康节点也能够继续运行; 步骤5):分布式键值存储系统加入一个新的节点后该节点自动从主节点恢复数据,作为跟随节点运行。2.根据权利要求1所述的基于单阶段提交并具备自恢复功能的分布式键值存储方法,其特征在于,在上述步骤I)中,客户端发出的写请求全部交给主控节点处理,首先由主节点写入一个待提交的存储空间,并同时发出请求写入的提案报文,待有N个以上节点返回同意提交的报文后,主节点再从待提交的存储空间把最新的值拷贝到正式的存储空间,N为副本数的阈值;跟随节点在返回同意提交的报文前先把键值存入待提交的存储空间,收到大于N个的同意提交报文后再把数据存入正式的存储空间;存储空间均在共享内存中。3.根据权利要求1所述的基于单阶段提交并具备自恢复功能的分布式键值存储方法,其特征在于,在步骤2)中,每个节点都部署一组服务监控进程,监视存储服务进程一旦退出后会自动将其重启;服务监视进程有两个,一个监视服务进程和另一个与它同组的监视进程,第二个负责监视与它同组的监视进程。4.根据权利要求1所述的基于单阶段提交并具备自恢复功能的分布式键值存储方法,其特征在于,在步骤2)中,跟随节点离线恢复后,将从主节点申请恢复所有的键值对,然后再参与分布式键值存储系统运行; 主节点的离线恢复分为两种情况:离线时间短于阈值,分布式键值存储系统内仍然以该节点为主机,所有的写入操作此时会被阻塞,分布式键值存储系统的数据不会发生改变,离线恢复后不需要恢复数据,本机仍然作为主控节点继续运行;离线时间超过阈值,本机变为跟随节点运行,从分布式键值存储系统新选举的主节点恢复数据,恢复数据时发出本机所有键值对的版本号,新主机发现版本较旧的将主动发出最新版本数据提供给离线恢复节点。5.根据权利要求1所述的基于单阶段提交并具备自恢复功能的分布式键值存储方法,其特征在于,在步骤3)中,一旦客户端的写入操作成功完成,分布式键值存储系统中有N个以上节点有当前最新的值;且读取操作被引导到主控节点执行,获取最新的值;若主节点离线,则通过分布式键值存储系统内的数据同步过程使新选举的主节点有最新的值以实现分布式键值存储系统的强一致性。6.根据权利要求1所述的基于单阶段提交并具备自恢复功能的分布式键值存储方法,其特征在于,在步骤4)中,分布式键值存储系统中要求每次写入操作有N个节点同意提交即可成功,则分布式键值存储系统允许同时最多有N-1个节点发生故障;同时如果分布式键值存储系统的节点逐批发生故障,每批故障节点数小于N,当剩余健康节点数小于等于N时,分布式键值存储系统自动调整阈值N为比健康节点数少I,使分布式键值存储系统能够继续正常运行。7.根据权利要求4所述的基于单阶段提交并具备自恢复功能的分布式键值存储方法,其特征在于,跟随节点的存储服务进程退出重启后从主节点恢复数据。主节点的进程故障重启后恢复方式分为两种情况:故障时间短于阈值,从本机的共享内存恢复数据,本机仍然为主节点;故障时间超过阈值,从分布式键值存储系统新选举的主节点恢复数据,本机变为跟随节点运行。8.根据权利要求7所述的基于单阶段提交并具备自恢复功能的分布式键值存储方法,其特征在于,步骤2)中跟随节点离线恢复时以及跟随节点进程退出重启后从主节点恢复数据过程中,如果主节点离线,则等待剩余的节点完成同步后从主节点重新开始数据恢复过程。9.根据权利要求7所述的基于单阶段提交并具备自恢复功能的分布式键值存储方法,其特征在于,分布式键值存储系统利用心跳和优先级执行主节点选举算法;对于分布式键值存储系统中的每个节点都会有一个唯一的节点编号,编号越小的优先级越高;系统启动时,第一个节点自动升为主节点;分布式键值存储系统运行过程中,当主控节点离线后,剩余节点会根据心跳中的节点编号判断目前该由哪一个优先级最高的节点升为主节点。10.根据权利要求8所述的基于单阶段提交并具备自恢复功能的分布式键值存储方法,其特征在于,分布式键值存储系统中任何一个节点发现节点离线,进程故障时间超过阈值或者接收到数据恢复请求都会触发全分布式键值存储系统内的数据同步过程;每个节点把每一个数据副本数小于节点离线前的健康节点数的键值对都广播出去,每一个其他节点都向这个节点确认修复完毕。每个节点都完成一遍广播和接收确认过程后,系统同步过程完成。
【文档编号】G06F17/30GK105915391SQ201610399443
【公开日】2016年8月31日
【申请日】2016年6月8日
【发明人】高原, 任升, 顾文杰, 沙川, 沙一川, 翟明玉, 彭晖, 陈鹏, 袁鑫, 季学纯, 葛以踊, 雷宝龙, 万书鹏, 季惠英, 吴庆曦
【申请人】国电南瑞科技股份有限公司, 国电南瑞南京控制系统有限公司, 南京南瑞集团公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1