一种数据存储节点选择方法转让专利

申请号 : CN202010094480.8

文献号 : CN111309260B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈鹏刘露刘洋

申请人 : 西安奥卡云数据科技有限公司

摘要 :

本发明公开了一种数据存储节点的选择方法,获取待存储数据块的数据加密摘要值;将数据加密摘要值与分布式存储系统存储节点数组中的节点加密摘要值依次进行比较,直至找到大于数据加密摘要值的第一节点加密摘要值;提取第一节点加密摘要值对应的第一存储节点的编号;将待存储数据块存储至第一存储节点;本发明技术方案通过建立分布式存储系统存储节点数组,将每个存储节点的存储空间均分为大小相等的多个单位存储空间,并在数组中同一排布,使得数据存储时节点的选择更加均衡。

权利要求 :

1.一种数据存储节点的选择方法,其特征在于,包括:获取待存储数据块的数据加密摘要值;所述数据加密摘要值为分布式存储系统对所述待存储数据块进行哈希计算得到;

将所述数据加密摘要值与分布式存储系统存储节点数组中的节点加密摘要值依次进行比较,直至找到大于所述数据加密摘要值的第一节点加密摘要值;

所述存储节点数组的生成包括:

获取分布式存储系统中每个存储节点的节点ID和节点容量;

按照预定的空间大小将每个所述节点容量分为多个单位容量;

采用加密摘要算法为每个所述单位容量生成对应的节点加密摘要值;

将每个存储节点的多个所述节点加密摘要值按照由小至大的顺序进行排列,得到所述存储节点数组;

提取所述第一节点加密摘要值对应的第一存储节点的编号;

将所述待存储数据块存储至所述第一存储节点。

2.如权利要求1所述的一种数据存储节点的选择方法,其特征在于,将所述待存储数据块存储至所述第一存储节点之后,还包括:获取存储节点:将所述数据加密摘要值与分布式存储系统存储节点数组中的所述第一节点加密摘要值之后的节点加密摘要值依次进行比较,直至找到下一个大于所述数据加密摘要值的第二节点加密摘要值;其中,所述第二节点加密摘要值对应的存储节点的编号与第一节点加密摘要值对应的存储节点的编号不同;将所述待存储数据块存储至第二存储节点;

重复执行所述获取存储节点步骤,直至所述待存储数据块的存储次数达到预定存储次数。

3.如权利要求2所述的一种数据存储节点的选择方法,其特征在于,找到下一个大于所述数据加密摘要值的第二节点加密摘要值包括:提取所述第二节点加密摘要值对应的第二存储节点的编号;

判断所述第二存储节点的编号与所述第一存储节点的编号是否相同:响应于所述第二存储节点的编号与所述第一存储节点的编号不同,将所述待存储数据块存储至所述第二存储节点中;

响应于所述第二存储节点的编号与所述第一存储节点的编号相同,继续在所述分布式存储系统存储节点数组中寻找下一个第二节点加密摘要值,直至所述第二存储节点的编号与所述第一存储节点的编号不同,将所述待存储数据块存储至所述第二存储节点中。

4.如权利要求3所述的一种数据存储节点的选择方法,其特征在于,当所述第二存储节点的编号与所述第一存储节点的编号不同时,还包括:判断所述第二存储节点的编号对应的存储域编号与第一存储节点的编号对应的存储域编号是否相同;

当所述第二存储节点的编号对应的存储域编号与第一存储节点的编号对应的存储域编号不同时,将所述待存储数据块存储至第二存储节点中;

当所述第二存储节点的编号对应的存储域编号与第一存储节点的编号对应的存储域编号相同时,继续寻找下一个第二存储节点,直至找到的第二存储节点的编号对应的存储域编号与第一存储节点的编号对应的存储域编号不同时,将所述待存储数据块存储至第二存储节点中。

说明书 :

一种数据存储节点选择方法

【技术领域】

