CN102694863B - 基于负载调整和系统容错的分布式存储系统的实现方法 - Google Patents
基于负载调整和系统容错的分布式存储系统的实现方法 Download PDFInfo
- Publication number
- CN102694863B CN102694863B CN201210172660.9A CN201210172660A CN102694863B CN 102694863 B CN102694863 B CN 102694863B CN 201210172660 A CN201210172660 A CN 201210172660A CN 102694863 B CN102694863 B CN 102694863B
- Authority
- CN
- China
- Prior art keywords
- node
- storing collection
- memory node
- rule
- memory
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一套基于负载调整和系统容错的分布式存储系统的实现方法,解决了现有技术中存在的大规模分布式存储系统中没有可靠的负载调整方法和系统容错方法及资源上传、资源删除流程不够简洁的问题。该分布式存储系统的实现方法主要包括使用分布式存储系统中的管理节点检查存储节点发来的心跳信息,当检查到存储节点压力过大即过载时,采用负载调整方法对该压力过大的过载存储节点进行负载调整;当检查到存储节点失效时,采用系统容错方法对该失效存储节点进行系统容错。
Description
技术领域
本发明涉及一套分布式存储系统,具体地说,是涉及一套基于负载调整和系统容错的分布式存储系统的实现方法。
背景技术
随着数据密集型应用的日益普及,人们需要对越来越多的数据进行开放式存储和高性能计算,这对存储系统的可靠性,可扩展性等提出了苛刻的要求,而大规模分布式存储系统以其较为低廉的价格,良好的可扩展性等优势,得到了人们的青睐。
现有的基于多级映射的大规模多副本分布式存储系统虽然具有支持权重、可扩展型高、数据散列均匀、支持副本、易于管理等优点,然而该系统对于压力过大的存储节点即过载存储节点没有可靠的负载调整方法;系统中存储节点失效时也没有有效的关于失效存储节点的系统容错方法,且存储节点中存储聚集的多个副本间没有可靠的心跳连接,无法确保通信畅通,因此无法准确判定彼此的当前状态,而存储聚集的多个副本之间临时建立连接的网络耗费及错误率也较高;由于系统中存储聚集与存储聚集之间的序列号相差较大,造成了每次上传、删除过程中会产生多余的序列号协商交互。
发明内容
本发明的目的在于提供一套基于负载调整和系统容错的分布式存储系统的实现方法,解决现有技术中存在的大规模分布式存储系统中没有可靠的负载调整方法和系统容错方法及资源上传、资源删除流程不够简洁的问题。
为了实现上述目的,本发明采用的技术方案如下:
基于负载调整和系统容错的分布式存储系统的实现方法,包括以下步骤:
(1)系统初始化;
(2)客户端检查是否需要更新规则,如果需要更新,则将规则更新至与规则节点相同的规则;
(3)客户端通过GUID生成算法确定待上传资源的GUID,并根据GUID结合规则计算出存储节点位置,将待上传资源存储至存储节点之中;
(4)客户端得到需要获取资源的GUID,并根据规则计算出需要获取资源的副本对应的存储节点地址,然后由与存储节点地址对应的存储节点查找该需要获取的资源,再向客户端回复查找结果;
(5)管理节点检查存储节点发来的心跳信息,当检查到存储节点压力过大即过载时,采用负载调整方法对该压力过大的过载存储节点进行负载调整;当检查到存储节点失效时,采用系统容错方法对该失效存储节点进行系统容错。
具体地说,所述每个存储节点存储有至少一个存储聚集,每个存储聚集至少有一个存储聚集副本,且当存储聚集的存储聚集副本为两个以上时,这两个以上存储聚集副本分别存储在不同的存储节点上,且该两个以上存储聚集副本两两之间保持心跳连接。
进一步地,所述负载调整方法包括以下步骤:
(a)设定过载存储节点上的存储聚集数量标准值,管理节点检查过载存储节点上的存储聚集数量,若超过已设定的标准值则发布进行存储聚集变换的命令,若低于已设定的标准值则发布进行存储聚集扩展的命令;
(b)与管理节点保持心跳的存储节点根据管理节点发布的命令进行相应的存储聚集扩展或存储聚集变换;
(c)存储节点在完成相应的存储聚集扩展或存储聚集变换后,向管理节点回复负载调整成功;
(d)管理节点收到回复后对规则进行相应的存储聚集扩展或存储聚集变换运算,并通知规则节点集群更新规则。
其中,所述存储节点进行存储聚集扩展包括以下步骤:
(1)存储节点在收到存储聚集扩展命令后将自身已保存的模数乘以二;
(2)该存储节点的存储聚集副本在序列号保持不变的情况下根据新的模数一分为二,且将新的存储聚集副本的状态设置为启动状态,并在存储聚集副本之间建立心跳,之后向管理节点回复存储聚集扩展成功;
(3)管理节点收到回复之后,对规则执行存储聚集扩展运算,并通知规则节点集群更新规则。
其中,所述存储节点进行存储聚集变换包括以下步骤:
(1)管理节点在系统中选择负载最轻的存储节点作为存储聚集变换的目的存储节点,并选择过载存储节点和目的存储节点的存储聚集副本集合的差集最小的一个存储聚集副本作为待迁移存储聚集副本;
(2)目的存储节点根据管理节点的通知同步过载存储节点中待迁移存储聚集副本的数据,并在自身重建与管理节点保持心跳连接的待迁移存储聚集副本;
(3)目的存储节点根据过载存储节点中待迁移存储聚集副本的数据向过载存储节点获取资源,并将获取的资源保存到重建的待迁移存储聚集副本中,完成后向管理节点回复存储聚集变换成功;
(4)管理节点收到回复之后,对规则执行存储聚集变换运算,并通知规则节点集群更新规则,之后将客户端对过载存储节点的访问重新定向到目的存储节点;
(5)将重建的待迁移存储聚集副本设定为启动状态,该重建的待迁移存储聚集副本将剩余没有完全同步的资源同步过来,在同步完成后,对应的存储聚集开始工作;
(6)过载存储节点中断与其对应的存储聚集副本的心跳连接,并删除该存储聚集副本。
进一步地,所述系统容错方法中,若设定存储节点失效后的重启时间上限值,则该系统容错流程包括以下两种情况:
第一种情况,当存储节点失效后的重启时间超过上限值,则容错流程中管理节点对失效存储节点中的每一个存储聚集执行以下操作:
(1)管理节点选择系统内负载最轻的存储节点作为目的存储节点;
(2)目的存储节点根据管理节点的通知向与失效存储节点具有相同存储聚集副本的其中一个存储节点同步待迁移的存储聚集副本的数据,并在自身重建待迁移存储聚集副本;
(3)我们将与失效存储节点具有相同存储聚集副本的存储节点作为源存储节点,则目的存储节点根据源存储节点中待迁移存储聚集副本的数据向源存储节点获取资源,并将获取的资源保存到重建的待迁移存储聚集副本中;
(4)管理节点对规则进行存储聚集变换操作,并通知规则节点更新规则,之后,将目的存储节点对应的存储聚集副本设置为启动状态,并将客户端对失效存储节点的访问重新定向到目的存储节点;
第二种情况,当存储节点失效后的重启时间低于上限值,该容错流程包括以下步骤:
(1)失效存储节点重新启动后向规则节点获取最新的规则;
(2)若在失效存储节点失效期间系统进行了存储聚集扩展运算,失效储节点则根据扩展后的规则对已有的存储聚集副本进行分裂,之后将已有的存储聚集副本和规则进行对比,对比之后删除已经不属于该失效存储节点的存储聚集副本;
(3)失效存储节点将其上的存储聚集副本状态设定为启动状态,并将失效期间的数据同步过来。
更进一步地,还包括资源上传流程,该上传流程包括以下步骤:
(1)客户端根据GUID生产算法,生成待上传资源的GUID;
(2)客户端检查自身是否缓存有规则,如没有则更新规则,如有则根据缓存的规则计算出对应GUID应该被存储的存储节点地址,并随机向其中一个存储节点发起连接,且将该存储节点作为该次上传的发起节点;
(3)发起节点连接到待存储资源的GUID,在确定客户端定位正确且对应的存储聚集为工作状态后,向与其保持心跳连接的存储聚集副本发送待上传资源的GUID;
(4)客户端开始上传,发起节点发送对应的数据到存储与其保持心跳连接的存储聚集副本的存储节点,完成上传。
再进一步地,还包括资源删除流程,该删除流程包括以下步骤:
(1)客户端获得待删除资源的GUID;
(2)客户端检查自身是否缓存有规则,如没有则更新规则,如有则根据缓存的规则计算出对应GUID应该被存储的存储节点地址,并随机向其中一个存储节点发起连接,且将该存储节点作为该次删除的发起节点;
(3)发起节点连接到待删除资源的GUID,在确定客户端定位正确且对应的存储聚集为工作状态后,向与其保持心跳连接的存储聚集副本发送待删除资源的GUID,并为待删除资源打上删除标签;
(4)在所有保持心跳连接的存储聚集副本同时在线时,将打有删除标签的资源进行删除。
具体地说,所述规则节点集群上的规则更新具体包括以下步骤:
(1)管理节点对规则进行一次操作,其将规则版本递增一,并将对应的改动写入版本信息列表;
(2)管理节点通知规则节点规则已更新,并让规则节点更新规则;
(3)规则节点将当前规则的版本号发送到管理节点,管理节点将该版本号与最新的版本号进行对比,并将规则的变更序列发送给规则节点;
(4)规则节点收到管理节点发来的规则变更序列之后,按版本序列号从小到大的顺序在自身缓存的规则上逐个执行存储聚集扩展或存储聚集变换操作,直至将当前规则更新至最新。
与现有技术相比,本发明具有以下有益效果:
1.本发明中,存储节点上的存储聚集的多个副本间保持心跳连接,每隔一个固定时间这几个保持心跳连接的多个副本通过心跳连接交互一次,这样充分保证了存储聚集的多个副本间通信畅通,降低了它们之间建立连接的网络耗费和错误率。
2.本发明中,存储聚集的多个副本存储在不同的存储节点上,且它们之间可以感知到心跳连接的建立与断开情况,从而能准确判定对应的其他存储聚集副本的当前状态,若其中一个存储聚集副本失效,我们可以从与其保持心跳连接的存储聚集副本中获取相应的信息,这样的设置有助于错误恢复。
3.本发明支持存储聚集的多个副本之间相互协调存储聚集的序列号,且多个存储聚集副本序列号之间的差距不会超过一个心跳的变化,这样的设置有效避免了每次上传、删除过程中多余的序列号协商交互。
4.本发明根据过载存储节点上的存储聚集数量分别使用存储聚集扩展或存储聚集变换对其进行相应调整,当过载存储节点上存储聚集数量较少时进行存储聚集扩展,当其数量较多时进行存储聚集变换,这种对过载存储节点的分类调整使得负载调整更精确有效。
5.本发明根据重启时间长短分两种情况对失效存储节点进行相应的系统容错,这种对失效存储节点的分情况容错使得容错流程更具有科学性、更有效。
附图说明
图1为分布式存储系统的系统架构。
图2为原始的模数以及散列映射规则第二级对应表的图示。
图3为存储聚集变换运算后的模数及散列映射规则第二级对应表的图示。
图4为存储聚集扩展运算后的模数及散列映射规则第二级对应表的图示
图5为本发明中负载调整方法的流程图。
图6为本发明中系统容错方法的流程图。
具体实施方式
下面结合附图和实施例对本发明作进一步说明,本发明的实施方式包括但不限于下列实施例。
实施例1
如图1所示,现有的分布式存储系统,包括用于存储资源的存储节点集群,分别与该存储节点集群连接的对存储节点集群进行管理的管理节点和根据散列机制获取资源存储位置的客户端,以及连接该管理节点和客户端并接受管理节点管理、为客户端提供散列映射规则的规则节点集群。
以下为对分布式存储系统中各部分的详细说明:
存储节点集群,由所有的存储节点构成,系统中的所有资源都存储在该集群中的存储节点上,存储节点和管理节点之间维持大周期1分钟以上的心跳,以汇报自身情况,即磁盘使用情况及当前压力,并接受管理节点统一管理。
规则节点集群,由所有的规则节点构成,每个规则节点都保存有当前系统的最新映射存储规则,该集群负责响应客户端更新规则的请求,并接受管理节点的统一管理,当管理节点对规则进行更新之后,其会以版本更新的方式通知所有的规则节点更新规则,作为优选:对规则集群采用DNS重定位或者反向路由的方式进行访问,以分散压力。
管理节点,该节点是系统的中心控制节点,作为优选:我们采用双机热备的方法,防止单点失效的发生,虽然该节点是系统的中心,但其只与存储节点维持大周期的心跳,并不对外服务,因此其压力非常小,其可以通过自动,或管理员手动的方式,对系统的负载均衡进行总体的控制,并在每次对系统的负载作出调整后,通知规则节点集群进行规则更新。
客户端通过资源的全局唯一标识符GUID结合散列映射规则进行运算,得到资源的具体存储位置,对资源进行访问,客户端会缓存规则,只有在其没有规则或定位资源出现错误时,客户端才会向规则集群更新规则。
具体地说,上述散列映射规则分为两级,第一级规则将GUID空间通过取模运算分散为数量较少的、较为平均的多个存储聚集;第二级规则是一张定位表,行代表存储聚集的索引号,每行有多列,每列对应一个存放存储聚集副本的存储节点。
第一级散列映射规则可以表示为以下形式:
B={b|b=i mod K×2n,i∈I}
其中B为存储聚集的集合,K为任意初始值,n为2的指数,I为资源的GUID的集合,资源的GUID通过取模运算规则,被分散为|B|个存储聚集,存储聚集是资源的GUID的集合,存储聚集x表示为以下形式:
bx={i|x=i mod K×2n,i∈I}
作为优选,我们建议选用较好的GUID生成算法,使分配到存储聚集的资源数量更为平均,而资源的均匀分配也能更好的达到负载均衡。
如图2所示,第二级规则为一张定位表,图中令每个存储聚集的副本数为2,其中K=1,n=1,因此模数为2,该定位表有2行,bx代表存储聚集x,dx代表存储节点x的地址。
进一步地,定义在该散列映射规则上的运算有两种,存储聚集变换运算和存储聚集扩展运算。
存储聚集变换运算作用在上述散列映射规则的第二级规则的定位表上,该运算的语义为:将某个存储节点上的某个存储聚集迁移到另一个存储节点上,表现为第二级规则中定位表的变化为:将某个存储聚集索引号所对应的某个副本的地址从一个值更新为另一个值。如图2和图3所示,该运算的效果为:将1号存储聚集在d4上的副本迁移到了d2上。
存储聚集扩展运算主要作用在上述散列映射规则的第一级规则上,因两级规则的依赖关系,第二级规则也会随第一级规则的变化相应变化,该运算的语义为:将每个存储聚集一分为二,以达到增加存储聚集数量,缩小单个存储聚集大小的目的,表现为第一级规则n值的递增,以及第二级规则中对应表的扩展。
第一级规则中n值的递增表明了模数的翻倍。模数翻倍后,以前的每个存储聚集都变为了两个。令存储聚集为x,其在通过该运算前的集合表示为:
bx={i|x=i mod K×2n,i∈I}
在通过该运算后变为如下两个集合:
b′x={i|x=i mod K×2n+1,i∈I}
这里:
通过该方法,原来的存储聚集x被划分为了互不相交的两个存储聚集,且保存在原来的存储节点上。
如图2、4所示,随着第一级规则中模数的翻倍,第二级规则中的对应表需要进行扩展,根据以上的集合表示,可很容易构造出扩展后的对应表。
以上规则有一个限制,即某个存储聚集的两个副本不能存储在同一个存储节点上,在散列映射规则上不能做到这个限制,因此需要在算法上加以实现。
由于散列映射规则的体积会随着系统规模的扩大而增大,为了尽可能的减少客户端在更新散列映射规则时的等待时间,提升用户体验,采用如下两种策略:
策略一,客户端对散列映射规则的更新采用基于版本的增量更新策略,只有在客户端并没有缓存规则或缓存的规则过于老旧时,进行散列映射规则的全量更新,尽可能的减少传输量,以加快散列映射规则更新速度,降低散列映射规则节点集群的压力。
策略二,首先,在对应表中,存储节点的地址使用IP二进制表示法,以压缩散列映射规则本身的体积,另外,在进行全量更新时,散列映射规则需要经过压缩,以减少传输过程的耗费。
此外,散列映射规则的每次更新,均只改变系统中极少量的定位信息,大部分定位信息仍然可以使用,系统并不需告知客户端更新散列映射规则,客户端只需要在感知到散列映射规则失效之后,对其进行更新即可。
在不考虑网络分区的情况下,上述基于多级映射的大规模多副本分布式存储系统的应用方法,从整体上看包括以下几个步骤:
(a)系统初始化;
(b)客户端检查是否需要更新散列映射规则,如果需要更新,则更新至与规则节点相同的散列映射规则;
(c)客户端通过GUID生成算法确定待上传资源的GUID,并根据GUID和散列映射规则计算出存储节点位置,将待上传资源存储至存储节点之中;
(d)客户端得到需要获取资源的GUID,并根据散列映射规则计算出需要获取资源的副本对应的存储节点地址,然后由与存储节点地址对应的存储节点查找该需要获取的资源,再向客户端回复查找结果。
下面对上述整体步骤进行一一说明。
(一)系统初始化,具体步骤如下:
(1)以初始化方式启动管理节点的主机和备机,此时,散列映射规则的模数为0;
(2)以初始化方式启动存储节点集群和规则节点集群,此时,所有存储节点上没有存储聚集,规则节点上的模数为0,版本为0,在存储节点启动完成时,管理节点会收到所有存储节点的心跳,得到整个系统中存储节点的配置,以反映其能力;
(3)管理员初始化系统中第一级规则的K值和n值,并让管理节点针对系统中每个存储节点的能力即权重,计算出合理的存储聚集分配情况,即对应表,对应表也可以由管理员手动设置;
对应表的初始化算法如下:
(1)计算系统中所有存储节点的权重,并得到权重总和,权重的算法可根据磁盘空间、CPU、网卡等的配置计算;
(2)用每个存储节点的权重除以总权重得到该存储节点应该存储的存储聚集比例;
(3)根据存储节点应该存储的存储聚集比例,将所有存储聚集的副本依次按带状分配给存储节点,在每次分配时,避免在同一个存储节点上放置一个存储聚集的多个副本,直到分配完成;
(4)管理员令管理节点根据得到的两级散列映射规则的信息,对系统进行初始化,管理节点根据对应表的设置,依次向存储节点发送当前的映射中的模数及存储聚集初始化的命令,存储节点保存该模数,并初始化对应的存储聚集,每个存储聚集的初始序列号在这里被设置为0;
(5)管理节点向规则节点集群发送初始化规则,规则节点集群将版本号自增,在初始化规则完成后,系统开始对外服务;
(二)客户端检查是否需要更新散列映射规则,如果需要更新,则更新至与规则节点相同的散列映射规则。客户端内散列映射规则的更新步骤如下:
(1)客户端向规则节点集群中的任一规则节点发送自身缓存规则的版本号,如果自身一开始没有规则的缓存,发送版本号0;
(2)规则节点将客户端发来的版本号与自身最新的版本号进行对比,如果该版本号为0,表明客户端没有规则,需要全量更新,如果该版本号过于老旧,也应该全量更新,其他情况下,使用增量更新,全量更新发送压缩后的散列映射规则以及最新版本号,增量更新发送两个版本之间的变化序列以及最新版本号,判断版本过于老旧的算法须结合具体实现进行优化;
(3)客户端接收到回复之后,或者将全量规则解压进行缓存,或者利用规则节点发来的变化序列更新本地缓存规则;
(三)客户端通过GUID生成算法和散列映射规则确定待上传资源的GUID,并将待上传资源存储至存储节点之中,具体如下:
(1)客户端根据GUID生成算法,生成所需存储资源的GUID;
(2)客户端通过GUID结合散列映射规则计算出资源的副本应该被存储的存储节点地址,并随机向其中一个存储节点发起连接,该存储节点作为该次上传的发起节点,当发起节点连接无误时,客户端向发起节点发送其需要上传资源的GUID以及该资源的所有副本对应的所有存储节点地址,当发起节点连接错误时,随机选取另一个存储节点重试,如果全部存储节点都连接错误,则更新规则并回到步骤(1)重新生成新的GUID;
(3)发起节点和与其对应的其他存储节点建立连接,并将GUID发送给与其对应的其他存储节点,所有存储节点都进行GUID和模数的取模运算,得到一个存储聚集号,并将该存储聚集号与自身所有的存储聚集号进行比较,验证客户端定位的准确性;
(4)如果连接上的存储节点数量达到上传的副本数量的最小值,且所有对应的存储节点确认定位准确,发起节点则向客户端回复确认信息,客户端开始上传资源,并由发起节点转发给其他存储节点,如果对应的存储节点定位不准确,则客户端更新规则到步骤(2);在上传过程中,如果发起节点失效,客户端回到步骤(2)重试,如果其他存储节点失效,则由发起节点判断副本数量是否达标,如果不达标,回复客户端上传失败并回到步骤(1)重新生成新的GUID;
(5)发起节点在收到超过要求副本数量的确认之后,回复客户端上传成功,如没有收到超过要求副本数量的确认,则向客户端回复上传失败,进行资源删除。
在该上传过程中,序列号的确认由存储节点自行确认即可,心跳交换序列号的过程使得各个存储节点上关于某个桶的序列号不会超过一个心跳的差值;出现不能恢复的错误时,发起节点只需要断开和其他存储节点的连接即可,存储节点感知到连接异常断开也只需直接删除掉该资源即可,序列号有两个作用,一个是作为资源是否上传完成的标识,用于垃圾清理,另一个是使各个存储聚集副本中的资源维持相同的单调不减序列,便于在存储节点出错时进行增量恢复。
(四)客户端得到需要获取资源的GUID,并计算出需要获取资源的副本对应的存储节点地址,然后由与存储节点地址对应的存储节点查找该需要获取的资源,再向客户端回复查找结果。具体步骤如下:
(1)客户端得到需要获取的资源的GUID,并据该GUID结合散列映射规则计算出资源的副本应该被存储的存储节点地址;
(2)客户端随机向其中一个存储节点发起连接,当发起连接错误时,随机选取另一个存储节点重试,如果全部都连接错误,更新规则并回到步骤(1)重试;
(3)客户端向连接上的存储节点发送需要获取的资源的GUID,存储节点进行GUID和模数的取模运算,得到一个存储聚集号,并将该存储聚集号与自身所有的存储聚集号进行比较,以验证客户端定位的准确性,当存储节点发现客户端定位错误时,回绝客户端请求,并告知规则过期,客户端更新规则后回到步骤(1)重试;
(4)在通过验证之后,存储节点在对应存储聚集中查找该对应资源的GUID,如找到相应的GUID,则向客户端回复对应资源的数据;如没有找到相应的GUID,则向客户端回复出错,客户端回到步骤(2)。
以上述应用方法为基础,本发明还提供了相应的故障恢复方法,流程如下:存储节点向规则节点集群获取规则,找到保存该存储聚集副本的其他存储节点,向这些存储聚集确认对应GUID的存在情况,如发现该GUID确认存在,则向其他存储节点获取该资源,如不存在,则结束会话。
在上述分布式存储系统的基础上,我们对其实现方法进行了进一步地改进,具体包括:
管理节点检查存储节点发来的心跳信息,当检查到存储节点压力过大即过载时,采用负载调整方法对该压力过大的过载存储节点进行负载调整;当检查到存储节点失效时,采用系统容错方法对该失效存储节点进行系统容错。
所述分布式存储系统中,每个存储节点存储有至少一个存储聚集,每个存储聚集至少有一个存储聚集副本,且当存储聚集的存储聚集副本为两个以上时,这两个以上存储聚集副本分别存储在不同的存储节点上,且该两个以上存储聚集副本两两之间保持心跳连接。在同一个存储节点上的多个存储聚集副本共用存储节点提供的网络资源,且存储聚集的多个副本之间相互维持心跳连接,每隔一个固定的时间,同一存储聚集的多个存储聚集副本之间进行心跳交互,且多个存储聚集副本之间的资源数据转发、删除等都复用该心跳连接,存储聚集间通过心跳连接捎带同一序列号,且存储聚集与存储聚集之间的序列号相差一个心跳范围内。
在本发明中,存储聚集的每个副本均有以下四种状态:
启动状态:当存储节点启动时,在其上的每一个存储聚集都处于启动状态,在该状态下,存储聚集会等待一段时间,这段时间内,如有其他处于工作状态的相同存储聚集的副本连接到它,和它建立心跳,其即进入恢复状态;如没有其他处于工作状态的相同存储聚集的副本连接到它,则其进入工作状态。
工作状态:只有在该状态下,存储聚集才对客户端服务,在其他三种状态下,如有客户端连接,则回绝客户端请求,在该状态下,若存储聚集副本并没有和另外对应的副本中的任一个建立心跳连接,则其会周期性试探和其他未建立心跳的副本建立心跳连接。在此过程中,由于存在失效副本异地重建的可能性,该处于工作状态的副本也会定期向规则节点拖取对应存储聚集的存储节点列表。
恢复状态:当某存储聚集副本进入该状态时,绝大部分情况是其处于失效重启的过程中,存储聚集副本会向连结上它的处于工作状态的存储聚集副本进行数据的同步恢复,其向正常工作的副本发送其保持的最大的序列号值,该值根据副本之间心跳的误差稍作减小,正常工作的副本会将其维护的处在该序列号之后的所有资源数据的GUID发送回该副本,之后,该副本会逐个遍历得到的GUID列表,并向正常工作的副本进行数据同步。在这个恢复的过程中,存储聚集副本可以接收由发起节点转发来的数据,并进行存储,但绝不会成为发起节点,对用户服务,于恢复状态的存储聚集副本,在向一个存储聚集副本同步数据完成以后,会检查当前的心跳连接的状态,若与另外两个存储聚集副本的心跳连接都已建立,则立即启动与另一个存储聚集副本的数据同步流程,若此时仍然只有一个存储聚集副本的心跳连接,则处于恢复状态的存储聚集副本将自己再次设置为启动状态,再等待另一个超时时间后,来决定进行再一次的恢复或是进入工作状态。
重建状态:该状态仅在存储聚集变换时使用。该状态下,存储聚集副本并不对外服务,也不对外建立心跳,甚至另与其对应的存储聚集副本也无法感知到该副本的存在。
如图5所示,所述分布式存储系统的负载调整方法包括以下步骤:
(a)设定过载存储节点上的存储聚集数量标准值,管理节点检查过载存储节点上的存储聚集数量,若超过已设定的标准值则发布进行存储聚集变换的命令,若低于已设定的标准值则发布进行存储聚集扩展的命令;
(b)与管理节点保持心跳的存储节点根据管理节点发布的命令进行相应的存储聚集扩展或存储聚集变换;
(c)存储节点在完成相应的存储聚集扩展或存储聚集变换后,向管理节点回复负载调整成功;
(d)管理节点收到回复后对规则进行相应的存储聚集扩展或存储聚集变换运算,并通知规则节点集群更新规则。
具体地说,所述存储节点进行存储聚集扩展包括以下步骤:
(1)存储节点在收到存储聚集扩展命令后将自身已保存的模数乘以二;
(2)该存储节点的存储聚集副本在序列号保持不变的情况下根据新的模数一分为二,且将新的存储聚集副本的状态设置为启动状态,并在存储聚集副本之间建立心跳,之后向管理节点回复存储聚集扩展成功;
(3)管理节点收到回复之后,对规则执行存储聚集扩展运算,并通知规则节点集群更新规则。
所述存储节点进行存储聚集变换包括以下步骤:
(1)管理节点在系统中选择负载最轻的存储节点作为存储聚集变换的目的存储节点,并选择过载存储节点和目的存储节点的存储聚集副本集合的差集最小的一个存储聚集副本作为待迁移存储聚集副本;
(2)目的存储节点根据管理节点的通知同步过载存储节点中待迁移存储聚集副本的数据,并在自身重建与管理节点保持心跳连接的待迁移存储聚集副本;
(3)目的存储节点根据过载存储节点中待迁移存储聚集副本的数据向过载存储节点获取资源,并将获取的资源保存到重建的待迁移存储聚集副本中,完成后向管理节点回复存储聚集变换成功;
(4)管理节点收到回复之后,对规则执行存储聚集变换运算,并通知规则节点集群更新规则,之后将客户端对过载存储节点的访问重新定向到目的存储节点;
(5)将重建的待迁移存储聚集副本设定为启动状态,该重建的待迁移存储聚集副本将剩余没有完全同步的资源同步过来,在同步完成后,对应的存储聚集开始工作;
(6)过载存储节点中断与其对应的存储聚集副本的心跳连接,并删除该存储聚集副本。与该存储聚集副本保持心跳连接的副本发现其心跳中断后,周期性重连另一个存储聚集副本,并在这一周期性的重连过程中周期性获取规则,由于规则已经改变,便可以连接上目的存储节点。
如图6所示,所述分布式存储系统的系统容错方法,若设定存储节点失效后的重启时间上限值,则该系统容错流程包括以下两种情况:
第一种情况,当存储节点失效后的重启时间超过上限值,则容错流程中管理节点对失效存储节点中的每一个存储聚集执行以下操作:
(1)管理节点选择系统内负载最轻的存储节点作为目的存储节点;该目的存储节点不包含有待重建存储聚集副本的存储节点;
(2)目的存储节点根据管理节点的通知向与失效存储节点具有相同存储聚集副本的其中一个存储节点同步待迁移的存储聚集副本的数据,并在自身重建待迁移存储聚集副本;
(3)我们将与失效存储节点具有相同存储聚集副本的存储节点作为源存储节点,则目的存储节点根据待迁移存储聚集副本的数据向源存储节点获取资源,并将获取的资源保存到重建的待迁移存储聚集副本中;
(4)管理节点对规则进行存储聚集变换操作,并通知规则节点更新规则,之后,将目的存储节点对应的存储聚集副本设置为启动状态,并将客户端对失效存储节点的访问重新定向到目的存储节点;与其保持心跳连接的其他存储聚集副本会周期性重连另一个存储聚集副本,在这个周期性的重连过程中同时会周期性的获取规则,由于规则已经改变,便可以连接上目的存储节点,该新连的存储聚集副本会进入恢复状态,将剩余没有完全同步的资源同步过来,在同步完成后,对应的存储聚集进入工作状态,开始对外服务;
第二种情况,当存储节点失效后的重启时间低于上限值,该容错流程包括以下步骤:
(1)失效存储节点重新启动后向规则节点获取最新的规则;
(2)若在失效存储节点失效期间系统进行了存储聚集扩展运算,失效储节点则根据扩展后的规则对已有的存储聚集副本进行分裂,之后将已有的存储聚集副本和规则进行对比,对比之后删除已经不属于该失效存储节点的存储聚集副本;
(3)失效存储节点将其上的存储聚集副本状态设定为启动状态,并将失效期间的数据同步过来。
所述分布式存储系统中资源上传流程包括以下步骤:
(1)客户端根据GUID生产算法,生成待上传资源的GUID;
(2)客户端检查自身是否缓存有规则,如没有则更新规则,如有则根据缓存的规则计算出对应GUID应该被存储的存储节点地址,并随机向其中一个存储节点发起连接,且将该存储节点作为该次上传的发起节点;如连接错误,则更换其他存储节点重试,如多次均重试失败,则更新规则,也可以通过更换GUID重新开始上传流程;
(3)发起节点连接到待存储资源的GUID,在确定客户端定位正确且对应的存储聚集为工作状态后,向与其保持心跳连接的存储聚集副本发送待上传资源的GUID;发起节点首先将客户端上传的GUID与自身保存的模数进行取模运算,得到相应的存储聚集号,验证自身是否确实拥有该存储聚集,如得到的存储聚集号并不是自身所拥有的,向客户端回复定位失败,如对应的存储聚集并不是工作状态,则向客户端拒绝服务;
(4)客户端开始上传,发起节点发送对应的数据到存储与其保持心跳连接的存储聚集副本的存储节点,完成上传;在该过程中,若发起节点失效,则客户端连接其他对应的存储聚集副本所在的存储节点进行重新上传。
在上传完成之后,所有的存储聚集均将自身维护的序列号作为当前资源的序列号进行保存,以用于系统容错流程。
所述分布式存储系统中资源删除流程包括以下步骤:
(1)客户端获得待删除资源的GUID;
(2)客户端检查自身是否缓存有规则,如没有则更新规则,如有则根据缓存的规则计算出对应GUID应该被存储的存储节点地址,并随机向其中一个存储节点发起连接,且将该存储节点作为该次删除的发起节点;若连接错误,则更换其他存储节点重试,若多次重试失败,则更新规则;
在该过程中,发起节点首先将客户端上传的GUID与自身保存的模数进行取模运算,得到相应的存储聚集号,验证自身是否确实拥有该存储聚集,如得到的存储聚集号并不是自身所拥有的,其向客户端回复定位失败错误,如对应的存储聚集并不是工作状态,则向客户端拒绝服务;
(3)发起节点连接到待删除资源的GUID,在确定客户端定位正确且对应的存储聚集为工作状态后,向与其保持心跳连接的存储聚集副本发送待删除资源的GUID,并为待删除资源打上删除标签;
(4)在所有保持心跳连接的存储聚集副本同时在线时,将打有删除标签的资源进行删除。
具体地说,所述规则节点集群上的规则更新具体包括以下步骤:
(1)管理节点对规则进行一次操作,其将规则版本递增一,并将对应的改动写入版本信息列表;
在该分布式存储系统中,我们采用基于版本的规则更新,规则在规则节点和客户端的更新均采用版本机制,当管理节点对规则进行一次相应的存储聚集扩展或存储聚集变换运算之后,其将对应的规则的变化发送给规则节点,规则节点根据该对应的变化将自身的规则更新;客户端在定位发生错误需要更新规则时,则将自己缓存的规则的当前版本号发送给规则节点,规则节点只将客户提供的规则版本号和自身具有的规则版本号之间的变化发送给客户端;发送的变化的版本信息格式如下:
(2)管理节点通知规则节点规则已更新,让规则节点更新规则;
(3)规则节点将当前规则的版本号发送到管理节点,管理节点将该版本号与最新的版本号进行对比,并将规则的变更序列发送给规则节点;
(4)规则节点收到管理节点发来的规则变更序列之后,按版本序列号从小到大的顺序在自身缓存的规则上逐个执行存储聚集扩展或存储聚集变换操作,直至将当前规则更新至最新。
按照上述实施例,便可很好地实现本发明。
Claims (6)
1.基于负载调整和系统容错的分布式存储系统的实现方法,其特征在于,包括以下步骤:
(1)系统初始化;
(2)客户端检查是否需要更新规则,如果需要更新,则将规则更新至与规则节点相同的规则;
(3)客户端通过GUID生成算法确定待上传资源的GUID,并根据GUID结合规则计算出存储节点位置,将待上传资源存储至存储节点之中;
(4)客户端得到需要获取资源的GUID,并根据规则计算出需要获取资源的副本对应的存储节点地址,然后由与存储节点地址对应的存储节点查找该需要获取的资源,再向客户端回复查找结果;
(5)管理节点检查存储节点发来的心跳信息,当检查到存储节点压力过大即过载时,采用负载调整方法对该压力过大的过载存储节点进行负载调整;当检查到存储节点失效时,采用系统容错方法对该失效存储节点进行系统容错;
所述每个存储节点存储有至少一个存储聚集,每个存储聚集至少有一个存储聚集副本,且当存储聚集的存储聚集副本为两个以上时,这两个以上存储聚集副本分别存储在不同的存储节点上,且该两个以上存储聚集副本两两之间保持心跳连接;
所述负载调整方法包括以下步骤:
(a)设定过载存储节点上的存储聚集数量标准值,管理节点检查过载存储节点上的存储聚集数量,若超过已设定的标准值则发布进行存储聚集变换的命令,若低于已设定的标准值则发布进行存储聚集扩展的命令;
(b)与管理节点保持心跳的存储节点根据管理节点发布的命令进行相应的存储聚集扩展或存储聚集变换;
(c)存储节点在完成相应的存储聚集扩展或存储聚集变换后,向管理节点回复负载调整成功;
(d)管理节点收到回复后对规则进行相应的存储聚集扩展或存储聚集变换运算,并通知规则节点集群更新规则;
所述存储节点进行存储聚集扩展包括以下步骤:
(1)存储节点在收到存储聚集扩展命令后将自身已保存的模数乘以二;
(2)该存储节点的存储聚集副本在序列号保持不变的情况下根据新的模数一分为二,且将新的存储聚集副本的状态设置为启动状态,并在存储聚集副本之间建立心跳,之后向管理节点回复存储聚集扩展成功;
(3)管理节点收到回复之后,对规则执行存储聚集扩展运算,并通知规则节点集群更新规则;
其中,GUID是指全局唯一标识符。
2.根据权利要求1所述的基于负载调整和系统容错的分布式存储系统的实现方法,其特征在于,所述存储节点进行存储聚集变换包括以下步骤:
(1)管理节点在系统中选择负载最轻的存储节点作为存储聚集变换的目的存储节点,并选择过载存储节点和目的存储节点的存储聚集副本集合的差集最小的一个存储聚集副本作为待迁移存储聚集副本;
(2)目的存储节点根据管理节点的通知同步过载存储节点中待迁移存储聚集副本的数据,并在自身重建与管理节点保持心跳连接的待迁移存储聚集副本;
(3)目的存储节点根据过载存储节点中待迁移存储聚集副本的数据向过载存储节点获取资源,并将获取的资源保存到重建的待迁移存储聚集副本中,完成后向管理节点回复存储聚集变换成功;
(4)管理节点收到回复之后,对规则执行存储聚集变换运算,并通知规则节点集群更新规则,之后将客户端对过载存储节点的访问重新定向到目的存储节点;
(5)将重建的待迁移存储聚集副本设定为启动状态,该重建的待迁移存储聚集副本将剩余没有完全同步的资源同步过来,在同步完成后,对应的存储聚集开始工作;
(6)过载存储节点中断与其对应的存储聚集副本的心跳连接,并删除该存储聚集副本。
3.根据权利要求1所述的基于负载调整和系统容错的分布式存储系统的实现方法,其特征在于,所述系统容错方法中,若设定存储节点失效后的重启时间上限值,则该系统容错流程包括以下两种情况:
当存储节点失效后的重启时间超过上限值,则容错流程中管理节点对失效存储节点中的每一个存储聚集执行以下操作:
(1)管理节点选择系统内负载最轻的存储节点作为目的存储节点;
(2)目的存储节点根据管理节点的通知向与失效存储节点具有相同存储聚集副本的其中一个存储节点同步待迁移的存储聚集副本的数据,并在自身重建待迁移存储聚集副本;
(3)将与失效存储节点具有相同存储聚集副本的存储节点作为源存储节点,则目的存储节点根据源存储节点中待迁移存储聚集副本的数据向源存储节点获取资源,并将获取的资源保存到重建的待迁移存储聚集副本中;
(4)管理节点对规则进行存储聚集变换操作,并通知规则节点更新规则,之后,将目的存储节点对应的存储聚集副本设置为启动状态,并将客户端对失效存储节点的访问重新定向到目的存储节点;
当存储节点失效后的重启时间低于上限值,该容错流程包括以下步骤:
(1)失效存储节点重新启动后向规则节点获取最新的规则;
(2)若在失效存储节点失效期间系统进行了存储聚集扩展运算,失效储节点则根据扩展后的规则对已有的存储聚集副本进行分裂,之后将已有的存储聚集副本和规则进行对比,对比之后删除已经不属于该失效存储节点的存储聚集副本;
(3)失效存储节点将其上的存储聚集副本状态设定为启动状态,并将失效期间的数据同步过来。
4.根据权利要求1所述的基于负载调整和系统容错的分布式存储系统的实现方法,其特征在于,还包括资源上传流程,该上传流程包括以下步骤:
(1)客户端根据GUID生产算法,生成待上传资源的GUID;
(2)客户端检查自身是否缓存有规则,如没有则更新规则,如有则根据缓存的规则计算出对应GUID应该被存储的存储节点地址,并随机向其中一个存储节点发起连接,且将该存储节点作为该次上传的发起节点;
(3)发起节点连接到待存储资源的GUID,在确定客户端定位正确且对应的存储聚集为工作状态后,向与其保持心跳连接的存储聚集副本发送待上传资源的GUID;
(4)客户端开始上传,发起节点发送对应的数据到存储与其保持心跳连接的存储聚集副本的存储节点,完成上传。
5.根据权利要求1所述的基于负载调整和系统容错的分布式存储系统的实现方法,其特征在于,还包括资源删除流程,该删除流程包括以下步骤:
(1)客户端获得待删除资源的GUID;
(2)客户端检查自身是否缓存有规则,如没有则更新规则,如有则根据缓存的规则计算出对应GUID应该被存储的存储节点地址,并随机向其中一个存储节点发起连接,且将该存储节点作为该次删除的发起节点;
(3)发起节点连接到待删除资源的GUID,在确定客户端定位正确且对应的存储聚集为工作状态后,向与其保持心跳连接的存储聚集副本发送待删除资源的GUID,并为待删除资源打上删除标签;
(4)在所有保持心跳连接的存储聚集副本同时在线时,将打有删除标签的资源进行删除。
6.根据权利要求2~5任一项所述的基于负载调整和系统容错的分布式存储系统的实现方法,其特征在于,所述规则节点集群上的规则更新具体包括以下步骤:
(1)管理节点对规则进行一次操作,其将规则版本递增一,并将对应的改动写入版本信息列表;
(2)管理节点通知规则节点规则已更新,并让规则节点更新规则;
(3)规则节点将当前规则的版本号发送到管理节点,管理节点将该版本号与最新的版本号进行对比,并将规则的变更序列发送给规则节点;
(4)规则节点收到管理节点发来的规则变更序列之后,按版本序列号从小到大的顺序在自身缓存的规则上逐个执行存储聚集扩展或存储聚集变换操作,直至将当前规则更新至最新。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210172660.9A CN102694863B (zh) | 2012-05-30 | 2012-05-30 | 基于负载调整和系统容错的分布式存储系统的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210172660.9A CN102694863B (zh) | 2012-05-30 | 2012-05-30 | 基于负载调整和系统容错的分布式存储系统的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102694863A CN102694863A (zh) | 2012-09-26 |
CN102694863B true CN102694863B (zh) | 2015-08-26 |
Family
ID=46860145
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210172660.9A Active CN102694863B (zh) | 2012-05-30 | 2012-05-30 | 基于负载调整和系统容错的分布式存储系统的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102694863B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104156367B (zh) * | 2013-05-14 | 2017-12-01 | 阿里巴巴集团控股有限公司 | 一种搜索引擎的扩容方法及搜索服务系统 |
CN104486438B (zh) * | 2014-12-22 | 2019-02-19 | 华为技术有限公司 | 分布式存储系统的容灾方法及装置 |
CN105915650B (zh) * | 2016-06-21 | 2019-05-24 | 腾讯科技(深圳)有限公司 | 负载均衡方法和装置 |
CN106817402B (zh) * | 2016-11-29 | 2018-02-27 | 上海壹账通金融科技有限公司 | 缓存数据的处理方法及装置 |
US20190068466A1 (en) * | 2017-08-30 | 2019-02-28 | Intel Corporation | Technologies for auto-discovery of fault domains |
CN109151028A (zh) * | 2018-08-23 | 2019-01-04 | 郑州云海信息技术有限公司 | 一种分布式存储系统容灾方法及装置 |
CN111176584B (zh) * | 2019-12-31 | 2023-10-31 | 曙光信息产业(北京)有限公司 | 一种基于混合内存的数据处理方法及装置 |
CN112134744B (zh) * | 2020-10-23 | 2023-04-18 | 上海途鸽数据科技有限公司 | 一种分布式管理系统中节点的管理方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101909068A (zh) * | 2009-06-02 | 2010-12-08 | 华为技术有限公司 | 一种文件副本管理方法及装置、系统 |
CN102055650A (zh) * | 2009-10-29 | 2011-05-11 | 华为技术有限公司 | 负载均衡方法及系统和管理服务器 |
CN102301367A (zh) * | 2008-10-24 | 2011-12-28 | Ilt创新公司 | 分布式数据存储 |
CN102307221A (zh) * | 2011-03-25 | 2012-01-04 | 国云科技股份有限公司 | 一种云存储系统及其实现方法 |
CN102411637A (zh) * | 2011-12-30 | 2012-04-11 | 创新科软件技术(深圳)有限公司 | 分布式文件系统的元数据管理方法 |
-
2012
- 2012-05-30 CN CN201210172660.9A patent/CN102694863B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102301367A (zh) * | 2008-10-24 | 2011-12-28 | Ilt创新公司 | 分布式数据存储 |
CN101909068A (zh) * | 2009-06-02 | 2010-12-08 | 华为技术有限公司 | 一种文件副本管理方法及装置、系统 |
CN102055650A (zh) * | 2009-10-29 | 2011-05-11 | 华为技术有限公司 | 负载均衡方法及系统和管理服务器 |
CN102307221A (zh) * | 2011-03-25 | 2012-01-04 | 国云科技股份有限公司 | 一种云存储系统及其实现方法 |
CN102411637A (zh) * | 2011-12-30 | 2012-04-11 | 创新科软件技术(深圳)有限公司 | 分布式文件系统的元数据管理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102694863A (zh) | 2012-09-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102694863B (zh) | 基于负载调整和系统容错的分布式存储系统的实现方法 | |
CN102571991B (zh) | 基于多级映射的大规模多副本分布式存储系统的应用方法 | |
CN102523234B (zh) | 一种应用服务器集群实现方法及系统 | |
US7653668B1 (en) | Fault tolerant multi-stage data replication with relaxed coherency guarantees | |
CN103268318B (zh) | 一种强一致性的分布式键值数据库系统及其读写方法 | |
CN102855239B (zh) | 一种分布式地理文件系统 | |
CN102693324B (zh) | 一种分布式数据库同步系统、同步方法和节点管理方法 | |
US9170892B2 (en) | Server failure recovery | |
CN105814544B (zh) | 用于支持分布式数据网格中的持久化分区恢复的系统和方法 | |
Chang et al. | Myriad: Cost-effective disaster tolerance | |
CN111182067B (zh) | 一种基于星际文件系统ipfs的数据写入方法及设备 | |
US9547706B2 (en) | Using colocation hints to facilitate accessing a distributed data storage system | |
JP2020514885A (ja) | データセンタにわたってメタデータおよびデータの整合性を維持するための方法、デバイス、およびシステム | |
US10296254B2 (en) | Method and device for synchronization in the cloud storage system | |
CN102122306A (zh) | 一种数据处理方法及应用该方法的分布式文件系统 | |
CN103207867A (zh) | 处理数据块的方法、发起恢复操作的方法和节点 | |
CN111274310A (zh) | 一种分布式数据缓存方法及系统 | |
CN102591944A (zh) | 去重复的文件的部分召回 | |
CN105069152A (zh) | 数据处理方法及装置 | |
CN107623703B (zh) | 全局事务标识gtid的同步方法、装置及系统 | |
WO2014177085A1 (zh) | 分布式多副本数据存储方法及装置 | |
CN104902009A (zh) | 一种基于可擦除编码和链式备份的分布式存储系统 | |
CN103428288B (zh) | 基于分区状态表和协调节点的副本同步方法 | |
CN112492022A (zh) | 提高数据库可用性的集群、方法、系统及存储介质 | |
CN108900621B (zh) | 一种基于雾计算模式的差异性云同步方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |