数据存储方法及装置与流程

文档序号:11949330阅读:155来源:国知局
数据存储方法及装置与流程

本发明涉及数据存储技术领域,尤其涉及一种数据存储方法及装置。



背景技术:

随着云计算、大数据的发展,越来越多企业把应用、数据、系统进行集中处理,但数据集中的同时也面临风险,灾难突发时如何保障企业核心业务7*24小时业务连续性,成为业界关注的问题。为解决这一问题,企业开始使用“双活数据中心”。

具体地,在双活数据中心中,第一数据中心中的计算节点在将数据写入本数据中心的存储节点中,同时还要将数据发送到第二数据中心的计算节点,第二数据中心的计算节点将数据写入本数据中心的存储节点中,以此实现双活数据中心中数据访问的双活。

然而,前述双活数据中心任一数据中心出现数据写入失败,均导致数据中心失去双活特性。



技术实现要素:

本发明实施例提供了一种数据存储方法及装置,以提高数据中心的双活稳定性。

第一方面,本发明实施例提供了一种数据存储方法,应用于分布式存储系统,所述分布式存储系统包括计算节点和多个存储节点,该方法包括:所述计算节点接收数据存储请求,所述数据存储请求携带待存储数据;所述计算节点确定存储所述待存储数据的哈希分区,所述哈希分区中包含第一存储节点组和第二存储节点组;其中,所述第一存储节点组包含属于第一数据中心的R个存储节点,所述第二存储节点组包含属于第二数据中心的R个存储节点,R为大于2的整数;所述计算节点将所述待存储数据划分为N个数据分片并获得N个数据分片的M个校验分片;其中,N和M为正整数,并且N+M=R;所述计算节点将所述N个数据分片及M个校验分片分别写入第一存储节点组和所述第二存储节点组的R个存储节点。

本发明实施例中,所述多个存储节点中的第一部分存储节点属于所述第一数据中心,第二部分存储节点属于所述第二数据中心。根据所述分布式存储系统的容错级别将所述第一数据中心和所述第二数据中心中的存储节点进行分组,将所述第一数据中心的每个存储节点组和所述第二数据中心的每个存储节点组一一对应起来,确定出多个哈希分区,每组包括R(R与容错级别对应)个存储节点。本发明实施例中,将待存储数据根据容错级别存储到同一分区的两组存储节点组上,每一个存储节点组位于不同的数据中心,从而提高了数据中心中的数据的可靠性和稳定性。

本发明实施在具体实施过程中,第一数据中心和第二数据中心在地理位置上可以有不同的距离,例如,可以位于相同的城市,或不同的城市,从而保证两个数据中心不会同时发生故障,以实现容灾。

在本发明实施例具体实施的过程中,所述计算节点为具有数据处理功能的一个载体,例如,所述计算节点可以一个服务器等。所述存储节点为具有数据存储空间的一个载体,例如,所述存储节点可以为服务器或电脑中的一个磁盘、或者为逻辑存储空间,如逻辑单元(Logical Unit,LU)等。所述待存储数据对应的N个数据分片和M个校验分片可由计算节点对所述待存储数据使用纠删码(Erasure Codes,EC)算法处理得到。

本发明实施例中,所述计算节点接收数据存储请求,所述数据存储请求携带待存储数据;所述计算节点确定存储所述待存储数据的哈希分区,所述哈希分区中包含第一存储节点组和第二存储节点组;其中,所述第一存储节点组包含属于第一数据中心的R个存储节点,所述第二存储节点组包含属于第二数据中心的R个存储节点,R为大于2的整数;所述计算节点将所述待存储数据划分为N个数据分片并获得N个数据分片的M个校验分片;其中,N和M为正整数,并且N+M=R;所述计算节点将所述N个数据分片及M个校验分片分别写入第一存储节点组和所述第二存储节点组的R个存储节点。

本发明实施例的技术方案将待存储数据进行分片,且将待存储数据对应的N个数据分片和M个校验分片分别存储在属于第一数据中心的R个存储节点上和属于第二数据中心的R个存储节点上,所以在任一数据中心出现写入分片失败且写入失败的分片数量小于或等于校验分片的数量M时,可根据写入成功的分片修复写入失败的分片,即本发明实施例的技术方案在任一数据中心出现分片写入失败时有一定的修复能力,所以本发明实施例的技术方案提高了数据中心中的数据的可靠性和稳定性。

结合第一方面,在第一方面第一种可能的实现方式中,所述数据存储请求还携带关键字Key,所述计算节点确定存储所述待存储数据的哈希分区,具体包括:所述计算节点根据所述关键字确定存储所述待存储数据的所述哈希分区。

在该实现方式具体实现的过程中,所述分布式存储系统中的每个哈希分区可对应一个关键字,进而所述计算节点可根据关键字确定存储待存储数据的哈希分区。

结合第一方面或第一方面第一种可能的实现方式,在第一方面第二种可能的实现方式中,所述分布式存储系统还包括管理节点,所述哈希分区是由所述管理节点根据所述分布式存储系统的容错级别分别从所述第一数据中心和所述第二数据中心确定的。

在该实现方式中,在所述分布式存储系统设置专门的管理节点,所述管理节点根据所述分布式存储系统的容错级别从所述第一数据中心和所述第二数据中心中确定多个哈希分区。其中,这里的容错级别与N+M对应。在本发明具体实施的过程中,所述管理节点根据所述分布式存储系统的容错级别将所述第一数据中心和所述第二数据中心中的存储节点进行分组,将所述第一数据中心的每个存储节点组和所述第二数据中心的每个存储节点组一一对应起来,确定出多个哈希分区。

结合第一方面或第一方面第一和第二种可能的实现方式中的任意一种,在第一方面第三种可能的实现方式中,所述计算节点将所述N个数据分片及M个校验分片分别写入第一存储节点组和所述第二存储节点组的R个存储节点,具体包括:将所述N个数据分片及M个校验分片写入所述第一存储节点组的R个存储节点;将所述第一存储节点组中的R个存储节点存储的所述N个数据分片及M个校验分片复制到所述第二存储节点组中的R个存储节点。

该实现方式,由于所述计算节点在进行数据写入时,采用先将所述N个数据分片及M个校验分片写入所述第一存储节点组的R个存储节点,然后将所述第一存储节点组中的R个存储节点存储的所述N个数据分片及M个校验分片复制到所述第二存储节点组中的R个存储节点的方式。所以该实现方式可在所述第一存储节点组中存在写入分片失败时,先进行修复,然后再将修复后的分片复制到所述第二存储节点组中,进而提高数据写入成功的概率,提高双活数据中心的双活特性。

结合第一方面第三种可能的实现方式,在第一方面第四种可能的实现方式中,所述计算节点将所述N个数据分片及M个校验分片分别写入第一存储节点组和所述第二存储节点组的R个存储节点,具体还包括:当所述第一存储节点组中存在写入分片失败且写入失败分片的数量小于或等于M时,修复所述第一存储节点组中的存储节点内写入失败的分片;将修复后的所述第一存储节点组中的R个存储节点存储的所述N个数据分片及M个校验分片复制到所述第二存储节点组中的R个存储节点。

该实现方式,在所述第一存储节点组存在写入分片失败时,先对写入失败的分片进行修复,然后再进行分片的复制,提高了数据中心中的数据的可靠性和稳定性。

结合第一方面第三种可能的实现方式,在第一方面第五种可能的实现方式中,所述计算节点将所述N个数据分片及M个校验分片分别写入第一存储节点组和所述第二存储节点组的R个存储节点,具体还包括:当所述第二存储节点组中存在复制分片失败且复制失败分片的数量小于或等于M时,修复所述第二存储节点组中复制失败的分片。

该实现方式,在所述第二存储节点组中存储复制分片失败时,可对复制失败的分片进行修复,提高了数据中心中的数据的可靠性和稳定性。

与第一方面的数据存储方法对应,在第二方面,本发明实施例还提供了一种数据读取方法,应用于分布式存储系统,所述分布式存储系统包括计算节点和多个存储节点,该方法包括:所述计算节点接收数据读取请求;所述计算节点获取与所述数据读取请求对应的关键字Key;所述计算节点根据所述关键字确定所述数据读取请求对应的哈希分区,所述哈希分区中包含第三存储节点组和第四存储节点组;其中,所述第三存储节点组包含属于第一数据中心的R个存储节点,所述第四存储节点组包含属于第二数据中心的R个存储节点,所述第三存储节点组和所述第四存储节点组分别存储有与所述数据读取请求对应的、属于同一数据的R个分片,所述R个分片一一对应存储在每个存储节点组中的R个存储节点上,所述R个分片由N个数据分片和M个校验分片组成,N和M为正整数,并且N+M=R;所述计算节点从所述第三存储节点组中读取与所述数据读取指令对应的所述R个分片。

其中,在本发明实施例具体实施的过程中,当所述数据读取请求与所述数据存储方法中的待存储数据相对应时,所述第三存储节点组与前述数据存储方法中的第一存储节点组或第二存储节点组相同,所述第四存储节点组与前述数据存储方法中的第二存储节点组或第一存储节点组相同。例如,所述第三存储节点组对应于前述数据存储方法中的第一存储节点组,所述第四存储节点组对应于前述数据存储方法中的第二存储节点组。当所述数据读取请求与所述数据存储方法中的待存储数据不对应时,所述第三存储节点组和所述第四存储节点组与前述数据存储方法中的第一存储节点组和第二存储节点组均不同。

本发明实施例中,所述计算节点接收数据读取请求;所述计算节点获取与所述数据读取请求对应的关键字Key;所述计算节点根据所述关键字确定所述数据读取请求对应的哈希分区,所述哈希分区中包含第三存储节点组和第四存储节点组;其中,所述第三存储节点组包含属于第一数据中心的R个存储节点,所述第四存储节点组包含属于第二数据中心的R个存储节点,所述第三存储节点组和所述第四存储节点组分别存储有与所述数据读取请求对应的、属于同一数据的R个分片,所述R个分片一一对应存储在每个存储节点组中的R个存储节点上,所述R个分片由N个数据分片和M个校验分片组成,N和M为正整数,并且N+M=R;所述计算节点从所述第三存储节点组中读取与所述数据读取指令对应的所述R个分片。

本发明实施例的技术方案中与所述数据读取请求对应的R个分片是由同一数据的N个数据分片和M个校验分片组成,所以在所述第三存储节点组的所述R个分片中损坏分片的数量小于或等于校验分片的数量M时,可根据所述R个分片中未损坏分片修复所述R个分片中的损坏分片。即本发明实施例的技术方案在进行数据读取时,如果与数据读取请求对应的R个分片中有损坏分片,则在损坏分片的数量小于或等于校验分片的数量M时可进行修复,所以本发明实施例的技术方案提高了数据中心中的数据的可靠性和稳定性。

结合第二方面,在第二方面第一种可能的实现方式中,还包括:当所述第三存储节点组存储的所述R个分片中损坏分片的数量小于或等于M时,所述计算节点利用所述第三存储节点组存储的所述R个分片中未损坏分片修复对应的损坏分片。

结合第二方面第一种可能的实现方式,在第二方面第二种可能的实现方式中,还包括:当所述第三存储节点组中存储的所述R个分片中损坏分片的数量大于M且所述第四存储节点组存储的所述R个分片中没有损坏分片时,所述计算节点将所述第四存储节点组存储的所述R个分片一一对应复制到所述第三存储节点组的R个存储节点上;当所述第三存储节点组存储的所述R个分片中损坏分片的数量大于M且所述第四存储节点组存储的所述R个分片中损坏分片的数量小于或等于M时,利用所述第四存储节点组存储的所述R个分片中未损坏分片修复对应的损坏分片;将修复后的所述第四存储节点组存储的所述R个分片一一对应复制到所述第三存储节点组的R个存储节点上。

该实现方式,当所述第三存储节点组中的R个分片不能自身进行修复时,可利用所述第四存储节点组中的R个分片对所述第三存储节点组中的R个分片进行修复,提高了数据中心中的数据的可靠性和稳定性。

结合第二方面第二种可能的实现方式,在第二方面第三种可能的实现方式中,还包括:当所述第三存储节点组存储的所述R个分片中损坏分片的数量大于M且所述第四存储节点组存储的所述R个分片中损坏分片的数量大于M时,所述计算节点判断所述R个分片在所述第三存储节点组和所述第四存储节点组中相同损坏分片的数量是否小于或等于M;当所述R个分片在所述第三存储节点组和所述第四存储节点组中相同损坏分片的数量小于或等于M时,所述计算节点利用所述R个分片在所述第三存储节点组和所述第四存储节点组中的未损坏分片修复所述第三存储节点组和所述第四存储节点组中对应的损坏分片。

该实现方式,当所述第三存储节点组中的R个分片不能自身进行修复,且所述第四存储节点组中的R个分片不能自身进行修复时,可根据所述第三存储节点组和所述第四存储节点组中的未损坏分片实现所述第三存储节点组中的R个分片的修复,以及所述第三存储节点组中的R个分片的修复,提高了数据中心中的数据的可靠性和稳定性。

第三方面,本发明实施例提供了一种分布式存储系统中的计算节点,所述分布式存储系统包括所述计算节点和多个存储节点,其中,所述计算节点包括:接收单元,用于接收数据存储请求,所述数据存储请求携带待存储数据;确定单元,用于确定存储所述待存储数据的哈希分区,所述哈希分区中包含第一存储节点组和第二存储节点组;其中,所述第一存储节点组包含属于第一数据中心的R个存储节点,所述第二存储节点组包含属于第二数据中心的R个存储节点,R为大于2的整数;数据划分单元,用于将所述待存储数据划分为N个数据分片并获得N个数据分片的M个校验分片;其中,N和M为正整数,并且N+M=R;写入单元,用于将所述N个数据分片及M个校验分片分别写入第一存储节点组和所述第二存储节点组的R个存储节点。

结合第三方面,在第三方面第一种可能的实现方式中,所述接收单元接收的数据存储请求还携带关键字Key,所述确定单元具体用于根据所述关键字确定存储所述待存储数据的所述哈希分区。

结合第三方面或第三方面第一种可能的实现方式,在第三方面第二种可能的实现方式中,所述计算节点还包括:管理单元,用于根据所述分布式存储系统的容错级别分别从所述第一数据中心和所述第二数据中心确定哈希分区。

结合第三方面或第三方面第一和第二种可能的实现方式中的任意一种,在第三方面第三种可能的实现方式中,所述写入单元,包括:写入子单元,用于将所述N个数据分片及M个校验分片写入所述第一存储节点组的R个存储节点;复制子单元,用于将所述第一存储节点组中的R个存储节点存储的所述N个数据分片及M个校验分片复制到所述第二存储节点组中的R个存储节点。

结合第三方面第三种可能的实现方式,在第三方面第四种可能的实现方式中,所述写入单元,还包括:第一修复子单元,用于当所述第一存储节点组中存在写入分片失败时,修复所述第一存储节点组中的存储节点内写入失败的分片;所述复制子单元还用于将修复后的所述第一存储节点组中的R个存储节点存储的所述N个数据分片及M个校验分片复制到所述第二存储节点组中的R个存储节点。

结合第三方面第三种可能的实现方式,在第三方面第五种可能的实现方式中,所述写入单元,还包括:第二修复子单元,用于当所述第二存储节点组中存在写入分片失败时,修复所述第二存储节点组中写入失败的分片。

第四方面,本发明实施例提供了一种分布式存储系统中的计算节点,所述分布式存储系统包括所述计算节点和多个存储节点,其中,所述计算节点包括处理器和通信接口;所述通信接口用于接收数据存储请求,所述数据存储请求携带待存储数据;所述处理器用于确定存储所述待存储数据的哈希分区,将所述待存储数据划分为N个数据分片并获得N个数据分片的M个校验分片,将所述N个数据分片及M个校验分片分别写入第一存储节点组和所述第二存储节点组的R个存储节点;所述哈希分区中包含第一存储节点组和第二存储节点组;其中,所述第一存储节点组包含属于第一数据中心的R个存储节点,所述第二存储节点组包含属于第二数据中心的R个存储节点,R为大于2的整数;其中,N和M为正整数,并且N+M=R。

结合第四方面,在第四方面第一种可能的实现方式中,所述通信接口接收的数据存储请求还携带关键字Key,所述处理器具体用于根据所述关键字确定存储所述待存储数据的所述哈希分区。

结合第四方面或第四方面第一种可能的实现方式,在第四方面第二种可能的实现方式中,所述处理器用于根据所述分布式存储系统的容错级别分别从所述第一数据中心和所述第二数据中心确定哈希分区。

结合第四方面或第四方面第一和第二种可能的实现方式中的任意一种,在第四方面第三种可能的实现方式中,所述处理器具体用于将所述N个数据分片及M个校验分片写入所述第一存储节点组的R个存储节点,将所述第一存储节点组中的R个存储节点存储的所述N个数据分片及M个校验分片复制到所述第二存储节点组中的R个存储节点。

结合第四方面第三种可能的实现方式,在第四方面第四种可能的实现方式中,所述处理器还用于当所述第一存储节点组中存在写入分片失败时,修复所述第一存储节点组中的存储节点内写入失败的分片,将修复后的所述第一存储节点组中的R个存储节点存储的所述N个数据分片及M个校验分片复制到所述第二存储节点组中的R个存储节点。

结合第四方面第三种可能的实现方式,在第四方面第五种可能的实现方式中,所述处理器还用于当所述第二存储节点组中存在写入分片失败时,修复所述第二存储节点组中写入失败的分片。

具体实现中,所述计算节点的处理器可以为中央处理单元与存储器的组合,中央处理单元执行存储器中的计算机指令以实现第四方面各种实现方式。本领域技术人员可知,处理器也可以为专用芯片,其他实现方式也可以实现本发明实施例中的控制器的实现方式(操作)。如通过现场可编程门阵列(Field Programmable Gate Array,FPGA)或其他硬件执行本发明实施例中处理器的全部实现方式(操作),或者,FPGA或其他硬件与处理器分别执行本发明实施例处理器的部分实现方式(操作),以实现本发明实施例描述的处理器的实现方式(操作)。

第五方面,本发明实施例提供了一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时可执行包括本发明提供的一种数据存储方法和一种数据读取方法的任一实现方式中的部分或全部步骤。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。

图1为本发明实施例提供的一种分布式存储系统的结构示意图;

图2为本发明实施例提供的一种数据存储方法的流程图;

图3为本发明实施例提供的一种数据读取方法的流程图;

图4为本发明实施例提供的一种EC修复示意图;

图5为本发明实施例提供的另一种EC修复示意图;

图6为本发明实施例提供的又一种EC修复示意图;

图7为本发明实施例提供的一种分布式存储系统中的计算节点的结构示意图;

图8为本发明实施例提供的一种分布式存储系统中的计算节点的结构框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述。

为方便理解,首先对本发明实施例的应用场景进行介绍。本发明实施例的应用场景为分布式存储系统,如图1所示,图1为本发明实施例提供的一种分布式存储系统的结构示意图。在图1所示分布式存储系统中,包括一个计算节点,一个管理节点和两个数据中心(第一数据中心和第二数据中心),每个数据中心包括多个存储节点。在本发明实施例具体实施的过程中,所述计算节点为具有数据处理功能的一个载体,例如,所述计算节点可以服务器等。所述存储节点为具有数据存储空间的一个载体,例如,所述存储节点可以为服务器或电脑中的一个磁盘、或者为逻辑存储空间,如逻辑单元(LogicalUnit,LU)等。

其中,管理节点可根据分布式存储系统的容错级别将分布式存储系统按照一致性哈希分区算法从第一数据中心和第二数据中心中确定出多个哈希分区。具体地,例如,分布式存储系统的纠删码(Erasure Codes,EC)级别为N+M(这里利用N代表数据分片的数量,M代表校验分片的数量),N和M为正整数。则管理节点可利用第一数据中心中的存储节点确定出多个存储节点组,并利用第二数据中心中的存储节点确定出与第一数据中心同样数量个存储节点组,每个存储节点组中存储节点的数量R和EC级别对应,具体为R=N+M。进一步地,将第一数据数据中心和第二数据中心中的存储节点组一一对应得到多个哈希分区(图1中仅区分了属于一个哈希分区的第一存储节点组和第二存储节点组,其他哈希分区未做区分)。需要说明的是,由于N和M为正整数,所以R为大于2的整数。例如,N=2,M=1,则R=3;N=12,M=3,则R=15。

本发明实施例中,将待存储数据根据容错级别存储到同一分区的两组存储节点组上,每一个存储节点组位于不同的数据中心,从而提高了数据中心中的数据的可靠性和稳定性。

在管理节点划分出多个哈希分区的基础上,计算节点可对接收到的待存储数据进行EC处理,得到N个数据分片和M个校验分片,并将得到的N个数据分片和M个校验分片存储在某个确定的哈希分区的每个存储节点组的R个存储节点。下面结合具体实施例对计算节点接收到待存储数据后的存储过程进行详细说明。

参见图2,为本发明实施例提供的一种数据存储方法的流程图。本发明实施例可应用于图1所示的分布式存储系统。具体地,本实施例可以包括以下步骤:

在步骤S210中,计算节点接收数据存储请求,所述数据存储请求携带待存储数据。

具体地,所述待存储数据可以为视频数据、文本数据、压缩包等。

在步骤S220中,计算节点确定存储所述待存储数据的哈希分区。

其中,在本发明实施例具体实施的过程中,可通过在所述数据存储请求中携带关键字Key,同时将管理节点划分的多个哈希分区和关键字之间存在的一一对应关系存储在分布式存储系统中,例如存储在分布式存储系统的一个存储节点上。在此基础上,计算节点可根据所述数据存储请求中携带的关键字Key在管理节点划分的多个哈希分区中确定出存储所述待存储数据的哈希分区。另外,也可在多个哈希分区中分别存储相互不同的关键字,此时计算节点也可根据所述数据存储请求中携带的关键字Key在管理节点划分的多个哈希分区中确定出存储所述待存储数据的哈希分区。

为方便描述,后续将存储所述待存储数据的哈希分区中包括第一数据中心的R个存储节点的存储节点组称为第一存储节点组,将存储所述待存储数据的哈希分区中包括第二数据中心的R个存储节点的存储节点组称为第二存储节点组。

在步骤S230中,计算节点将所述待存储数据划分为N个数据分片并获得N个数据分片的M个校验分片。

具体地,在该步骤中,计算节点对所述待存储数据进行EC处理,可得到与EC级别对应的N个数据分片和M个校验分片。例如,所述EC级别的N为12,M为3,则所述待存储数据进行EC处理后得到12个数据分片和3个校验分片。其中,在本发明实施例具体实施的过程中,可根据对待存储数据的可靠性和持久性的要求确定EC级别的N和M的具体取值。

此外,需要补充说明的是,在图2所示实施例中,步骤S230位于步骤S220之后。但在本发明具体实施过程中,步骤S230也可以位于步骤S220之前,步骤S230也可以和步骤S220同步执行。