[0001] 本发明属于计算机存储技术领域,尤其涉及一种数据存储节点的选择方法。【背景技术】
[0002] 随着大数据时代的降临,业务应用对存储空间的需求越来越大,性能越来越高。海量的数据对存储的要求已经远远超出了传统的多控存储系统所能承受的范围。没有哪一套
单机的存储能够提供如此大的数据存储能力。存储系统正在向着大规模、分布式、虚拟化方
向发展。
[0003] 分布式存储空间的管理,是通过某种手段或者软件将分散在多个服务器节点上的零散硬盘空间组织到一起,组成一个逻辑上连续的大型储存空间。然后,由多台存储服务器
相互协作,给用户呈现一个统一的、虚拟的单一空间视图。
[0004] 在现有的分布式存储系统中,虽然可以把各个不同的存储节点进行整合,但是,在数据存储时难以做到各个存储节点的平均分配,这就使得个别节点存储量远超其他存储节
点,进而导致该存储节点的工作效率低下。
【发明内容】
[0005] 本发明的目的是提供一种数据存储节点的选择方法,以解决分布式存储系统中各个存储节点数据存储量不均衡的问题。
[0006] 本发明采用以下技术方案:一种数据存储节点的选择方法,包括:
[0007] 获取待存储数据块的数据加密摘要值;
[0008] 将数据加密摘要值与分布式存储系统存储节点数组中的节点加密摘要值依次进行比较,直至找到大于数据加密摘要值的第一节点加密摘要值;
[0009] 提取第一节点加密摘要值对应的第一存储节点的编号;
[0010] 将待存储数据块存储至第一存储节点。
[0011] 进一步地,存储节点数组的生成包括:
[0012] 获取分布式存储系统中每个存储节点的节点ID和节点容量;
[0013] 按照预定的空间大小将每个节点容量分为多个单位容量;
[0014] 采用加密摘要算法为每个单位容量生成对应的节点加密摘要值;
[0015] 将每个存储节点的多个节点加密摘要值按照由小至大的顺序进行排列,得到存储节点数组。
[0016] 进一步地,将待存储数据块存储至第一存储节点之后,还包括:
[0017] 获取存储节点:将数据加密摘要值与分布式存储系统存储节点数组中的第一节点加密摘要值之后的节点加密摘要值依次进行比较,直至找到下一个大于数据加密摘要值的
第二节点加密摘要值;其中,第二节点加密摘要值对应的存储节点的编号与第一节点加密
摘要值对应的存储节点的编号不同;将待存储数据块存储至第二存储节点;
[0018] 重复执行获取存储节点步骤,直至待存储数据块的存储次数达到预定存储次数。
[0019] 进一步地,找到下一个大于数据加密摘要值的第二节点加密摘要值包括:
[0020] 提取第二节点加密摘要值对应的第二存储节点的编号;
[0021] 判断第二存储节点的编号与第一存储节点的编号是否相同:
[0022] 响应于第二存储节点的编号与第一存储节点的编号不同,将待存储数据块存储至第二存储节点中;
[0023] 响应于第二存储节点的编号与第一存储节点的编号相同,继续在分布式存储系统存储节点数组中寻找下一个第二节点加密摘要值,直至第二存储节点的编号与第一存储节
点的编号不同,将待存储数据块存储至第二存储节点中。
[0024] 进一步地,当第二存储节点的编号与第一存储节点的编号不同时,还包括:
[0025] 判断第二存储节点的编号对应的存储域编号与第一存储节点的编号对应的存储域编号是否相同;
[0026] 当第二存储节点的编号对应的存储域编号与第一存储节点的编号对应的存储域编号不同时,将待存储数据块存储至第二存储节点中;
[0027] 当第二存储节点的编号对应的存储域编号与第一存储节点的编号对应的存储域编号相同时,继续寻找下一个第二存储节点,直至找到的第二存储节点的编号对应的存储
域编号与第一存储节点的编号对应的存储域编号不同时,将待存储数据块存储至第二存储
节点中。
[0028] 本发明的有益效果是:本发明技术方案通过建立分布式存储系统存储节点数组,将每个存储节点的存储空间均分为大小相等的多个单位存储空间,并在数组中同一排布,
使得数据存储时节点的选择更加均衡,系统可以按数据的内容将数据平均分布到不同的存
储节点中,并提供了相应的机制,保护数据和应用设置,数据在节点间的移动对上层应用透
明,为实现全局重复数据删除提供了基础。
【附图说明】
[0029] 图1为本发明是实施例中分布式存储系统中的数组结构示意图。【具体实施方式】
[0030] 下面结合附图和具体实施方式对本发明进行详细说明。
[0031] 分布式存储系统由多个存储节点(以下简称为节点)组成,每个存储节点负责保存一部分的用户数据。而数据具体被保存到哪个存储节点,在一般的存储系统中,通过大映射
表或树一类的元数据来维护,这造成了元数据管理的负担。另外在传统方案中,元数据所在
的存储节点会变成“特权存储节点”,带来单点故障的隐患。
[0032] 分布式管理的存储系统需要跨存储节点地将每个服务器的零散存储空间组织起来,给用户呈现一个统一连续的视图。节点和节点之间的通讯依赖成熟的网络协议例如
TCP/IP,在现代的某些场景里也可以使用新型网络设备例如ROCE设备或者INFINIBAND设
备。
[0033] 同时,在分布式存储系统中,节点可能会暂时或永久地失效。新的节点随时可能加入,旧的节点随时可能退出。每当组成系统的节点发生变化的时候,系统中的数据就需要在
节点间进行移动,以达到节点间负载的均衡。数据在节点间移动是通过网络,这往往是一种
代价昂贵的操作。在数据移动期间,系统整体性能会下降。因此,如何减少数据移动成为一
个需要解决的问题。
[0034] 本发明实施例公开了一种数据存储节点的选择方法,包括以下步骤:
[0035] 获取待存储数据块的数据加密摘要值;将数据加密摘要值与分布式存储系统存储节点数组中的节点加密摘要值依次进行比较,直至找到大于数据加密摘要值的第一节点加
密摘要值;提取第一节点加密摘要值对应的第一存储节点的编号;将待存储数据块存储至
第一存储节点。
[0036] 本发明技术方案通过建立分布式存储系统存储节点数组,将每个存储节点的存储空间均分为大小相等的多个单位存储空间,并在数组中同一排布,使得数据存储时节点的
选择更加均衡,系统可以按数据的内容将数据平均分布到不同的存储节点中,并提供了相
应的机制,保护数据和应用设置,数据在节点间的移动对上层应用透明,为实现全局重复数
据删除提供了基础。
[0037] 作为一种具体的实现方式,存储节点数组的生成包括:
[0038] 获取分布式存储系统中每个存储节点的节点ID和节点容量。在系统中,当系统启动的时候,每个节点检测自身的磁盘容量,再通过集群网络向其他节点进行广播,广播内容
中包含节点ID和节点容量。
[0039] 各个节点通过协商,收集到所有节点的ID和容量,然后每个节点分别开始构建DHT(即分布式哈希表)。
[0040] 按照预定的空间大小将每个节点容量分为多个单位容量;采用加密摘要算法为每个单位容量生成对应的节点加密摘要值;将每个存储节点的多个节点加密摘要值按照由小
至大的顺序进行排列,得到存储节点数组。
[0041] 具体的,可以采用SHA1、SHA256或者CITYHASH一类的加密摘要算法,为每个节点计算节点加密摘要值。根据节点容量的大小,为每个节点计算出多个加密摘要值。容量越大,
加密摘要值越多,容量越小,加密摘要值越少。在本实施例中,是按照为每1MB节点容量就生
成一个加密摘要值。例如,节点容量为1TB,那么在DHT中,就会为该节点生成1TB/1MB=1M个
节点加密摘要值。节点加密摘要值从H1,H2……,一直到Hn,每个加密摘要都有一个与之关
联的节点。
[0042] 将所有加密摘要值装入一个连续的数组空间,按照加密摘要值的大小排序。由于加密摘要值是散列的,因此,按数值大小排列加密摘要值会将代表不同节点的加密摘要值
打散交叉装入数组,可以证明其概率分布为统一分布(UNIFORM DISTRIBUTION),至此,数组
构建完成,即DHT构建完成。
[0043] 每当有新的数据块写入,系统对数据块进行哈希计算,得到数据加密摘要值DH1,DH2……,DHn。
[0044] 数据加密摘要值在前文所述的数组中进行比较查询,直到找到下一个比数据加密摘要值更大的节点加密摘要值。此时,该节点加密摘要值所代表的节点,就是新的数据块应
该被保存的节点。
[0045] 由于节点加密摘要值是根据容量计算,且统一分布。根据概率,数据块会以节点容量大小为权重,被平均分布到每个节点。由于数据加密摘要值不会改变(数据块内容不变,
加密摘要值也不会变),因此,对同一块数据进行计算,总会得到相同的加密摘要值。从而使
得同一块数据总是被保存在相同的节点上。
[0046] 当节点新增和删除的时候,节点加密摘要值数组被重新计算。由于节点加密摘要值不会发生变化(节点容量不变,加密摘要值不变),因此节点加密摘要值在数组中的相对
位置基本稳定,仍然是按照大小顺序排列。这使得节点相对位置变化很小,需要数据的移动
也很少。节点发生变化后,所需移动的数据量大约为:数据移动量=(当前的数据总量*发生
变化的节点容量)/总容量。
[0047] 通过使用加密摘要算法,可以为每个单位容量的存储空间生成对应的节点加密摘要值,进而按照节点加密摘要值的大小均匀排布形成分布式存储系统的数组。在该数组中,
各个存储节点的单位容量的存储空间均匀排布,可以使得数据存储更加均衡。
[0048] 在本发明实施例中,将待存储数据块存储至第一存储节点之后,还包括:
[0049] 获取存储节点:将数据加密摘要值与分布式存储系统存储节点数组中的第一节点加密摘要值之后的节点加密摘要值依次进行比较,直至找到下一个大于数据加密摘要值的
第二节点加密摘要值;其中,第二节点加密摘要值对应的存储节点的编号与第一节点加密
摘要值对应的存储节点的编号不同;将待存储数据块存储至第二存储节点;重复执行获取
存储节点步骤,直至待存储数据块的存储次数达到预定存储次数。
[0050] 具体的,找到下一个大于数据加密摘要值的第二节点加密摘要值包括:
[0051] 提取第二节点加密摘要值对应的第二存储节点的编号;判断第二存储节点的编号与第一存储节点的编号是否相同:响应于第二存储节点的编号与第一存储节点的编号不
同,将待存储数据块存储至第二存储节点中;响应于第二存储节点的编号与第一存储节点
的编号相同,继续在分布式存储系统存储节点数组中寻找下一个第二节点加密摘要值,直
至第二存储节点的编号与第一存储节点的编号不同,将待存储数据块存储至第二存储节点
中。
[0052] 通过设计预定存储次数,可以在分布式存储系统中为待存储数据块建立多个副本,以防止该数据块单独存放在某个存储节点上时存储节点崩溃导致数据丢失的问题。
[0053] 由于组成分布式系统的节点数量可能会很多,因此,单个节点故障的可能性也较大。当节点出现故障的时候,必须要保证用户数据仍然可用。本实施例通过对数据保存多个
副本来实现单个节点的容错。
[0054] 在DHT中,每个节点都有多个加密摘要值。不同节点的加密摘要值互相交叉被装入DHT。用户可以预先设置一个副本数量,用于在多个节点上保存多分数据拷贝,以达到数据
冗余,保护数据的作用。
[0055] 假设用户设置了副本数量为2,那么DHT在处理新的数据写入时,按以下步骤执行:
[0056] 1.对数据块进行哈希计算,得到数据加密摘要值DH1,DH2……,DHn;
[0057] 2.数据加密摘要值在前文所述的数组中进行比较查询,直到找到下一个比数据加密摘要值更大的节点加密摘要值。此时,该节点加密摘要值所代表的节点,就是数据块的第
一份拷贝应该被保存的节点,称之为“节点A”;
[0058] 3.数据块被发送给节点A保存,作为数据块的第一份拷贝;
[0059] 4.系统继续用数据加密摘要值在数组中向后遍历并和比较数组中的节点加密摘要值,直到找到下一个大于数据加密摘要值,且非“节点A”的节点摘要。该摘要值所代表的
节点,就是第二份数据拷贝应该去往的节点,称之为“节点B”;
[0060] 5.数据块被发送给节点B保存,作为数据块的第二份拷贝。
[0061] 通过这个过程,本方案支持多个数据拷贝。多数据副本的特点是:
[0062] 1.数据拷贝的份数不能大于节点数量;
[0063] 2.系统中可以允许同时故障的节点个数=数据副本数‑1;
[0064] 3.单个节点最多只能包含同一数据的一份拷贝。
[0065] 另外,在本实施例中,当第二存储节点的编号与第一存储节点的编号不同时,还包括:
[0066] 判断第二存储节点的编号对应的存储域编号与第一存储节点的编号对应的存储域编号是否相同;当第二存储节点的编号对应的存储域编号与第一存储节点的编号对应的
存储域编号不同时,将待存储数据块存储至第二存储节点中;当第二存储节点的编号对应
的存储域编号与第一存储节点的编号对应的存储域编号相同时,继续寻找下一个第二存储
节点,直至找到的第二存储节点的编号对应的存储域编号与第一存储节点的编号对应的存
储域编号不同时,将待存储数据块存储至第二存储节点中。
[0067] 在分布式存储系统中还可以建立不同的存储域,每个存储域可包含多个存储节点,这样做的好处是,可以把整个存储域看作为一个存储节点,在系统中允许整个存储域中
进行删除或暂停,不会影响整个分布式存储系统的运行,保证数据存储安全。
[0068] 除了单个的节点可以作为容错的单位,本实施例还支持将节点定义在不同的故障域,实现按故障域进行容灾。被定义在同一个故障域中的多个节点可以一起故障,而不会导
致用户数据丢失。
[0069] 在定义了故障域的系统中,DHT将故障域看成一个单独的节点。当有新的数据写入时,系统按如下顺序执行:
[0070] 1.对数据块进行哈希计算,得到数据加密摘要值DH1,DH2……,DHn;
[0071] 2.数据加密摘要值在前文所述的数组中进行比较查询,直到找到下一个比数据加密摘要值更大的节点加密摘要值。此时,该节点加密摘要值所代表的节点,就是数据块的第
一份拷贝应该被保存的节点,称之为“节点A”;
[0072] 3.数据块被发送给节点A保存,作为数据块的第一份拷贝;
[0073] 4.系统继续用数据加密摘要值在数组中向后遍历并和比较数组中的节点加密摘要值,直到找到下一个大于数据加密摘要值,且非“节点A”所在的故障域的节点摘要。该摘
要值所代表的节点,就是第二份数据拷贝应该去往的节点,称之为“节点B”;
[0074] 5.数据块被发送给节点B保存,作为数据块的第二份拷贝;
[0075] 6.如果用户定义的数据副本数量大于故障域的数量,那么将剩余数据在故障域间平均分布,单个故障域中可以允许同一份数据的多个拷贝。
[0076] 通过这个过程,本实施例支持将多个数据副本分配给不同的故障域。定义了故障域的多数据副本的特点是:
[0077] 1.数据副本的份数不能大于节点数量;
[0078] 2.系统中可以允许同时故障的跨故障域的节点个数=数据副本数‑1;
[0079] 3.系统允许同时故障的故障域的个数=数据副本数‑1;
[0080] 4.同一故障域中允许包含同一数据的多份副本。
[0081] 本发明实施例通过按内容寻址的方式,通过数据摘要值来决定数据所在存储节点。从而将元数据管理彻底抛弃,大大简化系统的复杂度,同时避免了特权存储节点的存
在。在节点数发生变化时,针对同样的数据,稳定哈希算法每次计算的结果都大致相同。这
样可以保证数据所在的节点长时间保持稳定,避免数据的大规模移动。