数据存储方法、数据库存储节点故障处理方法及装置转让专利

申请号 : CN201380000058.X

文献号 : CN104054076B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 智伟周帅锋殷晖杨磊

申请人 : 华为技术有限公司

摘要 :

本发明实施例提供了一种数据存储方法,所述方法包括:将数据库中的一个表的一个分区部署在数据库中的第一存储节点;将所述分区的数据文件划分为N个数据块,所述N个数据块位于所述第一存储节点;将所述N个数据块中全部数据块的备份数据块部署在第二存储节点上,所述第二存储节点与所述第一存储节点为不同节点。本发明实施例可以使得分布式非关系型数据库中,节点故障的情况下,能够尽量减少跨节点数据范围,以减少时延、降低网络流量。

权利要求 :

1.一种数据存储方法,其特征在于,所述方法包括:将分布式非关系型NOSQL数据库中的一个表的一个分区部署在数据库中的第一存储节点;

将所述分区的数据文件划分为N个数据块,所述N个数据块位于所述第一存储节点,其中,所述分区的数据文件由所述分区的从节点调用;

将所述N个数据块的备份数据块部署在第二存储节点上,所述第二存储节点与所述第一存储节点为不同存储节点;其中,N为自然数,并且N不小于2。

2.如权利要求1所述的方法,其特征在于,在将数据库中的一个表的一个分区部署在数据库中的第一存储节点之前,还包括:为所述数据库中所述分区分配分区标识;

根据所述分区标识为所述分区的所述N个数据块命名。

3.如权利要求1或2所述的方法,其特征在于,所述将所述N个数据块的备份数据块部署在第二存储节点上,所述第二存储节点与所述第一存储节点为不同节点具体包括:按照部署策略,在所述部署策略对应的第二存储节点上对所述分区的第一个数据块进行数据块备份;

获取所述分区的第一个数据块的备份数据块的存储节点分布信息;

备份所述分区的N-1个数据块至所述存储节点分布信息指示的节点。

4.一种数据库存储节点故障处理方法,其特征在于,所述方法包括:获取存储节点集群中故障的第一存储节点的分区信息以及分区对应的数据块的分布信息;

根据所述第一存储节点的分区信息以及所述分区对应的数据块的分布信息,在所述存储节点集群中确定备份有所述第一存储节点的所述分区对应的M个数据块的非故障第二存储节点;其中,M为自然数;

将所述第一存储节点的所述分区重新分布到所述第二存储节点。

5.如权利要求4所述的方法,其特征在于,当所述第一存储节点故障为从节点进程故障时,所述将所述第一存储节点的所述分区重新分布到所述第二存储节点之前,还包括:如果所述第二存储节点的分区负载超过负载均衡阈值,则将所述第二存储节点上的L个分区迁移至所述存储节点集群中除第二存储节点外的其它非故障存储节点;其中L为自然数。

6.如权利要求4所述的方法,其特征在于,当所述第一存储节点上故障为数据节点进程故障时,所述将所述第一存储节点的所述分区重新分布到所述第二存储节点之后还包括:将所述第二存储节点上的所述M个数据块备份到所述存储节点集群中的第三存储节点,所述第三存储节点为非故障存储节点。

7.一种数据存储装置,其特征在于,包括:

第一部署单元,用以将分布式非关系型NOSQL数据库中一个表中的一个分区部署在数据库中的第一存储节点;

划分单元,用以将所述分区的数据文件划分为N个数据块,所述N个数据块位于所述第一存储节点,其中,所述分区的数据文件由所述分区的从节点调用;

第二部署单元,用以将所述N个数据块的备份数据块部署在第二存储节点上,所述第二存储节点与所述第一存储节点为不同存储节点;其中,N为自然数,并且N不小于2。

8.如权利要求7所述的装置,其特征在于,还包括处理单元,用以在将数据库中的一个表中的一个分区部署在数据库中的第一存储节点之前,为所述数据库中所述分区分配分区标识;

根据所述分区标识为所述分区的所述N个数据块命名。

9.如权利要求7或8所述的装置,其特征在于,所述第二部署单元具体用于:按照部署策略,在所述部署策略对应的第二存储节点上对所述分区的数据文件中的第一个数据块进行数据块备份;

获取所述分区的数据文件中第一个数据块的备份数据块的存储节点分布信息;

备份所述分区的数据文件中的N-1个数据块至所述存储节点分布信息指示的存储节点。

10.一种数据库存储节点故障处理装置,其特征在于,所述装置包括:获取单元,用以获取存储节点集群中故障的第一存储节点的分区信息以及所述分区对应的数据块的分布信息;

确定单元,用以根据所述第一存储节点的分区信息以及分区对应的数据块的分布信息,在所述存储节点集群中确定备份有所述第一存储节点的分区对应的M个数据块的非故障第二存储节点;其中,M为自然数;

处理单元,用以将所述第一存储节点的所述分区重新分布到所述第二存储节点。

11.如权利要求10所述的装置,其特征在于,当所述第一存储节点故障为从节点进程故障时,所述处理单元还用以在将所述第一存储节点的所述分区重新分布到所述第二存储节点之前:如果所述第二存储节点的分区负载超过负载均衡阈值,则将所述第二存储节点上的L个分区迁移至所述存储节点集群中除第二存储节点外的其它非故障存储节点;其中L为自然数。

12.如权利要求10所述的装置,其特征在于,当所述第一存储节点上故障为数据节点进程故障时,所述处理单元还用以在将所述第一存储节点的所述分区重新分布到所述第二存储节点之后:将所述第二存储节点上的所述M个数据块备份到所述存储节点集群中的第三存储节点,所述第三存储节点为非故障存储节点。

13.一种数据存储装置,其特征在于,所述装置包括:网络接口;

中央处理器;

存储器;

物理存储在所述存储器中的应用程序,所述中央处理器执行所述应用程序,使得所述数据存储装置执行以下步骤:将分布式非关系型NOSQL数据库中的一个表的一个分区部署在数据库中的第一存储节点;

将所述分区的数据文件划分为N个数据块,所述N个数据块位于所述第一存储节点,其中,所述分区的数据文件由所述分区的从节点调用;

将所述N个数据块的备份数据块部署在第二存储节点上,所述第二存储节点与所述第一存储节点为不同存储节点;其中,N为自然数,并且N不小于2。

14.如权利要求13所述的装置,其特征在于,在将数据库中的一个表中的一个分区部署在数据库中的第一存储节点之前,还包括:为所述数据库中所述分区分配分区标识;

根据所述分区标识为所述分区的所述N个数据块命名。

15.如权利要求13或14所述的装置,其特征于,所述将所述N个数据块的备份数据块部署在第二存储节点上,所述第二存储节点与所述第一存储节点为不同节点具体包括:按照部署策略,在所述部署策略对应的第二存储节点上对所述分区的数据文件中的第一个数据块进行数据块备份;

获取所述分区的数据文件中第一个数据块的备份数据块的存储节点分布信息;

备份所述分区的数据文件中的N-1个数据块至所述存储节点分布信息指示的存储节点。

16.一种数据库存储节点故障处理装置,其特征在于,所述装置包括:网络接口;

中央处理器;

存储器;

物理存储在所述存储器中的应用程序,所述中央处理器执行所述应用程序,使得所述数据库存储节点故障处理装置执行以下步骤:获取存储节点集群中故障的第一存储节点的分区信息以及分区对应的数据块的分布信息;

根据所述第一存储节点的分区信息以及所述分区对应的数据块的分布信息,在所述存储节点集群中确定备份有所述第一存储节点的所述分区对应的M个数据块的非故障第二存储节点;其中,M为自然数;

将所述第一存储节点的所述分区重新分布到所述第二存储节点。

17.如权利要求16所述的装置,其特征在于,当所述第一存储节点故障为从节点进程故障时,所述将所述第一存储节点的所述分区重新分布到所述第二存储节点之前,还包括:如果所述第二存储节点的分区负载超过负载均衡阈值,则将所述第二存储节点上的L个分区迁移至所述存储节点集群中除第二存储节点外的其它非故障存储节点;其中L为自然数。

18.如权利要求16所述的装置,其特征在于,当所述第一存储节点上故障为数据节点进程故障时,所述将所述第一存储节点的所述分区重新分布到所述第二存储节点之后还包括:将所述第二存储节点上的所述M个数据块备份到所述存储节点集群中的第三存储节点,所述第三存储节点为非故障存储节点。

说明书 :

数据存储方法、数据库存储节点故障处理方法及装置

技术领域

[0001] 本发明涉及互联网领域,具体涉及到一种数据存储方法,数据库存储节点故障处理方法及装置。

背景技术

[0002] 分布式非关系型数据库(Not only Structured Query Language,NOSQL)物理上一般由大规模的集群组成。大多数物理存储节点不仅部署分布式文件系统(Distributed file system,DFS)的数据节点(DataNode)进程,还部署NOSQL数据库的从(slave)进程,同时存储节点集群需要部署独立的调度节点(Namenode)。NOSQL和DFS的信息分布各自按照各自策略进行独立分配,图1是一个分布式非关系型数据库的部署图,其中粗的实线方框代表一个存储节点,粗横线上方表示该存储节点部署NOSQL数据库的从节点进程。粗横线下方表示该存储节点部署的数据节点(DataNode)进程。其中每一个从节点进程同时也是一个DFS文件系统的客户,调用DFS文件系统中存储的数据文件。
[0003] 其中,分区region-1为NOSQL数据库中一个表的一个分区,其部署在存储节点S1上。在region-1创建后,完成数据写入操作,形成数据文件,该数据文件在DFS上的被划为4个数据块(Block),分别是R1-b1、R1-b2、R1-b3、R1-b4。每一个Block的数据块副本分布如图1所示。所有涉及到region-1的数据查询操作全部由存储节点S1的从节点进程来完成,而在存储节点S1上存储了region-1的对应的数据文件的所有数据块,为表述方面,下面简称为与region-1对应的所有数据块,所以存储节点S1只需要读取本地硬盘数据即可完成数据查询操作,不会涉及到通过网络读取其他存储节点上数据块副本来完成操作。
[0004] 但是,在NOSQL数据库的从节点进程故障时,如图1A所示,NOSQL数据库的主控节点发现从节点进程异常之后,按照负载均衡原则将存储节点S1负责的分区全部分配给存储节点集群中的存储节点S4。在存储节点S1故障后,存储节点S4将负责region-1的全部数据查询操作。由于DFS并不会感觉到这样的故障,所以与region-1对应的数据文件位置将不会发生任何变化。在这样的数据分布下,涉及到region-1的R1-b1、R1-b3两个数据块中的数据读取时,存储节点S4将需要通过网络去其他存储R1-b1、R1-b3数据块副本的存储节点上读取数据。
[0005] 如图1B所示,在存储节点S1上分布式DFS的数据节点(DataNode)进程故障时,DFS的调度节点发现数据节点进程故障后,按照预先配置的数据块副本复制机制,将存储节点S1原来存储的数据块副本通过其他非故障存储节点上的数据块副本恢复出来,并按照负载均衡策略放置在其他非故障存储节点上。但是,由于存储节点S1上NOSQL数据库的从节点进程依旧正常,NOSQL数据库的分区不会重新分布。如存储节点S1依旧负责region-1全部数据查询操作。而DFS的存储节点S1上的数据节点进程故障,导致存储节点S1无法提供文件读取服务。在这样的数据分布下,涉及到region-1的数据读取时,存储节点S1需要通过网络去其他存储该分区region-1对应的数据块副本的存储节点上读取数据。
[0006] 如图1C所示,存储节点S1由于硬件或者是网络等原因导致整个存储节点故障。DFS的调度节点发现数据节点进程异常后,同时调度节点按照既定的数据块副本复制机制,开始数据块副本恢复,类似图1B中的状态。同时,NOSQL数据库的主控节点也会发现该存储节点的从节点进程故障,主控节点将根据系统的负载情况将存储节点S1上的分区重新分布,与图1A类似。数据库再一次达到稳定数据分布时,存储节点S4负责region-1全部数据查询操作。由于DFS的存储S1节点故障后重新分布数据块副本后,存储节点S4上只有region-1的R1-b2、R1-b4副本。涉及到region-1的R1-b1、R1-b3中的数据读取时,存储节点S4需要通过网络去其他存储该R1-b1、R1-b3的数据块副本的存储节点上读取数据。
[0007] 综上所述,在现有技术的数据存储方式下,发生以上几种故障时,就会出现跨节点数据访问甚至是跨机架的访问数据,这样不仅增大了数据访问时延,还会增加网络流量。

发明内容

[0008] 本发明的目的是提供一种数据存储方法,以解决现有技术在节点故障时,出现跨节点访问,增加访问数据时延的问题。
[0009] 第一方面,本发明实施例提供了一种数据存储方法,所述方法包括:
[0010] 将数据库中的一个表的一个分区部署在数据库中的第一存储节点;
[0011] 将所述分区的数据文件划分为N个数据块,所述N个数据块位于所述第一存储节点;
[0012] 将所述N个数据块的备份数据块部署在第二存储节点上,所述第二存储节点与所述第一存储节点为不同存储节点;其中,N为自然数,并且N不小于2。
[0013] 基于第一方面,在第一种可能的实施方式中,在所述将数据库中的一个表中的一个分区部署在数据库中的第一存储节点之前,还包括:
[0014] 为所述数据库中所述分区分配分区标识;
[0015] 根据所述分区标识为所述分区的所述N个数据块命名。
[0016] 基于第一方面或第一方面的第一种可能的实施方式中,还提供了第二种可能的实施方式,所述将所述N个数据块中全部数据块的备份数据块部署在第二存储节点上,所述第二存储节点与所述第一存储节点为不同存储节点,具体包括:
[0017] 按照部署策略,在所述部署策略对应的第二存储节点上对所述分区中的第一个数据块进行数据块备份;
[0018] 获取所述分区的数据文件中第一个数据块的备份数据块的存储节点分布信息;
[0019] 备份所述分区的数据文件中的N-1个数据块至所述存储节点分布信息指示的存储节点。
[0020] 第二方面,本发明实施例提供了一种数据库存储节点故障处理方法,所述方法包括:
[0021] 获取存储节点集群中故障的第一存储节点的分区信息以及所述分区对应的数据块的分布信息;
[0022] 根据所述第一存储节点的分区信息以及所述分区对应的数据块的分布信息,在所述存储节点集群中确定备份有所述第一存储节点的所述分区对应的M个数据块的备份数据块的非故障第二存储节点;其中,M为自然数;
[0023] 将所述第一存储节点的所述分区重新分布到所述第二存储节点。
[0024] 基于第二方面,在第一种可能的实施方式中,当所述第一存储节点故障为的从节点进程故障时,所述将所述第一存储节点的所述分区重新分布到所述第二存储节点之前,还包括:
[0025] 如果所述第二存储节点的分区负载超过负载均衡阈值,则将所述第二存储节点上的L个分区迁移至所述存储节点集群中除第二存储节点外的其它非故障存储节点;其中L为自然数。
[0026] 基于第二方面或第二方面的第一种可能的实施方式中,还提供了第二种可能的实施方式,当所述第一存储节点上故障为数据节点进程故障时,所述将所述第一存储节点的所述分区重新分布到所述第二存储节点之后还包括:
[0027] 将所述第二存储节点上的所述M个数据块的备份数据块备份到所述存储节点集群中的第三存储节点,所述第三存储节点为非故障存储节点。
[0028] 第三方面,本发明实施例提供了一种数据存储装置,所述装置包括:
[0029] 第一部署单元,用以将数据库中的一个表的一个分区部署在数据库中的第一存储节点;
[0030] 划分单元,用以将所述分区的数据文件划分为N个数据块,所述N个数据块位于所述第一存储节点;
[0031] 第二部署单元,用以将所述N个数据块的备份数据块部署在第二存储节点上,所述第二存储节点与所述第一存储节点为不同存储节点;其中,N为自然数,并且N不小于2。
[0032] 基于第三方面,在第一种可能的实施方式中,还包括处理单元,用以在所述将数据库中的一个表中的一个分区部署在数据库中的第一存储节点之前:
[0033] 为所述数据库中所述分区分配分区标识;
[0034] 根据所述分区标识为所述分区的所述N个数据块命名。
[0035] 基于第三方面,在第二种可能的实施方式中,所述将第二部署单元具体用于:
[0036] 按照部署策略,在所述部署策略对应的第二存储节点上对所述分区中的第一个数据块进行数据块备份;
[0037] 获取所述分区的数据文件中第一个数据块的备份数据块的存储节点分布信息;
[0038] 备份所述分区的数据文件中的N-1个数据块至所述存储节点分布信息指示的存储节点。
[0039] 第四方面,本发明实施例提供了一种数据库存储节点故障处理装置,所述装置包括:
[0040] 获取单元,用以获取存储节点集群中故障的第一存储节点的分区信息以及所述分区对应的数据块的分布信息;
[0041] 确定单元,用以根据所述第一存储节点的分区信息以及所述分区对应的数据块的分布信息,在所述存储节点集群中确定部署有所述第一存储节点的所述分区对应的多个数据块的备份数据块的非故障第二存储节点;
[0042] 处理单元,用以将所述第一存储节点的所述分区重新分布到所述第二存储节点。
[0043] 基于第四方面,在第一种可能的实施方式中,所述第一存储节点的从节点进程故障,所述处理单元还用以:
[0044] 如果所述第二存储节点的分区负载超过负载均衡阈值,则将所述第二存储节点上的L个分区迁移至所述存储节点集群中除第二存储节点外的其它非故障存储节点;其中L为自然数。
[0045] 基于第四方面或第四方面的第一种可能的实施方式中,还提供了第二种可能的实施方式,所述第一存储节点上的数据节点进程故障,所述处理单元还用以:
[0046] 将所述第二存储节点上的所述M个数据块备份到所述存储节点集群中的第三存储节点,所述第三存储节点为非故障存储节点。
[0047] 第五方面,本发明实施例提供了一种数据存储装置,所述装置包括:
[0048] 网络接口;
[0049] 中央处理器;
[0050] 存储器;
[0051] 物理存储在所述存储器中的应用程序,所述中央处理器执行所述应用程序,使得所述数据存储装置执行以下步骤::
[0052] 将数据库中的一个表的一个分区部署在数据库中的第一存储节点;
[0053] 将所述分区的数据文件划分为N个数据块,所述N个数据块位于所述第一存储节点;
[0054] 将所述N个数据块的备份数据块部署在第二存储节点上,所述第二存储节点与所述第一存储节点为不同存储节点;其中,N为自然数,并且N不小于2。
[0055] 基于第五方面,在第一种可能的实施方式中,在所述将数据库中的一个表中的一个分区部署在数据库中的第一存储节点之前,还包括:
[0056] 为所述数据库中所述分区分配分区标识;
[0057] 根据所述分区标识为所述分区的所述N个数据块命名。
[0058] 基于第五方面,在第二种可能的实施方式中,所述将所述N个数据块的备份数据块部署在第二存储节点上,所述第二存储节点与所述第一存储节点为不同存储节点具体包括:
[0059] 按照部署策略,在所述部署策略对应的第二存储节点上对所述分区中的第一个数据块进行数据块备份;
[0060] 获取所述分区的数据文件中第一个数据块的备份数据块的存储节点分布信息;
[0061] 备份所述分区的数据文件中的N-1个数据块至所述存储节点分布信息指示的存储节点。
[0062] 第六方面,本发明实施例提供了一种数据库存储节点故障处理装置,所述装置包括:
[0063] 网络接口;
[0064] 中央处理器;
[0065] 存储器;
[0066] 物理存储在所述存储器中的应用程序,所述中央处理器执行所述应用程序,使得所述数据库存储节点故障处理装置执行以下步骤:
[0067] 获取存储节点集群中故障的第一存储节点的分区信息以及所述分区对应的数据块的分布信息;
[0068] 根据所述第一存储节点的分区信息以及所述分区对应的数据块的分布信息,在所述存储节点集群中确定备份有所述第一存储节点的所述分区对应的M个数据块的备份数据块的非故障第二存储节点;其中,M为自然数;
[0069] 将所述第一存储节点的所述分区重新分布到所述第二存储节点。
[0070] 基于第六方面,在第一种可能的实施方式中,当所述第一存储节点故障为的从节点进程故障时,所述将所述第一存储节点的所述分区重新分布到所述第二存储节点之前,还包括:
[0071] 如果所述第二存储节点的分区负载超过负载均衡阈值,则将所述第二存储节点上的L个分区迁移至所述存储节点集群中除第二存储节点外的其它非故障存储节点;其中L为自然数。
[0072] 基于第六方面,在第二种可能的实施方式中,当所述第一存储节点上故障为数据节点进程故障时,所述将所述第一存储节点的所述分区重新分布到所述第二存储节点之后还包括:
[0073] 将所述第二存储节点上的所述M个数据块备份到所述存储节点集群中的第三存储节点,所述第三存储节点为非故障存储节点。
[0074] 第七方面,本发明实施例提供了一种非易失性计算机可读存储介质,当计算机执行所述计算机可读存储介质时,所述计算机执行如下步骤:
[0075] 将数据库中的一个表的一个分区部署在数据库中的第一存储节点;
[0076] 将所述分区的数据文件划分为N个数据块,所述N个数据块位于所述第一存储节点;
[0077] 将所述N个数据块的备份数据块部署在第二存储节点上,所述第二存储节点与所述第一存储节点为不同存储节点;其中,N为自然数,并且N不小于2。
[0078] 基于第七方面,在第一种可能的实施方式中,在所述将数据库中的一个表中的一个分区部署在数据库中的第一存储节点之前,还包括:
[0079] 为所述数据库中所述分区分配分区标识;
[0080] 根据所述分区标识为所述分区的所述N个数据块命名。
[0081] 基于第七方面,在第二种可能的实施方式中,所述将所述N个数据块的备份数据块部署在第二存储节点上,所述第二存储节点与所述第一存储节点为不同存储节点具体包括:
[0082] 按照部署策略,在所述部署策略对应的第二存储节点上对所述分区中的第一个数据块进行数据块备份;
[0083] 获取所述分区的数据文件中第一个数据块的备份数据块的存储节点分布信息;
[0084] 备份所述分区的数据文件的N-1个数据块至所述存储节点分布信息指示的存储节点。
[0085] 第八方面,本发明实施例提供了一种非易失性计算机可读存储介质,当计算机执行所述计算机可读存储介质时,所述计算机执行如下步骤:
[0086] 获取存储节点集群中故障的第一存储节点的分区信息以及所述分区对应的数据块的分布信息;
[0087] 根据所述第一存储节点的分区信息以及所述分区对应的数据块的分布信息,在所述存储节点集群中确定备份有所述第一存储节点的所述分区对应的M个数据块的非故障第二存储节点;其中,M为自然数;
[0088] 将所述第一存储节点的所述分区重新分布到所述第二存储节点。
[0089] 基于第八方面,在第一种可能的实施方式中,当所述第一存储节点故障为的从节点进程故障时,所述将所述第一存储节点的所述分区重新分布到所述第二存储节点之前,还包括:
[0090] 如果所述第二存储节点的分区负载超过负载均衡阈值,则将所述第二存储节点上的L个分区迁移至所述存储节点集群中除第二存储节点外的其它非故障存储节点;其中L为自然数。
[0091] 基于第八方面,在第二种可能的实施方式中,当所述第一存储节点上故障为数据节点进程故障时,所述将所述第一存储节点的所述分区重新分布到所述第二存储节点之后还包括:
[0092] 将所述第二存储节点上的所述M个数据块备份到所述存储节点集群中的第三存储节点,所述第三存储节点为非故障存储节点。
[0093] 通过本发明实施例提供的数据存储方法,将数据库中的一个表中的一个分区部署在数据库中的第一存储节点,之后将所述分区的数据文件划分为N个数据块,所述N个数据块位于所述第一存储节点;最后将所述多个数据块中全部数据块的备份数据块部署在相同的第二存储节点上,所述第二存储节点与所述第一存储节点为不同存储节点。使得分布式非关系型数据库中,数据节点故障的情况下,能够尽量减少跨节点数据范围,以减少时延、降低网络流量。

附图说明

[0094] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0095] 图1是现有技术的NOSQL数据分布示意图;
[0096] 图1A是现有技术NOSQL数据库从节点进程故障处理示意图;
[0097] 图1B是现有技术NOSQL数据库数据节点进程故障处理示意图;
[0098] 图1C是现有技术NOSQL数据库存储节点集群中的节点故障处理示意图;
[0099] 图2是本发明实施例提供的数据存储方法的应用场景示意图;
[0100] 图3是本发明实施例提供的数据存储方法一种实施方式的流程图;
[0101] 图4是本发明实施例提供的数据存储方法的存储状态示意图;
[0102] 图5是本发明实施例提供的数据库存储节点故障处理方法的流程图;
[0103] 图6是本发明实施例提供的数据库存储节点故障处理方法一种故障处理示意图;
[0104] 图7是本发明实施例提供的数据库存储节点故障处理方法一种故障处理示意图;
[0105] 图8是本发明实施例提供的数据库存储节点故障处理方法一种故障处理示意图;
[0106] 图9是本发明实施例提供的数据存储装置一实施例的结构示意图;
[0107] 图10是本发明实施例提供的数据库存储节点处理装置一种实施例的结构示意图;
[0108] 图11是本发明实施例提供的数据存储装置一实施例的结构示意图;
[0109] 图12是本发明实施例提供的数据库存储节点处理装置一种实施例的结构示意图。

具体实施方式

[0110] 以下结合附图,对本发明实施例做进一步详细叙述。
[0111] 图2是本发明实施例提供的数据存储方法和数据库存储节点故障处理方法的应用场景示意图,NOSQL数据库只完成数据的逻辑管理,而实际上数据存储在分布式文件系统DFS。DFS也是一个主从分布式架构,在NOSQL数据库中的主控节点作为DFS内部提供元数据服务的调度节点。NOSQL数据库中的从节点,作为DFS提供文件存储以及文件操作的数据节点,统一称为存储节点。也就是说,在本发明实施例提供的数据库中同时部署了两种系统,一种是NOSQL数据库,一种是DFS,在数据库的各个存储节点上,同时部署了DFS的数据节点(datanode)进程和NOSQL数据库中的从节点(slave)进程,在NOSQL数据库中控制从节点(slave)进程为主控(master)进程,在DFS中控制数据节点进程的进程为调度(namenode)进程,主控(master)进程和调度(namenode)进程共同布置的存储节点为NOSQL数据库的主控节点,也是DFS的调度节点。
[0112] 为方便系统内部管理,存储在DFS中的数据文件一般被分割为一定大小的数据块(block)。为防止由于硬件故障导致丢失数据,一个数据块一般会被存储在多个存储节点。调度节点不仅负责管理文件系统名称空间和控制外部客户端的访问,同时决定将数据块映射到存储节点集群中的哪个存储节点上。对于最常见的3个数据块副本备份机制来说,第一个数据块一般选择离发起写请求的客户端最近一个节点作为存储节点,第二个数据块所在的存储节点与存储第一个数据块的存储节点在同一机架上,第三个数据块所在的存储节点与第一数据块和第二数据块所在的存储节点属于不同的机架。
[0113] 在进行数据块读取时,实际的数据块读取并不经过调度节点,只有表示存储节点和数据块之间映射关系的元数据经过调度节点。存储节点响应来自DFS客户端的读写请求。存储节点还响应来自调度节点的创建、删除和复制数据块的命令。
[0114] 如图3所示,本发明实施例提供一种应用在上述场景中的数据存储方法,所述方法包括:
[0115] 301,将数据库中的一个表的一个分区部署在数据库中的第一存储节点;
[0116] 具体而言,NOSQL数据库在创建分区时,一般是给这个分区一个分区标识,该分区标识就是底层DFS创建数据文件的文件名。如图4所示的应用实例中,分区region-1,部署在由存储节点S1、存储节点S2、存储节点S3、存储节点S4、存储节点S5和存储节点S6等组成的存储节点集群中的一个存储节点中,图4所示的实施例中,将region-1对应的分区部署在存储节点S1。
[0117] 概括而言,首先为数据库中的所述分区分配分区标识;
[0118] 之在创建分区对应的数据文件的数据块时,根据所述分区标识为所述分区的N个数据块命名。
[0119] 302,将所述分区对应的数据文件划分为N个数据块,所述N个数据块位于所述第一存储节点;
[0120] 具体而言,region-1为NOSQL数据库中表的一个分区,其部署在存储节点S1上。region-1分区创建,完成数据写入操作,形成数据文件,该数据文件在DFS上的被划为4个数据块,分别是R1-b1、R1-b2、R1-b3、R1-b4,这四个数据块都被部署在存储节点S1上。
[0121] 上述实施例中,N为自然数,并且N不小于2,也就是说组成存储节点集群的存储节点数目,以及一个分区对应的数据文件被划分成的数据块个数都是根据实际需求设定的,不应理解为对本发明技术方案的限制。
[0122] 303,将所述N个数据块的备份数据块部署在第二存储节点上,所述第二存储节点与所述第一存储节点为不同存储节点。
[0123] 具体而言,为了满足数据安全,通常需要为分区的数据文件对应的每个数据块设置多份备份数据块,也可以称之为副本。例如图4所示的为两份副本,一份部署在存储节点S3,一份部署在存储节点S5,存储节点S5和存储节点S3都为第二存储节点。分别将同一分区的数据文件对应的数据块的一份副本放置在同一存储节点,这样一个存储节点上从节点进程出现故障,只要将该从节点进程所负责的分区重新在备份该分区对应的数据块的其他非故障的存储节点上打开即可,这样就避免了跨节点访问数据。
[0124] 更具体的说,步骤303进一步包括:
[0125] 按照部署策略,在所述部署策略对应的第二存储节点上对所述分区的数据文件中的第一个数据块进行数据块备份;
[0126] 获取所述分区的数据文件中第一个数据块的备份数据块的存储节点分布信息;
[0127] 备份所述分区的N-1个数据块至所述存储节点分布信息指示的存储节点。
[0128] 以图4所示的架构为例,在对数据块R1-b1副本部署时,发现数据块R1-b1为Region-1对应的数据文件的第一个数据块,则根据DFS默认部署策略对R1-b1的副本进行部署,
[0129] 对数据块R1-b2进行副本部署时,获取数据块R1-b1的数据存储节点分布信息,得知数据块R1-b1的副本分布在数据存储节点S3和数据存储节点S5。
[0130] 之后,对数据块R1-b2按照数据块R1-b1的副本数据存储节点分布情况,进行分布。
[0131] 同理,数据块R1-b3和数据块R1-b4的分布过程与数据块R1-b2相同不多赘述。
[0132] 相应的,本发明实施例提供了一种数据库存储节点故障处理方法,可以应用在图2所示的数据库系统的几种故障状况下。如图5所示,所述方法包括:
[0133] 501,获取存储节点集群中故障的第一存储节点的分区信息以及所述分区对应的数据块的分布信息;
[0134] 具体而言,在存储节点集群中的一个存储节点发生故障时,首先要获取存储节点集群中故障存储节点的分区分布信息,例如在第一存储节点上部署了哪些分区,这些分区对应的数据块的备份数据块的分布信息,以获知在非故障存储节点上哪个存储节点上部署了故障存储节点上的分区对应的数据块备份。502,根据所述第一存储节点的分区信息以及所述分区对应的数据块的分布信息,在所述存储节点集群中确定备份有所述第一存储节点的所述分区对应的M个数据块的备份数据块的非故障第二存储节点,其中,M为自然数。
[0135] 503,将所述第一存储节点的分区重新分布到所述第二存储节点。
[0136] 具体而言,在所述存储节点集群中的非故障存储节点中确定了部署有所述第一存储节点的所述分区对应的M个数据块的备份数据块的第二存储节点之后,将第一存储节点的所述分区重新分布到第二存储节点上。这样,同一分区的数据文件的数据块的备份数据块放置在同一存储节点,这样只要一个存储节点出现故障,只要将该存储节点上的所述分区分布到所述第二存储节点,重新在第二存储节点上打开即可。这样就避免了跨节点访问数据。
[0137] 如图6所示,在一种可能的实施方式中,假设存储节点S1上的NOSQL数据库的从节点进程异常终止,NOSQL数据库的主控节点很快就会发现该进程异常。
[0138] 主控节点根据非故障存储节点的分区分布信息以及故障存储节点分区对应的数据块的备份数据块分布情况,将故障存储节点存储的的L个分区分布到有对应数据块的非故障存储节点上,其中L为自然数。
[0139] 在故障存储节点分区重新分布之前,如果非故障的第二存储节点的分区未达到负载均衡阈值,则将所述第一存储节点的分区重新分布在所述第二存储节点,整个存储节点集群的分区重分布完成;如果所述第二存储节点的分区超过负载均衡阈值,说明所述第二存储节点分区数过多,此时在所述第二存储节点上随机选取多个分区,将这些分区进行重分布,使得所述第二存储节点上分区达到负载均衡。也就是说,如果所述第二存储节点的分区负载超过负载均衡阈值,则将所述第二存储节点上的多个分区重分布至所述存储节点集群中除第二存储节点外的其它非故障存储节点。
[0140] 如图7所示,在另一种可能的实施方式中,假设存储节点S1上DFS的数据节点进程异常终止,DFS的调度节点发现该进程异常。调度节点按照数据块副本复制机制将原来存储节点S1负责的全部数据块分配给存储节点集群中其他存储节点。只有数据节点进程故障而从节点进程依旧可以正常工作的情况,是否需要重分布从节点进程负责的分区到对应的存储有该分区对应的数据块的副本的非故障存储节点上,根据配置进行操作。
[0141] 调度节点根据故障存储节点S1上的数据块归属情况,将属于同一分区的对应的数据块作为一个数据块组进行标识。
[0142] 调度节点根据非故障存储节点的数据块分布信息,将故障存储节点的同一分区的数据块组重分布在非故障存储节点S2上,也就是将第一存储节点负责的同一分区的全部数据块重分布在所述存储节点集群中的非故障存储节点。
[0143] 调度节点检查配置,如果对数据读取速率要求较低,则不需要将故障存储节点的分区进行重分布,则重分布完成。
[0144] 如果根据读取速率需求,用户发现需要将故障存储节点的分区进行重分布,则调度节点将故障存储节点报告给主控节点,主控节点发现该存储节点从节点进程未失效,则查找故障存储节点上分区信息。主控节点根据非故障存储节点的分区分布信息以及故障存储节点上分区中数据块分布情况,将故障存储节点的同一分区的M个数据块的备份数据块重分布到非故障存储节点上。
[0145] 如图8所示,在另一种可能的实施方式中,假设存储节点S1由于硬件或者是网络等原因导致故障。DFS的调度节点很快就会发现该进程异常。同时,NOSQL数据库的主控节点也会发现该存储节点S1从节点进程异常。
[0146] 主控节点将根据系统的负载情况将存储节点S1上的分区重新分布,该过程类似从节点进程故障的情况。同时调度节点按照既定的副本复制机制,开始副本恢复,该过程类似数据节点进程故障情况,不多赘述。
[0147] 如图9所示,本发明实施例提供一种数据存储装置,所述装置包括:
[0148] 第一部署单元901,用以将数据库中一个表中的一个分区部署在数据库中的第一存储节点;
[0149] 划分单元902,用以将所述分区的数据文件划分为N个数据块,所述N个数据块位于所述第一存储节点;
[0150] 第二部署单元903,用以将所述N个数据块的备份数据块部署在第二存储节点上,所述第二存储节点与所述第一存储节点为不同存储节点;其中,N为自然数,并且N不小于2。
[0151] 在一种可能的实施方式中,所述装置还包括处理单元,用以在所述将数据库中的一个表中的一个分区部署在数据库中的第一存储节点之前:
[0152] 为所述数据库中的所述分区分配分区标识;
[0153] 根据所述分区标识为所述分区的所述N个数据块命名。
[0154] 在一种可能的实施方式中,所述第二部署单元具体用于:
[0155] 按照部署策略,在所述部署策略对应的第二存储节点上对所述分区的数据文件中的第一个数据块进行数据块备份;
[0156] 获取所述分区的数据文件中第一个数据块的备份数据块的存储节点分布信息;
[0157] 备份所述分区的数据文件中的N-1个数据块至所述存储节点分布信息指示的存储节点。
[0158] 通过本发明实施例提供的数据存储装置,可以将数据库中的一个表中的一个分区部署在数据库中的第一存储节点,之后将所述分区的数据文件划分为N个数据块,所述N个数据块位于所述第一存储节点;最后将所述多个数据块中全部数据块的备份数据块部署在相同的第二存储节点上,所述第二存储节点与所述第一存储节点为不同存储节点。这样可以使得使得分布式非关系型数据库中,在数据节点故障的情况下,能够尽量减少跨节点数据范围,以减少时延、降低网络流量。
[0159] 如图10所示,本发明实施例还提供了一种数据库存储节点故障处理装置,所述装置包括:
[0160] 获取单元1001,用以获取存储节点集群中故障的第一存储节点的分区信息以及所述分区对应的数据块的分布信息;
[0161] 确定单元1002,用以根据所述第一存储节点的分区信息以及所述分区对应的数据块的分布信息,在所述存储节点集群中确定备份有所述第一存储节点的分区对应的M个数据块的非故障第二存储节点;其中,M为自然数;
[0162] 处理单元1003,用以将所述第一存储节点的所述分区重新分布到所述第二存储节点。
[0163] 当所述第一存储节点故障为的从节点进程故障时,所述处理单元1003还用以在将所述第一存储节点的所述分区重新分布到所述第二存储节点之前:
[0164] 如果所述第二存储节点的分区负载超过负载均衡阈值,则将所述第二存储节点上的L个分区迁移至所述存储节点集群中除第二存储节点外的其它非故障存储节点;其中L为自然数。
[0165] 当所述第一存储节点上故障为数据节点进程故障时,所述处理单元1003还用以在将所述第一存储节点的所述分区重新分布在所述第二存储节点之后:
[0166] 将所述第二存储节点上的所述M个数据块备份到所述存储节点集群中的第三存储节点,所述第三存储节点为非故障存储节点。
[0167] 通过本发明实施例提供的数据库存储节点故障处理装置,能够获取存储节点集群中故障的某一存储节点的分区信息以及所述分区对应的数据块的分布信息;之后,根据所述该存储节点的分区信息以及所述分区对应的数据块的分布信息,在所述存储节点集群中确定备份有所述第一存储节点的所述分区对应的数据块的非故障第二存储节点,之后将所述该存储节点的所述分区重新分布到所述第二存储节点。这样,在数据节点故障的情况下,处理存储节点故障时,能够尽量减少跨节点数据范围,以减少时延、降低网络流量。
[0168] 如图11所示,本发明实施例还提供了一种数据存储装置,本实施例包括网络接口11、处理器12和存储器13。系统总线14用于连接网络接口11、处理器12和存储器13。
[0169] 网络接口11用于与网络和存储节点集群中的其他存储节点通信。
[0170] 存储器13具有软件模块和设备驱动程序。软件模块能够执行本发明上述方法的各种功能模块;设备驱动程序可以是网络和接口驱动程序。
[0171] 在启动时,这些软件组件被加载到存储器13中,然后被处理器12访问并执行如下指令:
[0172] 将数据库中的一个表的一个分区部署在数据库中的第一存储节点;
[0173] 将所述分区的数据文件划分为N个数据块,所述N个数据块位于所述第一存储节点;
[0174] 将所述N个数据块的备份数据块部署在第二存储节点上,所述第二存储节点与所述第一存储节点为不同存储节点;其中,N为自然数,并且N不小于2。
[0175] 进一步地,在所述将数据库中的一个表中的一个分区部署在数据库中的第一存储节点之前,还包括:
[0176] 为所述数据库中所述分区分配分区标识;
[0177] 根据所述分区标识为所述分区的所述N个数据块命名。
[0178] 更具体的,所述将所述N个数据块的备份数据块部署在第二存储节点上,所述第二存储节点与所述第一存储节点为不同存储节点具体包括:
[0179] 按照部署策略,在所述部署策略对应的第二存储节点上对所述分区的数据文件中的第一个数据块进行数据块备份;
[0180] 获取所述分区的数据文件中第一个数据块的备份数据块的存储节点分布信息;
[0181] 备份所述分区的数据文件中的N-1个数据块至所述存储节点分布信息指示的存储节点。
[0182] 通过本发明实施例提供的数据存储装置,可以将数据库中的一个表中的一个分区部署在数据库中的第一存储节点,之后将所述分区的数据文件划分为N个数据块,所述N个数据块位于所述第一存储节点;最后将所述多个数据块中全部数据块的备份数据块部署在相同的第二存储节点上,所述第二存储节点与所述第一存储节点为不同存储节点。这样可以使得使得分布式非关系型数据库中,在数据节点故障的情况下,能够尽量减少跨节点数据范围,以减少时延、降低网络流量。
[0183] 如图12所示,本发明实施例还提供了一种数据库存储节点故障处理装置,所述装置包括:网络接口21、中央处理器22和存储器23。系统总线24用于连接网络接口21、中央处理器22和存储器23。
[0184] 网络接口21用于与网络和存储节点集群中的其他存储节点通信。
[0185] 存储器23中具有软件模块和设备驱动程序。软件模块能够执行本发明上述方法的各种功能模块;设备驱动程序可以是网络和接口驱动程序。
[0186] 在启动时,这些软件组件被加载到存储器23中,然后被中央处理器22访问并执行如下指令:
[0187] 获取存储节点集群中故障的第一存储节点的分区信息以及所述分区对应的数据块的分布信息;
[0188] 根据所述第一存储节点的分区信息以及所述分区对应的数据块的分布信息,在所述存储节点集群中确定备份有所述第一存储节点的所述分区对应的M个数据块的非故障第二存储节点;其中,M为自然数;
[0189] 将所述第一存储节点的所述分区重新分布到所述第二存储节点。
[0190] 进一步地,当所述第一存储节点故障为的从节点进程故障时,所述将所述第一存储节点的所述分区重新分布到所述第二存储节点之前,还包括:
[0191] 如果所述第二存储节点的分区负载超过负载均衡阈值,则将所述第二存储节点上的L个分区迁移至所述存储节点集群中除第二存储节点外的其它非故障存储节点;其中L为自然数。
[0192] 进一步地,当所述第一存储节点上故障为数据节点进程故障时,所述将所述第一存储节点的所述分区重新分布到所述第二存储节点之后还包括:
[0193] 将所述第二存储节点上的所述M个数据块备份到所述存储节点集群中的第三存储节点,所述第三存储节点为非故障存储节点。
[0194] 通过本发明实施例提供的数据库存储节点故障处理装置,能够获取存储节点集群中故障的某一存储节点的分区信息以及所述分区对应的数据块的分布信息;之后,根据所述该存储节点的分区信息以及所述分区对应的数据块的分布信息,在所述存储节点集群中确定备份有所述第一存储节点的所述分区对应的数据块的非故障第二存储节点,之后将所述该存储节点的所述分区重新分布到所述第二存储节点。这样,在数据节点故障的情况下,处理存储节点故障时,能够尽量减少跨节点数据范围,以减少时延、降低网络流量。
[0195] 本发明实施例还提供了一种非易失性计算机可读存储介质,当计算机执行所述计算机可读存储介质时,所述计算机执行如下步骤:
[0196] 将数据库中的一个表的一个分区部署在数据库中的第一存储节点;
[0197] 将所述分区的数据文件划分为N个数据块,所述N个数据块位于所述第一存储节点;
[0198] 将所述N个数据块的备份数据块部署在第二存储节点上,所述第二存储节点与所述第一存储节点为不同存储节点;其中,N为自然数,并且N不小于2。
[0199] 进一步的,在所述将数据库中的一个表中的一个分区部署在数据库中的第一存储节点之前,还包括:
[0200] 为所述数据库中所述分区分配分区标识;
[0201] 根据所述分区标识为所述分区的所述N个数据块命名。
[0202] 进一步的,所述将所述N个数据块的备份数据块部署在第二存储节点上,所述第二存储节点与所述第一存储节点为不同存储节点具体包括:
[0203] 按照部署策略,在所述部署策略对应的第二节点上对所述分区的数据文件中的第一个数据块进行数据块备份;
[0204] 获取所述分区的数据文件中第一个数据块的备份数据块的存储节点分布信息;
[0205] 备份所述分区的数据文件中的N-1个数据块至所述存储节点分布信息指示的节点。
[0206] 相应的,本发明实施例还提供了一种非易失性计算机可读存储介质,当计算机执行所述计算机可读存储介质时,所述计算机执行如下步骤:
[0207] 获取存储节点集群中故障的第一存储节点的分区信息以及所述分区对应的数据块的分布信息;
[0208] 根据所述第一存储节点的分区信息以及所述分区对应的数据块的分布信息,在所述存储节点集群中确定备份有所述第一存储节点的所述分区对应的M个数据块的非故障第二存储节点;其中,M为自然数;
[0209] 将所述第一存储节点的所述分区重新分布到所述第二存储节点。
[0210] 进一步的,当所述第一存储节点故障为的从节点进程故障时,所述将所述第一存储节点的所述分区重新分布到所述第二存储节点之前,还包括:
[0211] 如果所述第二存储节点的分区负载超过负载均衡阈值,则将所述第二存储节点上的L个分区迁移至所述存储节点集群中除第二存储节点外的其它非故障存储节点;其中L为自然数。
[0212] 进一步的,当所述第一存储节点上故障为数据节点进程故障时,所述将所述第一存储节点的所述分区重新分布到所述第二存储节点之后还包括:
[0213] 将所述第二存储节点上的所述M个数据块备份到所述存储节点集群中的第三存储节点,所述第三存储节点为非故障存储节点。
[0214] 本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0215] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0216] 在本申请所提供的几个实施例中,应该理解到,所公开的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0217] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0218] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0219] 所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:NAS(Network At tached Storage)、U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0220] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
[0221] 结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
[0222] 以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。