在步骤S240中,计算节点将所述N个数据分片及M个校验分片分别写入第一存储节点组和所述第二存储节点组的R个存储节点。

具体地,在计算节点对所述待存储数据进行EC处理得到与EC级别对应的N个数据分片和M个校验分片后,进一步地,计算节点将EC处理后得到的N个数据分片和M个校验分片一一对应写入第一存储节点组的R个存储节点,以及一一对应写入第二存储节点组的R个存储节点。这里的一一对应是指,每个存储节点内写入一个数据分片或一个校验分片,在同一存储节点组的存储节点存储的分片(数据分片或校验分片)互相异同。

例如,在本发明实施例的一种具体实施方式中,所述EC级别的N为12,M为3,第一存储节点组包括第1、第2、…、第15个存储节点,第二存储节点组包括第16、第17、…、第30个存储节点,所述待存储数据进行EC处理后得到第1、第2、…、第12个数据分片和第1、第2和第3个校验分片。则在第一存储节点组的15个存储节点写入分片时,可将第1、第2、…、第12个数据分片写入第1、第2、…、第12个存储节点,第1、第2和第3个校验分片写入第13、第14和第15个存储节点。在第二存储节点组的15个存储节点写入分片时,可将第1、第2、…、第12个数据分片写入第16、第17、…、第27个存储节点,第1、第2和第3个校验分片写入第28、第29和第30个存储节点。

另外,需要指出的是,在本发明实施例具体实施的过程中,计算节点可将所述待存储数据EC处理后得到的N个数据分片和M个校验分片同时一一对应写入第一存储节点组的R个存储节点和第二存储节点组的R个存储节点。计算节点也可以先将所述待存储数据EC处理后得到的N个数据分片和M个校验分片一一对应写入一个存储节点组的R个存储节点,然后将该存储节点组中的R个存储节点存储的N个数据分片及M个校验分片复制到另一个存储节点组中的R个存储节点。在本发明具体实施的过程中,计算节点可先将暂时没有进行数据写入和读取的存储节点组的R个存储节点内写入N个数据分片和M个校验分片,然后复制到另一个存储节点组的R个存储节点;也可以在第一存储节点组和第二存储节点组随机选一个存储节点组进行N个数据分片和M个校验分片的写入,然后复制到另一个存储节点组的R个存储节点。

例如,计算节点可以先将所述待存储数据EC处理后得到的N个数据分片和M个校验分片一一对应写入第一存储节点组的R个存储节点,然后将第一存储节点组中的R个存储节点存储的N个数据分片及M个校验分片复制到第二存储节点组中的R个存储节点。此时,在本发明实施例具体实施的过程中,当计算节点发现第一存储节点组中存在写入分片失败且写入失败分片的数量小于或等于M时,计算节点可对第一存储节点组中的存储节点内写入失败的分片进行修复,在修复后计算节点再将修复后的第一存储节点组中的R个存储节点存储的N个数据分片及M个校验分片复制到第二存储节点组中的R个存储节点。相应地,在本发明实施例具体实施的过程中,当计算节点发现第二存储节点组中存在复制分片失败且复制失败分片的数量小于或等于M时,计算节点可对第二存储节点组中的存储节点内复制失败的分片进行修复。其中,计算节点可在某一分片写入或复制失败时,记录日志,进而根据所记录的日志获知写入失败或复制失败的分片数量。

本发明实施例中,所述计算节点接收数据存储请求,所述数据存储请求携带待存储数据;所述计算节点确定存储所述待存储数据的哈希分区,所述哈希分区中包含第一存储节点组和第二存储节点组;其中,所述第一存储节点组包含属于第一数据中心的R个存储节点,所述第二存储节点组包含属于第二数据中心的R个存储节点,R为大于2的整数;所述计算节点将所述待存储数据划分为N个数据分片并获得N个数据分片的M个校验分片;其中,N和M为正整数,并且N+M=R;所述计算节点将所述N个数据分片及M个校验分片分别写入第一存储节点组和所述第二存储节点组的R个存储节点。

本发明实施例的技术方案将待存储数据进行分片,且将待存储数据对应的N个数据分片和M个校验分片分别存储在属于第一数据中心的R个存储节点上和属于第二数据中心的R个存储节点上,所以在任一数据中心出现写入分片失败且写入失败的分片数量小于或等于校验分片的数量M时,可根据写入成功的分片修复写入失败的分片,即本发明实施例的技术方案在任一数据中心出现分片写入失败时有一定的修复能力,所以本发明实施例的技术方案提高了数据中心中的数据的可靠性和稳定性。

如图3所示,相对于上面实施例中的数据存储方法,本发明实施例还提供一种数据读取方法,本发明实施例可应用于图1所示的分布式存储系统。具体地,本实施例可以包括以下步骤:

在步骤S310中,计算节点接收数据读取请求。

具体地,所述数据读取请求可在用户执行特定操作时向计算节点发出,也可在分布式存储系统执行某一进程时利用预先编写的代码向计算节点发出。

在步骤S320中,计算节点获取与所述数据读取请求对应的关键字Key。

具体地,在本发明的一种具体实施方式中,可在所述数据读取请求中携带所述数据读取请求对应的关键字Key,此时,计算节点直接获取与所述数据读取请求对应的关键字Key。也可在所述数据读取请求中携带与所述数据读取请求对应的关键字Key有对应关系的信息,计算节点可先获取该对应关系,然后根据该对应关系获取与所述数据读取指令对应的关键字Key。

在步骤S330中,计算节点根据所述关键字确定所述数据读取请求对应的哈希分区。

具体地,可将管理节点划分的多个哈希分区和关键字之间存在的一一对应关系存储在分布式存储系统中,例如存储在分布式存储系统的一个存储节点上。在此基础上,计算节点可根据步骤S320中获取的关键字Key在管理节点划分的多个哈希分区中确定出所述数据读取请求对应的哈希分区。另外,也可在多个哈希分区中分别存储相互不同的关键字,此时计算节点也可根据步骤S320中获取的关键字Key在管理节点划分的多个哈希分区中确定出所述数据读取请求对应的哈希分区。

其中,为方便描述,后续将与所述数据读取请求对应的哈希分区中包括第一数据中心的R个存储节点的存储节点组称为第三存储节点组,将与所述数据读取请求对应的哈希分区中包括第二数据中心的R个存储节点的存储节点组称为第四存储节点组。第三存储节点组和第四存储节点组分别存储有与所述数据读取请求对应的、属于同一数据的R个分片,所述R个分片一一对应存储在每个存储节点组中的R个存储节点上,所述R个分片包括预先对所述同一数据进行EC处理得到的N个数据分片和M个校验分片,N和M为正整数,并且N+M=R。

另外,在本发明实施例具体实施的过程中,当所述数据读取请求与所述数据存储方法中的待存储数据相对应时,所述第三存储节点组与前述数据存储方法中的第一存储节点组或第二存储节点组相同,所述第四存储节点组与前述数据存储方法中的第二存储节点组或第一存储节点组相同。例如,所述第三存储节点组对应于前述数据存储方法中的第一存储节点组,所述第四存储节点组对应于前述数据存储方法中的第二存储节点组。当所述数据读取请求与所述数据存储方法中的待存储数据不对应时,所述第三存储节点组和所述第四存储节点组与前述数据存储方法中的第一存储节点组和第二存储节点组均不同。

在步骤S340中,计算节点从所述第三存储节点组中读取与所述数据读取指令对应的所述R个分片。

在本发明具体实施的过程中,计算节点可先将与所述数据读取请求对应的哈希分区中暂时没有进行数据写入和读取的存储节点组确定为第三存储节点组;也可将与所述数据读取请求对应的哈希分区中的任一存储节点组称为第三存储节点组。

本发明实施例中,所述计算节点接收数据读取请求;所述计算节点获取与所述数据读取请求对应的关键字Key;所述计算节点根据所述关键字确定所述数据读取请求对应的哈希分区,所述哈希分区中包含第三存储节点组和第四存储节点组;其中,所述第三存储节点组包含属于第一数据中心的R个存储节点,所述第四存储节点组包含属于第二数据中心的R个存储节点,所述第三存储节点组和所述第四存储节点组分别存储有与所述数据读取请求对应的、属于同一数据的R个分片,所述R个分片一一对应存储在每个存储节点组中的R个存储节点上,所述R个分片由N个数据分片和M个校验分片组成,N和M为正整数,并且N+M=R;所述计算节点从所述第三存储节点组中读取与所述数据读取指令对应的所述R个分片。

本发明实施例的技术方案中与所述数据读取请求对应的R个分片是由同一数据的N个数据分片和M个校验分片组成,所以在所述第一存储节点组的所述R个分片中损坏分片的数量小于或等于校验分片的数量M时,可根据所述R个分片中未损坏分片修复所述R个分片中的损坏分片。即本发明实施例的技术方案在进行数据读取时,如果与数据读取请求对应的R个分片中有损坏分片,则在损坏分片的数量小于或等于校验分片的数量M时可进行修复,所以本发明实施例的技术方案提高了数据中心中的数据的可靠性和稳定性。

在本发明具体实施的过程中,在所述第三存储节点组中每个存储节点内存储的属于所述R个分片的分片难免会出现损坏。为此,在本发明的一种具体实施方式中,图3所示的数据读取方法还可以包括:计算节点判断所述第三存储节点组存储的所述R个分片中损坏分片的数量是否小于或等于M,当所述第三存储节点组存储的所述R个分片中损坏分片的数量小于或等于M时,计算节点利用所述第三存储节点组存储的所述R个分片中未损坏分片修复对应的损坏分片。

进一步地,当所述第三存储节点组存储的所述R个分片中损坏分片的数量大于M时,图3所示的数据读取方法还可以包括:计算节点判断第四存储节点组存储的所述R个分片中是否有损坏分片,以及在有损坏分片时判断所述第四存储节点组存储的所述R个分片中损坏分片的数量是否小于或等于M。当所述第四存储节点组存储的所述R个分片中没有损坏分片时,计算节点将所述第四存储节点组存储的所述R个分片一一对应复制到所述第三存储节点组的R个存储节点上,进而计算节点从所述第三存储节点组中读取复制得到的所述R个分片。当所述第四存储节点组存储的所述R个分片中损坏分片的数量小于或等于M时,利用所述第四存储节点组存储的所述R个分片中未损坏分片修复对应的损坏分片;将修复后的所述第四存储节点组存储的所述R个分片一一对应复制到所述第三存储节点组的R个存储节点上,进而计算节点从所述第三存储节点组中读取复制得到的所述R个分片。

该实现方式,当所述第三存储节点组中的R个分片不能自身进行修复时,可利用所述第四存储节点组中的R个分片对所述第三存储节点组中的R个分片进行修复,提高了数据中心中的数据的可靠性和稳定性。

更进一步地,当所述第四存储节点组存储的所述R个分片中损坏分片的数量也大于M时,图3所示的数据读取方法还可以包括:计算节点判断所述R个分片在所述第三存储节点组和所述第四存储节点组中相同损坏分片的数量是否小于或等于M;当所述R个分片在所述第三存储节点组和所述第四存储节点组中相同损坏分片的数量小于或等于M时,计算节点利用所述R个分片在所述第三存储节点组和所述第四存储节点组中的未损坏分片修复所述第三存储节点组和所述第四存储节点组中对应的损坏分片。

该实现方式,当所述第三存储节点组中的R个分片不能自身进行修复,且所述第四存储节点组中的R个分片不能自身进行修复时,可根据所述第三存储节点组和所述第四存储节点组中的未损坏分片实现所述第三存储节点组中的R个分片的修复,以及所述第三存储节点组中的R个分片的修复,提高了数据中心中的数据的可靠性和稳定性。

为更加直观的展示数据读取过程中损坏分片的修复过程,下面结合图4-图6对三种不同的修复过程进行说明。其中,图4-图6中N=12,M=3。在第三存储节点组中12个数据分片用S1、S2、…、S12表示,3个校验分片用S13、S14、S15表示;在第四存储节点组中12个数据分片用S16、S17、…、S27表示,3个校验分片用S28、S29和S30表示。第三存储节点组和第四存储节点组中分片按照从左至右的顺序一一对应,并存储在相应的存储节点内。

如图4所示,第三存储节点组中损坏分片有S1、S3和S14,损坏分片的数量为3,和M相等。所以计算节点利用第三存储节点组中未损坏的12个分片S2、S4、…、S13和S15即可对S1、S3和S14进行EC修复,最终得到15个未损坏分片S1、S2、S3、S4、…S13、S14、S15。

如图5所示,第三存储节点组中损坏分片有S1、S3、S4、S14和S15,损坏分片的数量为5,大于M,而第四存储节点组中损坏分片有S16、S18和S29,损坏分片的数量为3,等于M。所以计算节点利用第四存储节点组中未损坏的12个分片S17、S19、…、S28和S30即可对S16、S18和S29进行EC修复,得到15个未损坏的分片S16、S17、S18、S19、…S28、S29、S30。进一步地,将修复后的15个未损坏的分片复制到第三存储节点组得到未损坏的S1、S2、S3、S4、…S13、S14、S15。

如图6所示,第三存储节点组中损坏分片有S1、S5、S7、S8、S9、S11、S12、S14和S15中,第三存储节点组中损坏分片的数量为9,大于M,第四存储节点组中损坏分片有S17、S21、S22、S24和S26,第四存储节点组中损坏分片为5,大于M。而第三存储节点组和第四存储节点组中相同的损坏分片包括S7(对应于S22)、S9(对应于S24)和S11(对应于S26),第三存储节点组和第四存储节点组中相同损坏分片的数量为3,等于M。此时,计算节点从第三存储节点组和第四存储节点组中提取不同的未损坏分片。具体地,计算节点从第三存储节点组中提取S2、S3、S4、S6、S10和S13,从第四存储节点中提取S16、S20、S23、S27、S29和S30。然后对从第三存储节点组和第四存储节点组中提取的12个未损坏分片按照S16、S2、S3、S4、S20、S6、S23、S10、S27、S13、S29、S30的顺序排序,并利用这未损坏的12个分片进行EC修复,得到15个未损坏的分片S1、S2、S3、S4、…S13、S14、S15。需要补充说明的是,在本发明具体实施的过程中,还可以将得到的15个未损坏分片复制到第四存储节点组得到S16、S17、S18、S19、…S28、S29、S30。

需要补充说明的是,在图1所示分布式存储系统中仅包括一个计算节点和一个管理节点,但在本发明实施例具体实施的过程中,分布式存储系统可以包括多个计算节点,每个计算节点都可执行前述实施例中的数据存储方法和数据读取方法。分布式存储系统也可以包括多个管理节点,多个管理节点共同完成分布式存储系统的哈希分区过程。此外,管理节点的功能也可以由计算节点完成,这时可以没有管理节点。

相对于前述实施例中的数据存储方法,本发明实施例还提供了一种分布式存储系统中的计算节点。

图7为本申请实施例提供的一种分布式存储系统中的计算节点的结构示意图。该分布式存储系统包括该计算节点和多个存储节点,其中,该计算节点用于执行如图2所示的数据存储方法。该计算节点可以包括:接收单元710、确定单元720、数据划分单元730和写入单元740。

其中,所述接收单元710用于接收数据存储请求,所述数据存储请求携带待存储数据;

所述确定单元720用于确定存储所述待存储数据的哈希分区,所述哈希分区中包含第一存储节点组和第二存储节点组;其中,所述第一存储节点组包含属于第一数据中心的R个存储节点,所述第二存储节点组包含属于第二数据中心的R个存储节点,R为大于2的整数;

所述数据划分单元730用于将所述待存储数据划分为N个数据分片并获得N个数据分片的M个校验分片;其中,N和M为正整数,并且N+M=R;

所述写入单元740用于将所述N个数据分片及M个校验分片分别写入第一存储节点组和所述第二存储节点组的R个存储节点。

本发明实施例中,所述接收单元接收数据存储请求,所述数据存储请求携带待存储数据;所述确定单元确定存储所述待存储数据的哈希分区,所述哈希分区中包含第一存储节点组和第二存储节点组;其中,所述第一存储节点组包含属于第一数据中心的R个存储节点,所述第二存储节点组包含属于第二数据中心的R个存储节点,R为大于2的整数;所述数据划分单元将所述待存储数据划分为N个数据分片并获得N个数据分片的M个校验分片;其中,N和M为正整数,并且N+M=R;所述写入单元将所述N个数据分片及M个校验分片分别写入第一存储节点组和所述第二存储节点组的R个存储节点。

本发明实施例的技术方案将待存储数据进行分片,且将待存储数据对应的N个数据分片和M个校验分片分别存储在属于第一数据中心的R个存储节点上和属于第二数据中心的R个存储节点上,所以在任一数据中心出现写入分片失败且写入失败的分片数量小于或等于校验分片的数量M时,可根据写入成功的分片修复写入失败的分片,即本发明实施例的技术方案在任一数据中心出现分片写入失败时有一定的修复能力,所以本发明实施例的技术方案提高了数据中心中的数据的可靠性和稳定性。

可选地,在本发明实施例的一种具体实现方式中,所述接收单元710接收的数据存储请求还携带关键字Key,所述确定单元720具体用于根据所述关键字确定存储所述待存储数据的所述哈希分区。

在本发明实施例的另一种具体实现方式中,所述计算节点还可以包括:管理单元。

所述管理单元用于根据所述分布式存储系统的容错级别分别从所述第一数据中心和所述第二数据中心确定哈希分区。

在本发明实施例的又一种具体实现方式中,所述写入单元740可以包括:写入子单元和复制子单元。

所述写入子单元用于将所述N个数据分片及M个校验分片写入所述第一存储节点组的R个存储节点;

所述复制子单元用于将所述第一存储节点组中的R个存储节点存储的所述N个数据分片及M个校验分片复制到所述第二存储节点组中的R个存储节点。

在本发明实施例的又一种具体实现方式中,所述写入单元740还可以包括:第一修复子单元。

所述第一修复子单元用于当所述第一存储节点组中存在写入分片失败时,修复所述第一存储节点组中的存储节点内写入失败的分片;

所述复制子单元还用于将修复后的所述第一存储节点组中的R个存储节点存储的所述N个数据分片及M个校验分片复制到所述第二存储节点组中的R个存储节点。

在本发明实施例的又一种具体实现方式中,所述写入单元740还可以包括:第二修复子单元。

所述第二修复子单元用于当所述第二存储节点组中存在写入分片失败时,修复所述第二存储节点组中写入失败的分片。

本发明实施例还提供了一种分布式存储系统中的计算节点。如图8所示,为本发明实施例提供的一种分布式存储系统中的计算节点的结构框图。该分布式存储系统包括该计算节点和多个存储节点,其中,该计算节点包括处理器810、通信接口820和通信总线830。

通信接口820和处理器810均与通信总线830相连接;

所述通信接口820用于接收数据存储请求,所述数据存储请求携带待存储数据;

所述处理器810用于确定存储所述待存储数据的哈希分区,将所述待存储数据划分为N个数据分片并获得N个数据分片的M个校验分片,将所述N个数据分片及M个校验分片分别写入第一存储节点组和所述第二存储节点组的R个存储节点;所述哈希分区中包含第一存储节点组和第二存储节点组;其中,所述第一存储节点组包含属于第一数据中心的R个存储节点,所述第二存储节点组包含属于第二数据中心的R个存储节点,R为大于2的整数;其中,N和M为正整数,并且N+M=R。

在本发明实施例具体实施的过程中,处理器810包括处理模块8101和存储模块8102。处理模块8101通过运行或执行存储在存储模块8202内的软件程序和/或模块,完成待存储数据的存储过程,具体的,处理模块8101可以为中央处理单元(central processing unit,CPU),存储模块8102为存储器。具体实现中,本领域技术人员可知,处理器也可以为专用芯片,其他实现方式也可以实现本发明实施例中的控制器的实现方式(操作)。如通过现场可编程门阵列(Field Programmable Gate Array,FPGA)或其他硬件执行本发明实施例中处理器的全部实现方式(操作),或者,FPGA或其他硬件与处理器分别执行本发明实施例处理器的部分实现方式(操作),以实现本发明实施例描述的处理器的实现方式(操作)。通信接口具体可以为网络接口卡(Network Interface Card,NIC)、主机总线适配器(Host Bus Adapter,HBA)等,本发明实施例对此不作限定。其中,网络接口卡也称为网卡。

本发明实施例中,所述通信接口接收数据存储请求,所述数据存储请求携带待存储数据;所述处理器确定存储所述待存储数据的哈希分区,将所述待存储数据划分为N个数据分片并获得N个数据分片的M个校验分片,将所述N个数据分片及M个校验分片分别写入第一存储节点组和所述第二存储节点组的R个存储节点;所述哈希分区中包含第一存储节点组和第二存储节点组;其中,所述第一存储节点组包含属于第一数据中心的R个存储节点,所述第二存储节点组包含属于第二数据中心的R个存储节点,R为大于2的整数;其中,N和M为正整数,并且N+M=R。

本发明实施例的技术方案将待存储数据进行分片,且将待存储数据对应的N个数据分片和M个校验分片分别存储在属于第一数据中心的R个存储节点上和属于第二数据中心的R个存储节点上,所以在任一数据中心出现写入分片失败且写入失败的分片数量小于或等于校验分片的数量M时,可根据写入成功的分片修复写入失败的分片,即本发明实施例的技术方案在任一数据中心出现分片写入失败时有一定的修复能力,所以本发明实施例的技术方案提高了数据中心中的数据的可靠性和稳定性。

在本发明实施例的一种具体实现方式中,所述通信接口820接收的数据存储请求还携带关键字Key,所述处理器810具体用于根据所述关键字确定存储所述待存储数据的所述哈希分区。

在本发明实施例的另一种具体实现方式中,所述处理器810用于根据所述分布式存储系统的容错级别分别从所述第一数据中心和所述第二数据中心确定哈希分区。

在本发明实施例的又一种具体实现方式中,所述处理器810具体用于将所述N个数据分片及M个校验分片写入所述第一存储节点组的R个存储节点,将所述第一存储节点组中的R个存储节点存储的所述N个数据分片及M个校验分片复制到所述第二存储节点组中的R个存储节点。

在本发明实施例的又一种具体实现方式中,所述处理器810还用于当所述第一存储节点组中存在写入分片失败时,修复所述第一存储节点组中的存储节点内写入失败的分片,将修复后的所述第一存储节点组中的R个存储节点存储的所述N个数据分片及M个校验分片复制到所述第二存储节点组中的R个存储节点。

在本发明实施例的又一种具体实现方式中,所述处理器810还用于当所述第二存储节点组中存在写入分片失败时,修复所述第二存储节点组中写入失败的分片。

本发明实施例还提供了一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时可执行包括前述图2到图6所示实施例提供的一种数据存储方法和一种数据读取方法的任一实现方式中的部分或全部步骤。

本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统及装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述的本发明实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1