CN110825552B - 数据存储方法、数据恢复方法、节点及存储介质 - Google Patents

数据存储方法、数据恢复方法、节点及存储介质 Download PDF

Info

Publication number
CN110825552B
CN110825552B CN201810922810.0A CN201810922810A CN110825552B CN 110825552 B CN110825552 B CN 110825552B CN 201810922810 A CN201810922810 A CN 201810922810A CN 110825552 B CN110825552 B CN 110825552B
Authority
CN
China
Prior art keywords
data
stripe unit
storage node
metadata
storage
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
Application number
CN201810922810.0A
Other languages
English (en)
Other versions
CN110825552A (zh
Inventor
魏明昌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Cloud Computing Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201810922810.0A priority Critical patent/CN110825552B/zh
Priority to PCT/CN2019/087904 priority patent/WO2020034695A1/zh
Publication of CN110825552A publication Critical patent/CN110825552A/zh
Application granted granted Critical
Publication of CN110825552B publication Critical patent/CN110825552B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1448Management of the data involved in backup or backup restore
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/373Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 with erasure correction and erasure determination, e.g. for packet loss recovery or setting of erasures for the decoding of Reed-Solomon codes

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供了一种数据存储方法,该方法引入了对EC条带中数据块的元数据进行交叉备份的机制,通过将数据块以及交叉备份的元数据,共同存储在数据条带单元中,确保不同存储节点之间会互相存储数据块的元数据,即使某个存储节点的元数据丢失,由于其他存储节点的数据条带单元中预先存储了该存储节点的元数据备份,也可以根据其他存储节点的数据条带单元中,获取该存储节点的缺失元数据,从而降低了元数据丢失的概率,极大地提高了数据存储的可靠性和安全性,从而提升分布式存储系统的存储性能。

Description

数据存储方法、数据恢复方法、节点及存储介质
技术领域
本申请涉及存储技术领域,特别涉及一种数据存储方法、数据恢复方法、节点及存储介质。
背景技术
随着存储技术的发展,目前的分布式存储系统经常使用纠删码(Erasure Code,以下简称:EC)技术,以EC条带的形式来存储数据。每条EC条带由m个数据块和k个校验块组成,数据块用于存储数据,校验块用于恢复数据。当EC条带中丢失数据块时,只要丢失的数据块的总数量不小于k,通过对剩余的数据块和校验块进行EC反编码,就能恢复丢失的数据块,从而极大地提高数据存储的稳定性和可靠性。
针对使用EC技术存储数据的过程,分布式系统通常包括客户端节点、主存储节点以及至少一个备存储节点,客户端节点用于向主存储节点下发数据,主存储节点用于对数据进行EC编码,向至少一个备存储节点发送数据块以及校验块,每个备存储节点用于存储数据块或校验块。具体来说,当客户端节点接收到待存储的数据时,会根据数据的目标存储位置,将数据发送给目标存储位置对应的主存储节点,主存储节点会将数据划分为m个数据块,采用冗余算法,对m个数据块进行EC编码,得到k个校验块,主存储节点自身会存储一个数据块或校验块,在存储成功后,记录已存储的数据块或校验块的元数据,并且,主存储节点会将剩余的m+k-1个数据块和校验块,发送给m+k-1个备存储节点,每个备存储节点会存储一个数据块或校验块,并在存储成功后,记录已存储的数据块或校验块的元数据。
上述方案中仅能保证数据块的安全性,而数据块的元数据的安全性较差。
发明内容
本申请实施例提供了一种数据存储方法、数据恢复方法、节点及存储介质,能够解决相关技术中存储数据块的元数据的安全性较差的问题。所述技术方案如下:
第一方面,提供了一种数据存储方法,所述方法包括:
根据待存储的至少一个数据块,生成至少一个数据条带单元,每个数据条带单元包括数据块以及交叉备份的元数据,所述交叉备份的元数据包括所述数据条带单元的数据块的元数据和所述数据条带单元以外的其他数据条带单元包括的数据块的元数据;
对所述至少一个数据条带单元进行纠删码EC编码,得到至少一个校验条带单元;
将所述至少一个数据条带单元以及所述至少一个校验条带单元,分发至至少一个存储节点。
本实施例提供的方法,引入了对EC条带中数据块的元数据进行交叉备份的机制,通过将数据块以及交叉备份的元数据,共同存储在数据条带单元中,确保不同存储节点之间会互相存储数据块的元数据,即使某个存储节点的元数据丢失,由于其他存储节点的数据条带单元中预先存储了该存储节点的元数据备份,也可以根据其他存储节点的数据条带单元中,获取该存储节点的缺失元数据,从而降低了元数据丢失的概率,极大地提高了数据存储的可靠性和安全性,从而提升分布式存储系统的存储性能。
可选地,所述根据待存储的至少一个数据块,生成至少一个数据条带单元,包括:
对所述至少一个数据块的元数据进行备份,得到至少一个元数据备份,所述至少一个数据块和所述至少一个元数据备份一一对应;
对于所述至少一个数据块中的数据块,从所述至少一个元数据备份中,选取所述数据块对应的至少一个目标元数据备份;
根据所述数据块、所述数据块的元数据以及所述至少一个目标元数据备份,生成数据条带单元。
可选地,所述从所述至少一个元数据备份中,选取所述数据块对应的至少一个目标元数据备份,包括:
根据所述数据块对应的第一存储节点,查询存储节点之间的交叉备份关系,得到所述第一存储节点对应的至少一个第二存储节点;
确定所述至少一个第二存储节点对应的数据块的元数据备份,作为所述至少一个目标元数据备份。
可选地,所述对所述至少一个数据条带单元进行纠删码EC编码,得到至少一个校验条带单元,包括下述至少一个步骤:
对所述至少一个数据条带单元中的数据块进行EC编码,得到所述至少一个校验条带单元中的校验块;
对所述至少一个数据条带单元中的元数据进行EC编码,得到所述至少一个校验条带单元中的元数据校验块。
基于这种方式,通过对每个数据条带单元中的元数据进行EC编码,可以进一步提高元数据存储的可靠性和安全性。具体来说,当任一数据条带单元中的元数据丢失时,不仅可以通过其他数据条带单元存储的交叉备份的元数据,读取和恢复丢失的元数据,也可以通过对其他数据条带单元中的元数据以及元数据校验块进行EC反编码,读取和恢复丢失的元数据,从而进一步降低元数据损失的概率,极大地提高存储元数据的可靠性和安全性。
可选地,所述将所述至少一个数据条带单元以及所述至少一个校验条带单元,分发至少一个存储节点,包括:
向每个存储节点发送对应的数据条带单元和/或校验条带单元。
基于这种方式,通过由客户端节点向每个存储节点发送对应的数据条带单元和/或校验条带单元,待存储的数据只需经过客户端节点与存储节点之间的一跳转发,即可到达每个存储节点,从而在每个存储节点上进行存储,而无需先经过客户端节点到达主存储节点,再从主存储节点到达每个备存储节点,也就避免了数据要经过两跳转发,才能到达每个存储节点的情况,节省了主存储节点的转发所导致的网络时延,从而降低了存储数据的时延,提高存储数据的效率,加快存储数据的速度,从而极大地提升了分布式存储系统的存储性能。
可选地,所述将所述至少一个数据条带单元以及所述至少一个校验条带单元,分发至少一个存储节点之后,所述方法还包括:
接收所述至少一个存储节点发送的第一写完成消息;
向目标应用或外部主机发送第二写完成消息,所述第一写完成消息用于指示对应的存储节点已存储数据条带单元和/或校验条带单元,所述第二写完成消息用于指示已向目标存储位置写入所述数据。
可选地,所述将所述至少一个数据条带单元以及所述至少一个校验条带单元,分发至少一个存储节点,包括:
确定所述至少一个存储节点中的第三存储节点处于亚健康状态;
向所述至少一个存储节点中的第四存储节点,发送对应的数据条带单元和/或校验条带单元。
基于这种可选方式,如果某个存储节点处于亚健康状态,在存储数据时可以立即避开处于亚健康状态的存储节点,而通过其它存储节点来进行数据存储,从而实现存储节点之间快速切换,降低了存储节点的亚健康状态对存储系统性能的影响,保证即使存储节点处于亚健康状态,存储系统也可以快速存储数据,从而保证存储系统的可靠性和稳定性。
可选地,所述向所述至少一个存储节点中的第四存储节点,发送对应的数据条带单元和/或校验条带单元,包括下述至少一个步骤:
向所述第四存储节点,发送所述第三存储节点对应的第一数据条带单元以外的至少一个第二数据条带单元以及所述至少一个校验条带单元;
向所述第四存储节点,发送所述第三存储节点对应的第一校验条带单元以外的至少一个第二校验条带单元以及所述至少一个数据条带单元。
基于这种实现方式,通过对待存储的数据进行降级写,当某个存储节点处于亚健康状态时,可以立即避开该存储节点,分发该存储节点对应的数据条带单元和/或校验条带单元以外的数据条带单元和/或校验条带单元,从而实现亚健康状态下的快速切换。
可选地,所述向所述至少一个存储节点中的第四存储节点,发送所述第三存储节点对应的第一数据条带单元以外的至少一个第二数据条带单元以及所述至少一个校验条带单元之后,所述方法还包括:
当接收到读请求时,向第五存储节点发送所述读请求,所述读请求用于指示读取所述第一数据条带单元的数据块,所述第五存储节点存储的交叉备份的元数据包括所述第一数据条带单元的数据块的元数据。
可选地,所述向第五存储节点发送所述读请求发送所述读请求之前,所述方法还包括:
查询存储节点之间的交叉备份关系,确定所述第三存储节点对应的第五存储节点。
可选地,所述向所述至少一个存储节点中的第四存储节点,发送所述第三存储节点对应的第一数据条带单元以外的至少一个第二数据条带单元以及所述至少一个校验条带单元,包括下述至少一个步骤:
向所述至少一个第二数据条带单元写入所述第三存储节点的亚健康标记,所述亚健康标记用于指示所述第三存储节点处于亚健康状态;
向所述第四存储节点发送写请求,所述写请求携带所述第三存储节点的亚健康标记以及所述第四存储节点对应的第二数据条带单元。
可选地,所述向第四存储节点,发送对应的数据条带单元和/或校验条带单元之后,所述方法还包括:
当接收到所述至少一个第四存储节点发送的第一写完成消息时,向目标应用或外部主机发送第二写完成消息。
第二方面,提供了一种数据恢复方法,所述方法包括:
存储至少一个数据条带单元,每个数据条带单元包括数据块以及交叉备份的元数据,所述交叉备份的元数据包括所述数据条带单元的数据块的元数据和所述数据条带单元以外的其他数据条带单元包括的数据块的元数据;
根据所述至少一个数据条带单元,获取第三存储节点的缺失元数据;
向所述第三存储节点发送所述缺失元数据。
本实施例提供的方法,引入了对EC条带中数据块的元数据进行交叉备份的机制,通过将数据块以及交叉备份的元数据,共同存储在数据条带单元中,确保不同存储节点之间会互相存储数据块的元数据,即使某个存储节点的元数据丢失,由于其他存储节点的数据条带单元中预先存储了该存储节点的元数据备份,其他存储节点可以根据自身存储的数据条带单元,获取该存储节点的缺失元数据,将该存储节点的缺失元数据同步给该存储节点,从而降低了元数据丢失的概率,极大地提高了数据存储的可靠性和安全性,从而提升分布式存储系统的存储性能。
可选地,所述根据所述至少一个数据条带单元,获取第三存储节点的缺失元数据,包括:
从所述至少一个数据条带单元中,选取至少一个第二数据条带单元,所述第二数据条带单元的存储时间属于所述第三存储节点处于亚健康状态期间;
根据所述至少一个第二数据条带单元中的交叉备份的元数据,确定所述缺失元数据。
可选地,所述从所述至少一个数据条带单元中,选取至少一个第二数据条带单元,包括下述至少一个步骤:
根据所述第三存储节点的标识,查询亚健康日志,得到所述至少一个第二数据条带单元,所述亚健康日志用于指示在所述第三存储节点处于亚健康状态期间存储的数据条带单元;
选取具有所述第三存储节点的亚健康标记的数据条带单元,作为所述至少一个第二数据条带单元,所述亚健康标记用于指示所述第三存储节点处于亚健康状态。
可选地,所述根据所述第三存储节点的标识,查询亚健康日志之前,所述方法还包括:
在所述第三存储节点处于亚健康状态期间,为所述第三存储节点记录所述亚健康日志。
基于这种可选方式,如果某个存储节点由于亚健康闪断而缺失元数据,当该存储节点处于亚健康恢复状态时,其他存储节点即可根据本地记录的亚健康日志中记录的元数据差异,将该存储节点的缺失元数据同步到从亚健康恢复正常的存储节点上,从而实现存储节点从亚健康状态恢复后可以自动地恢复缺失元数据,降低了存储节点处于亚健康状态对存储系统性能的影响,保证分布式存储系统的高稳定性和高可靠性。
可选地,所述在所述第三存储节点处于亚健康状态期间,为所述第三存储节点记录所述亚健康日志,包括下述至少一个步骤:
当接收到的写请求携带所述第三存储节点的亚健康标记以及数据条带单元时,向所述亚健康日志,写入所述第三存储节点对应的亚健康记录;
当接收到的数据条带单元携带所述第三存储节点的亚健康标记时,向所述亚健康日志,写入所述第三存储节点对应的亚健康记录。
可选地,所述根据所述至少一个数据条带单元,确定第三存储节点的缺失元数据之前,所述方法还包括:
接收亚健康恢复消息,所述亚健康恢复消息用于指示所述第三存储节点处于亚健康恢复状态。
第三方面,提供一种客户端节点,用于执行上述数据存储方法。具体地,该客户端节点包括用于执行上述第一方面或第一方面的任一种可选方式所述的数据存储方法的功能模块。
第四方面,提供一种存储节点,用于执行上述数据恢复方法。具体地,该存储节点包括用于执行上述第二方面或第二方面的任一种可选方式所述的数据恢复方法的功能模块。
第五方面,提供一种客户端节点,所述客户端节点包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现上述第一方面或第一方面的任一种可选方式所述的数据存储方法所执行的操作。
第六方面,提供一种存储节点,所述存储节点包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现上述第二方面或第二方面的任一种可选方式所述的数据恢复方法所执行的操作。
第七方面,提供一种非瞬态的计算机可读存储介质,所述存储介质中存储有至少一条指令,所述指令由处理器加载并执行以实现上述第一方面或第一方面的任一种可选方式所述的数据存储方法所执行的操作。
第八方面,提供一种非瞬态的计算机可读存储介质,所述存储介质中存储有至少一条指令,所述指令由处理器加载并执行以实现上述第二方面或第二方面的任一种可选方式所述的数据恢复方法所执行的操作。
第九方面,提供了一种包含指令的计算机程序产品,当其在客户端节点上运行时,使得该客户端节点能够实现上述第一方面或第一方面的任一种可选方式所述的数据存储方法所执行的操作。
第十方面,提供了一种包含指令的计算机程序产品,当其在存储节点上运行时,使得该存储节点能够实现上述第二方面或第二方面的任一种可选方式所述的数据恢复方法所执行的操作。
第十一方面,提供一种数据存储系统,在一种可能的实现方式中,所述系统包括:
第三方面所述的客户端节点和第四方面所述的存储节点。
在另一种可能的实现方式中,所述系统包括:
第五方面所述的客户端节点和第六方面所述的存储节点。
第十二方面,提供了一种芯片,所述芯片包括处理器和/或程序指令,当所述芯片运行时,实现上述第一方面或第一方面的任一种可选方式所述的数据存储方法所执行的操作。
第十三方面,提供了一种芯片,所述芯片包括处理器和/或程序指令,当所述芯片运行时,实现上述第二方面或第二方面的任一种可选方式所述的数据恢复方法所执行的操作。
附图说明
图1是本申请实施例提供的一种分布式存储系统的系统架构图;
图2是本申请实施例提供的一种客户端节点的结构示意图;
图3是本申请实施例提供的一种存储节点的结构示意图;
图4是本申请实施例提供的一种数据存储方法的流程图;
图5是本申请实施例提供的一种数据存储的示意图;
图6是本申请实施例提供的一种数据存储方法的流程图;
图7是本申请实施例提供的一种数据存储的示意图;
图8是本申请实施例提供的一种数据恢复方法的流程图;
图9是本申请实施例提供的一种数据存储的示意图;
图10是本申请实施例提供的一种客户端节点的结构示意图;
图11是本申请实施例提供的一种存储节点的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
以下对本申请涉及的术语进行解释:
交叉备份:是一种不同存储节点之间互相存储数据备份的技术。例如,节点A、节点B和节点C之间进行交叉备份时,节点A可以存储节点A的数据和节点B的数据备份,节点B可以存储节点B的数据和节点C的数据备份,节点C可以存储节点C的数据和节点A的数据备份。通过交叉备份,即使某个节点丢失数据,仍可以从其他节点读取数据备份,从而恢复自身的数据。
三副本技术:是一种对数据进行冗余存储的技术,通过将一份数据复制成为三个副本,将三个副本分别存储于三个存储节点,来进行数据存储。采用三副本技术,当某个副本丢失时,可以通过对其他副本进行复制,恢复丢失的副本。采用三副本技术,每份数据会占用3倍的存储空间以进行存储,因此磁盘利用率为1/3。
EC技术:是一种对数据进行冗余存储的技术,通过纠删码算法对原始的数据进行编码,得到冗余的校验块,将各个数据块和校验块分别存储在不同的存储节点上,来存储数据。具体来说,会将待存储的数据切分为m个数据块,采用冗余算法,对m个数据块进行EC编码,生成k个校验块,该m个数据块以及k个校验块组成一个EC条带,每个数据块或每个校验块可以称为EC条带中的一个EC block(块),可以将每个EC block分发至不同的存储节点以进行存储。每个EC条带中最多可以容忍k个EC block的丢失,一旦任一存储节点故障,只要故障的存储节点不超过k个,就可以根据非故障的存储节点上的EC block,恢复故障节点上存储的EC block,因此采用EC技术存储数据的分布式存储系统会具有很高的可靠性。并且,使用EC技术存储数据,相比三副本技术来说,可以极大地节约存储空间。具体来说,采用三副本技术,需要三倍的存储空间才能存储一份数据,而采用EC技术,只需要1.4倍的存储空间即可存储一份数据。
图1是本申请实施例提供的一种分布式存储系统的系统架构图,该分布式存储系统包括客户端节点、至少一个存储节点、元数据控制器(Meta Data Controller,以下简称:MDC)节点、云服务器(Elastic Compute Service,以下简称:ECS)服务节点以及云硬盘备份(Volume Backup Service,以下简称:VBS)节点。图1提供的系统可以为客户提供对象存储服务。
客户端节点也称存储客户端或client节点,客户端节点可以与上层应用或外部主机交互,可以接收上层应用或外部主机的数据,将数据分发至存储节点,以进行数据存储。客户端节点可以是服务器、个人计算机(personal computer,以下简称:PC)、笔记本电脑等等,客户端节点可以是一个独立的设备,例如可以是一个设备上的一个或多个程序模块,又如可以是一个设备上运行的虚拟机或容器,客户端节点也可以是多个设备组成的集群,例如可以是分布在多台设备上的多个程序模块的统称。
存储节点可以存储数据条带单元和/或校验条带单元,接收读请求和/或写请求,访问存储在本地的数据以及元数据。存储节点可以是对象存储(Object-based Storage,以下简称:OSD)节点、网络附属存储(Network Attached Storage,以下简称:NAS)节点、存储区域网络(Storage Area Network,以下简称:SAN)节点等,存储节点可以是服务器、PC、笔记本电脑等,存储节点存储数据的方式包括而不限于对象存储、块存储、文件存储等,存储节点可以是物理存储节点,也可以是物理存储节点划分得到的逻辑存储节点。
MDC节点可以用于维护分区视图,该分区视图可以包括分区与存储节点之间的映射关系以及每个存储节点的当前状态,当分区视图变化时,可以将变化的分区视图同步到客户端节点以及每个存储节点。MDC节点可以是服务器、PC、笔记本电脑等,MDC节点可以是一个独立的设备,例如可以是一个设备上的一个或多个程序模块,又如可以是一个设备上运行的虚拟机或容器,也可以是多个设备组成的集群,例如可以是分布在多台设备上的多个程序模块的统称。
ECS节点用于分配空白EC条带,将空白EC条带发送给客户端节点,以使客户端节点向空白EC条带写入数据。ECS节点可以是一个独立的设备,例如可以是一个设备上的一个或多个程序模块,又如可以是一个设备上运行的虚拟机或容器,也可以是多个设备组成的集群,例如可以是分布在多台设备上的多个程序模块的统称。
VBS节点可以向上层应用或外部主机提供虚拟硬盘的功能,VBS节点可以接收上层应用或外部主机的读请求或写请求。VBS节点可以是一个独立的设备,例如可以是一个设备上的一个或多个程序模块,又如可以是一个设备上运行的虚拟机或容器,也可以是多个设备组成的集群,例如可以是分布在多台设备上的多个程序模块的统称。
图2是本申请实施例提供的一种客户端节点的结构示意图,该客户端节点200可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(CentralProcessing Units,简称:CPU)201和一个或一个以上的存储器202,其中,存储器202中存储有至少一条指令,至少一条指令由处理器201加载并执行以实现下述各个方法实施例中的数据存储方法。当然,该客户端节点200还可以具有有线或无线网络接口以及输入输出接口等部件,以便进行输入输出,该客户端节点200还可以包括其他用于实现设备功能的部件,在此不做赘述。
在示例性实施例中,还提供了一种非瞬态的计算机可读存储介质,例如包括指令的存储器,上述指令可由客户端节点中的处理器执行以完成下述实施例中的数据存储方法。例如,计算机可读存储介质可以是只读存储器(Read-Only Memory,以下简称:ROM)、随机存取存储器(Random Access Memory,以下简称:RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
图3是本申请实施例提供的一种存储节点的结构示意图,该存储节点300可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(Central ProcessingUnits,简称:CPU)301和一个或一个以上的存储器302,其中,该一个或一个以上的存储器302可以为存储节点上挂载的硬盘,该硬盘可以是逻辑上的虚拟硬盘,也可以是物理上的实体硬盘。该一个或一个以上存储器302中存储有至少一条指令,至少一条指令由处理器301加载并执行以实现下述各个方法实施例中的数据恢复方法。当然,该存储节点还可以具有有线或无线网络接口以及输入输出接口等部件,以便进行输入输出,该存储节点300还可以包括其他用于实现设备功能的部件,在此不做赘述。
在示例性实施例中,还提供了一种非瞬态的计算机可读存储介质,例如包括指令的存储器,上述指令可由存储节点中的处理器执行以完成下述实施例中的数据恢复方法。例如,计算机可读存储介质可以是只读存储器(Read-Only Memory,以下简称:ROM)、随机存取存储器(Random Access Memory,以下简称:RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
图4是本申请实施例提供的一种数据存储方法的流程图,如图4所示,该方法的交互主体包括客户端节点以及至少一个存储节点,包括以下步骤:
401、客户端节点获取至少一个空白EC条带,每个空白EC条带用于承载至少一个数据条带单元以及至少一个校验条带单元。
客户端节点即client节点,在分布式存储系统中,客户端节点可以与上层应用或外部主机交互,可以接收上层应用或外部主机的数据,将数据分发给各个存储节点以进行存储。客户端节点可以是服务器、个人电脑、笔记本电脑等,客户端节点可以是一个独立的设备,例如可以是一个设备上的一个或多个程序模块,又如可以是一个设备上运行的虚拟机或容器,客户端节点也可以是多个设备组成的集群,例如可以是分布在多台设备上的多个程序模块的统称,本实施例对客户端节点的物理形态不做限定。
客户端节点可以获取至少一个空白EC条带,以便在存储数据时,向空白EC条带写入数据块、校验块以及元数据。其中,每个空白EC条带可以看做一行空白的数据块,每个空白EC条带可以携带条带标识以及至少一个条带单元标识,条带标识用于标识对应的EC条带,可以是EC条带的身份标识号码(Identification,以下简称:ID),例如可以是EC条带的编号、名称等。条带单元标识用于标识对应的条带单元,可以是条带单元的ID,例如可以是条带单元的编号、名称等。
关于获取空白EC条带的方式,可选地,可以由ECS服务为客户端节点分配至少一个空白EC条带,向客户端节点发送分配的至少一个空白EC条带,客户端节点可以接收ECS服务的至少一个空白EC条带,从而得到至少一个空白EC条带。可选地,分布式存储系统可以包括多个客户端节点,ECS服务可以为每个客户端节点分配对应的空白EC条带,向每个客户端节点发送对应的空白EC条带。其中,为不同客户端节点分配的空白EC条带的条带标识可以不同,例如为客户端节点1分配空白EC条带(1)至空白EC条带(100),为客户端节点2分配空白EC条带(101)至空白EC条带(200)。
需要说明的是,本步骤401仅是可选步骤,而非必选步骤,本实施例对是否执行步骤401不做限定。可选地,客户端节点也可以无需执行获取空白EC条带的步骤,例如,可以预先存储至少一个空白EC条带,在存储数据时,向预先存储的空白EC条带写入数据即可。又如,可以无需使用空白EC条带来存储数据,而是在存储数据时,向已经写入数据的老EC条带,覆盖写入待存储的数据,从而通过复用老EC条带来存储数据。
402、客户端节点获取待存储的数据以及数据的目标存储位置。
待存储的数据可以是输入/输出(Input/Output,以下简称:IO)数据,即向分布式存储系统输入和/或输出的数据。目标存储位置是指数据需要存储到的位置,通过获取数据的目标存储位置,可以确定要在哪个位置存储数据,以便在后续读数据时,可以从目标存储位置读取存储的数据。可选地,分布式存储系统的存储空间可以作为一个或多个逻辑卷,每个逻辑卷可以划分为多个逻辑块,可以使用一个或多个逻辑区块来存储数据,则目标存储位置可以是逻辑区块地址(Logical Block Address,以下简称:LBA),可以包括起始LBA地址和数据长度。另外,目标存储位置也可以是逻辑区块的标识,例如可以是逻辑区块的key。
关于获取待存储的数据以及目标存储位置的过程,可选地,客户端节点可以接收写请求,解析写请求,得到写请求携带的数据以及目标存储位置。其中,可以由上层应用、外部主机或VBS节点生成写请求,向客户端节点发送写请求,以使客户端节点接收到上层应用、外部主机或VBS节点的写请求。可选地,该写请求可以由用户的输入操作触发。
可选地,客户端节点可以对待存储的数据进行划分,得到至少一个待存储的数据块。数据块是指以块为粒度,对数据进行划分后得到的数据,举例来说,数据块可以是图5中的GRAIN(数据块)数据1、GRAIN数据2或GRAIN数据3。
需要说明的是,本步骤402仅是可选步骤,而非必选步骤,在一个可能的实施例中,客户端节点可以预先存储待存储的至少一个数据块,则客户端节点可以根据预先存储的至少一个数据块,直接执行后续步骤403。
403、客户端节点根据待存储的至少一个数据块,生成至少一个数据条带单元,每个数据条带单元包括数据块以及交叉备份的元数据。
数据块的元数据(Metadata)是指用于描述数据块的数据,数据块的元数据能够索引至对应的数据块。数据块的元数据可以是目标存储位置与条带单元标识之间的映射关系,例如,可以是LBA与条带单元标识之间的映射关系。举例来说,请参见图5,元数据可以是图5中的GRAIN元数据1、GRAIN元数据2或GRAIN元数据3,其中GRAIN元数据1为GRAIN数据1的元数据,GRAIN元数据1的内容可以是条带单元1与LBA1之间的映射关系,GRAIN元数据2为GRAIN数据2的元数据,GRAIN元数据2的内容可以是条带单元2与LBA2之间的映射关系,以此类推。
条带单元:是指EC条带的单元,为EC条带的组成部分,条带单元也称EC分条。EC条带与条带单元为整体与部分的关系,每个EC条带中可以包括至少一个条带单元,例如可以包括5个条带单元、7个条带单元等。EC条带可以看作一行数据块,则条带单元可以看做EC条带中的一列数据块。举例来说,请参见图5,图5提供了一个EC条带的示例,该EC条带包括5个条带单元,即条带单元1、条带单元2、条带单元3、条带单元4和条带单元5。
条带单元用于存储EC条带中的数据,按照其存储数据的不同,本实施例中,将EC条带中用于存储数据块以及交叉备份的元数据的条带单元,称为数据条带单元,将EC条带中用于存储校验块、元数据校验块中的至少一项的条带单元,称为校验条带单元,EC条带中可以包括至少一个数据条带单元以及至少一个校验条带单元,EC条带中数据条带单元以及校验条带单元的数量可以根据EC编码算法确定,举例来说,EC条带可以包括3个数据条带单元和2个校验条带单元。
交叉备份的元数据包括数据条带单元的数据块的元数据和数据条带单元以外的其他数据条带单元包括的数据块的元数据。对于任一数据条带单元来说,该数据条带单元中的交叉备份的元数据,包括该数据条带单元自身存储的数据块的元数据,也会包含其他的一条或多条数据条带单元存储的数据块的元数据。
举例来说,请参见图5,交叉备份的元数据可以为图5的加粗方框中的部分,数据条带单元1存储的数据块为GRAIN数据1,交叉备份的元数据包括GRAIN元数据1(GRAIN数据1的元数据)、GRAIN元数据2(GRAIN数据2的元数据)和GRAIN元数据3(GRAIN数据3的元数据),因此数据条带单元1不仅存储了数据条带单元1本身存储的数据块的元数据(GRAIN元数据1),也存储了数据条带单元2存储的数据块的元数据(GRAIN元数据2)以及数据条带单元3存储的数据块的元数据(GRAIN元数据3)。同理地,数据条带单元2存储的数据块为GRAIN数据2,交叉备份的元数据包括GRAIN元数据2(GRAIN数据2的元数据)、GRAIN元数据1(GRAIN数据1的元数据)和GRAIN元数据3(GRAIN数据3的元数据),因此数据条带单元2不仅存储了数据条带单元2本身存储的数据块的元数据(GRAIN元数据2),也存储了数据条带单元1存储的数据块的元数据(GRAIN元数据1)以及数据条带单元3存储的数据块的元数据(GRAIN元数据3)。
可选地,交叉备份的元数据可以分为以下(1)至(2)两种类型:
(1)交叉备份的元数据可以包括待存储的所有数据块的元数据,相应地,至少一个数据条带单元的交叉备份的元数据可以相同,每个数据条带单元均存储所有数据条带单元中数据块的元数据。例如,假设数据划分为m个数据块,则交叉备份的元数据可以为m个数据块的元数据,也即是,每个数据条带单元均存储m个数据块的元数据。
示例性地,请参见图5,假设数据划分为3个数据块,则数据条带单元1、数据条带单元2以及数据条带单元3中交叉备份的元数据可以均相同,为这3个数据块的元数据。
基于(1),每个数据条带单元会存储所有数据条带单元的数据块的元数据,如果某个数据条带单元的数据块的元数据丢失,可以从剩余的任一数据条带单元中,读取和恢复丢失的元数据,从而提高元数据存储的可靠性和安全性,从而提高分布式存储系统的可用性。
(2)交叉备份的元数据可以包括待存储的部分数据块的元数据,相应地,每个数据条带单元可以存储部分数据条带单元中数据块的元数据。例如,假设数据划分为m个数据块,则交叉备份的元数据可以包括至少两个数据块的元数据,也即是,每个数据条带单元均存储至少两个数据块的元数据。
可选地,交叉备份的元数据可以包括相邻的一条或多条数据条带单元中数据块的元数据,例如可以包括上一个数据条带单元的数据块的元数据和下一个数据条带单元的数据块的元数据。示例性地,第i个数据条带单元的交叉备份的元数据中,可以包括第i个数据条带单元的数据块的元数据、第i-1个数据条带单元的数据块的元数据以及第i+1个数据条带单元的数据块的元数据。
基于(2),每个数据条带单元可以存储部分数据条带单元的数据块的元数据,可以节约分布式存储系统的存储空间。
需要说明的是,数据条带单元中交叉备份的元数据如上述(1)还是如上述(2)可以根据需求设计,另外交叉备份的元数据具体包括多少数据块的元数据,以及具体包括哪几个数据块的元数据均可以根据实际需求设计,本实施例对此不做限定。
数据条带单元是指EC条带中用于存储数据块以及交叉备份的元数据的条带单元,可以是EC条带中的一个EC block,每个数据条带单元可以包括一个数据块。示例性地,请参见图5,数据条带单元可以是条带单元1、条带单元2或条带单元3。每个EC条带中可以包括至少一个数据条带单元,一个EC条带中数据条带单元的数量可以等于数据块的数量。举例来说,假设待存储的数据划分为m个数据块,则该数据的EC条带中可以包括m个数据条带单元。
可选的,对于任一数据条带单元来说,该数据条带单元中的交叉备份的元数据可以由该数据条带单元中数据块的元数据以及至少一个目标元数据备份组成,该至少一个目标元数据备份是指该数据条带单元以外的其他数据条带单元的数据块的元数据备份。具体来说,生成任一条数据条带单元的过程可以包括以下步骤一至步骤三:
步骤一、对至少一个数据块的元数据进行备份,得到至少一个元数据备份,该至少一个数据块和该至少一个元数据备份一一对应。
对于该至少一个数据块中的每个数据块,可以确定该数据块的元数据,对数据块的元数据进行备份,得到该数据块的元数据的元数据备份,依次类推,对于每个数据块的元数据均进行备份,可以得到与至少一个数据块一一对应的至少一个元数据备份。举例来说,请参见图5,GRAIN数据1的元数据备份为GRAIN元数据1,GRAIN数据2的元数据备份为GRAIN元数据2。
其中,关于确定数据块的元数据的过程,可以根据每个数据条带单元对应的目标存储位置以及每个数据条带单元的条带单元标识,记录目标存储位置与条带单元标识之间的映射关系,作为数据块的元数据。
步骤二、对于至少一个数据块中的数据块,从至少一个元数据备份中,选取数据块对应的至少一个目标元数据备份。
可选地,本步骤具体可以包括以下步骤(2.1)至步骤(2.2):
步骤(2.1)根据数据块对应的第一存储节点,查询存储节点之间的交叉备份关系,得到第一存储节点对应的至少一个第二存储节点。
为了区分描述,将分布式存储系统的任一个存储节点称为第一存储节点,与第一存储节点存在交叉备份关系的存储节点称为第二存储节点。需要说明的是,术语“第一存储节点”以及“第二存储节点”仅是为了区分描述不同的存储节点,而不应理解为明示或暗示存储节点之间的顺序、相对重要性以及存储节点的总数量。
交叉备份关系是指各个存储节点互相存储元数据备份的关系,交叉备份关系至少可以具有两个功能。第一,在存储数据时,交叉备份关系能够确定任一存储节点存储哪几个存储节点的元数据备份,以便根据交叉备份关系,确定每个存储节点需要存储的交叉备份的元数据。例如,假设交叉备份关系指示OSD节点1要存储OSD节点2和OSD节点3的元数据备份,则存储数据时,可以在OSD节点1的数据条带单元中,存储OSD节点2和OSD节点3的元数据备份。第二,在恢复数据时,交叉备份关系能够确定任一元数据备份存储在哪几个存储节点,以便根据交叉备份关系,从相应的存储节点存储的交叉备份的元数据中,读取元数据备份。例如,假设交叉备份关系指示OSD节点1的元数据备份存储于OSD节点2和OSD节点3,则当OSD节点1的元数据丢失时,可以从OSD节点2和OSD节点3读取OSD节点1的元数据备份。
交叉备份关系的数据形式可以根据实际需求设计,举例来说,交叉备份关系可以包括以下(1)和(2)中的一种或多种:
(1)交叉备份关系可以是存储节点的标识之间的映射关系,交叉备份关系可以包括多个存储节点的标识。相应地,确定至少一个第二存储节点的过程可以包括:将第一存储节点的标识作为索引,查询交叉备份关系,得到至少一个第二存储节点的标识,根据至少一个第二存储节点的标识,确定至少一个第二存储节点。其中,存储节点的标识用于标识对应的存储节点,可以包括存储节点的ID、名称、编号等。
(2)交叉备份关系可以是条带单元标识之间的映射关系,交叉备份关系可以包括多个数据条带单元的条带单元标识。以第一存储节点对应的数据条带单元称为第一数据条带单元,第二存储节点对应的数据条带单元称为第二数据条带单元为例,确定至少一个第二存储节点的过程可以包括:根据第一存储节点,确定第一数据条带单元的条带单元标识,将第一数据条带单元的条带单元标识作为索引,查询交叉备份关系,得到至少一个第二数据条带单元的条带单元标识,确定该至少一个第二数据条带单元的条带单元标识对应的存储节点的标识,得到至少一个第二存储节点的标识,根据至少一个第二存储节点的标识,确定至少一个第二存储节点。
可选地,可以由MDC节点记录交叉备份关系,将交叉备份关系发送给客户端节点。例如,MDC节点可以在分区视图中记录交叉备份关系,将分区视图发送给客户端节点,客户端节点可以查询分区视图,得到分区视图中的交叉备份关系。
步骤(2.2)确定至少一个第二存储节点对应的数据块的元数据备份,作为至少一个目标元数据备份。
当确定至少一个第二存储节点以后,可以从生成的至少一个元数据备份中,选取至少一个第二存储节点对应的数据块的元数据备份,作为至少一个目标元数据备份。例如,假设第一存储节点为OSD节点1,根据存储节点之间的交叉备份关系,确定交叉备份关系中OSD节点1对应的OSD节点为OSD节点2和OSD节点3,则确定OSD节点2和OSD节点3的数据块的元数据备份,得到GRAIN元数据2和GRAIN元数据3,将GRAIN元数据2和GRAIN元数据3,作为OSD节点1的目标元数据备份。
需要说明的是,根据交叉备份关系来选取目标元数据备份仅是选取目标元数据备份的可选方式,而非选取目标元数据备份的必选方式,可选地,也可以根据其他方式选取目标元数据备份,例如,对于任一数据条带单元来说,可以将所有数据块的元数据备份均作为目标元数据备份,以便在数据条带单元中存储所有数据条带单元的数据块的元数据。
步骤三、根据数据块、数据块的元数据以及至少一个目标元数据备份,生成数据条带单元。
具体来说,可以向EC条带中的任一条带单元,写入数据块、数据块的元数据以及至少一个目标元数据备份,将写入完成后的条带单元作为数据条带单元,其中,该数据条带单元承载了数据块、数据块的元数据以及至少一个目标元数据备份,该数据块的元数据以及至少一个目标元数据备份即为交叉备份的元数据。
可选地,可以向任一空白EC条带中的任一空白条带单元,写入数据块、数据块的元数据以及至少一个目标元数据备份,从而根据空白条带单元来生成数据条带单元。也可以在已写入数据的EC条带中的任一条带单元上进行覆盖写,从而根据已写入数据的条带单元来生成数据条带单元,本实施例对此不做限定。
综上所述,以上提供了生成EC条带中的一个数据条带单元的示例,依次类推,可以通过重复执行上述步骤,生成EC条带中的每个数据条带单元。其中,一个EC条带可以看做一行数据块,每个数据条带单元可以看做这行数据块中的一列数据块。举例来说,请参见图5,假设将数据划分为3个数据块,分别是GRAIN数据1、GRAIN数据2和GRAIN数据3,可以生成3个数据条带单元,分别是数据条带单元1、数据条带单元2以及数据条带单元3,数据条带单元1承载GRAIN数据1以及交叉备份的元数据1,数据条带单元2承载GRAIN数据2以及交叉备份的元数据2,数据条带单元3承载GRAIN数据3以及交叉备份的元数据3。
本实施例中,通过使用交叉备份技术,对数据块的元数据进行交叉备份,向每个数据条带单元写完成后,不同数据条带单元之间会互相存储数据块的元数据,因此将每个数据条带单元分发至每个存储节点后,不同存储节点之间会互相存储数据块的元数据,那么即使某个存储节点丢失了数据块的元数据,仍可以从其他存储节点读取并恢复丢失的数据块的元数据,提高了元数据存储的可靠性和安全性,从而保证分布式存储系统的高可用性、高可靠性。
例如,请参见图5,OSD节点1、OSD节点2和OSD节点3互相存储数据块的元数据,即使OSD节点1丢失了GRAIN元数据1,由于OSD节点2和OSD节点3预先存储了GRAIN元数据1,因此仍然可以从OSD节点2和OSD节点3读取和恢复GRAIN元数据1。同理地,即使OSD节点2丢失了GRAIN元数据2,由于OSD节点1和OSD节点3预先存储了GRAIN元数据2,因此仍然可以从OSD节点1和OSD节点3读取和恢复GRAIN元数据2。
404、客户端节点对至少一个数据条带单元进行EC编码,得到至少一个校验条带单元。
校验条带单元用于恢复数据条带单元,能够保证存储数据条带单元的可靠性和安全性。具体来讲,若一个或多个数据条带单元丢失,只要丢失的数据条带单元的数量小于校验条带单元的总数量,即可通过对剩余的数据条带单元以及校验条带单元进行EC反编码,恢复丢失的数据条带单元。举例来说,请参见图5,校验条带单元可以是图5中的校验条带单元1和校验条带单元2。
校验条带单元可以称为EC条带的校验保护,校验条带单元可以包括校验块以及元数据校验块,例如,可以包括一个或多个校验块以及一个或多个元数据校验块。校验块可以根据至少一个数据条带单元中的数据块进行EC编码得到,校验块可以用于恢复数据条带单元中的数据块。举例来说,请参见图5,校验块可以是图5中的GRAIN元数据校验块1和GRAIN元数据校验块2。元数据校验块可以根据至少一个数据条带单元中的元数据进行EC编码得到,元数据校验块可以用于恢复数据条带单元中的元数据。举例来说,请参见图5,校验块可以是图5中的GRAIN元数据校验块1和GRAIN元数据校验块2。
关于生成至少一个校验条带单元的过程,客户端节点可以采用编码算法,对至少一个数据条带单元进行EC编码,得到至少一个校验条带单元。该编码算法包括而不限于里德-所罗门(Reed-Solomon)编码、柯西编码等,本实施例对采用哪种编码算法进行EC编码不做限定。
其中,该至少一个校验条带单元以及至少一个数据条带单元可以组成一条EC条带,每个数据条带单元以及每个校验条带单元是EC条带中的一列数据块。举例来说,请参见图5,可以对数据条带单元1、数据条带单元2和数据条带单元3进行EC编码,得到校验条带单元1和校验条带单元2,该数据条带单元1、数据条带单元2、数据条带单元3、校验条带单元1和校验条带单元2组成了一条EC条带。
可选地,对至少一个数据条带单元进行EC编码的方式可以包括以下方式一至方式三中一项或多项的组合。
方式一、对至少一个数据条带单元中的数据块进行EC编码,得到至少一个校验条带单元中的校验块。
具体来说,可以对至少一个数据块进行EC编码,得到至少一个校验块,向任一条带单元写入一个或多个校验块,将写入完成后的条带单元作为校验条带单元。其中,可以向任一空白EC条带中的任一空白条带单元写入校验块,也可以在已写入数据的EC条带中的任一条带单元上进行覆盖写,本实施例对此不做限定。
举例来说,请参见图5,可以对GRAIN数据1、GRAIN数据2和GRAIN数据3进行EC编码,得到GRAIN元数据校验块1和GRAIN元数据校验块2,向条带单元4写入GRAIN元数据校验块1,向条带单元5写入GRAIN元数据校验块2,则写入完成后,条带单元4可以作为校验条带单元1,条带单元5可以作为校验条带单元2。
方式二、对至少一个数据条带单元中的元数据进行EC编码,得到至少一个校验条带单元中的元数据校验块。
在一种可能的实现中,可以根据每个数据条带单元中的交叉备份的元数据,对至少一个数据条带单元的交叉备份的元数据进行EC编码,以得到元数据校验块。举例来说,请参见图5,可以对交叉备份的元数据1、交叉备份的元数据2以及交叉备份的元数据3进行EC编码,得到GRAIN元数据校验块1以及GRAIN元数据校验块2。
在另一种可能的实现中,也可以从每个数据条带单元的交叉备份的元数据中选取一个或多个元数据,对从至少一个数据条带单元中选取的元数据进行EC编码,以得到元数据校验块。可选地,每个数据条带单元中交叉备份的元数据可以包括多个行,每个行承载一个元数据,可以选取至少一个数据条带单元中处于同一行的元数据,对选取的至少一个元数据进行EC编码。举例来说,请参见图5,每个数据条带单元中交叉备份的元数据占据3行,这3行分别用于承载GRAIN元数据1、GRAIN元数据2和GRAIN元数据3。可以先针对交叉备份的元数据中的第一行元数据进行EC编码,则从数据条带单元1中选择第一行的元数据,得到GRAIN元数据1,从数据条带单元2中选择第一行的元数据,得到GRAIN元数据2,从数据条带单元3中选择第一行的元数据,得到GRAIN元数据3,对GRAIN元数据1、GRAIN元数据2和GRAIN元数据3进行EC编码,得到GRAIN元数据校验块1以及GRAIN元数据校验块2。
当得到元数据校验块后,可以向任一空白EC条带中的任一空白条带单元写入元数据校验块,也可以在已写入数据的EC条带中的任一条带单元上,覆盖写入元数据校验块,可以将写入完成后的条带单元作为校验条带单元。举例来说,请参见图5,可以向条带单元4写入GRAIN元数据校验块1,向条带单元5写入GRAIN元数据校验块2,则写入完成后,条带单元4可以作为校验条带单元1,条带单元5可以作为校验条带单元2。
通过对每个数据条带单元中的元数据进行EC编码,可以进一步提高元数据存储的可靠性和安全性。具体来说,当任一数据条带单元中的元数据丢失时,不仅可以通过其他数据条带单元存储的交叉备份的元数据,读取和恢复丢失的元数据,也可以通过对其他数据条带单元中的元数据以及元数据校验块进行EC反编码,读取和恢复丢失的元数据,从而进一步降低元数据损失的概率,极大地提高存储元数据的可靠性和安全性。
方式三、对至少一个数据条带单元中的数据块和元数据进行EC编码,得到至少一个校验条带单元中的校验块。
方式三为方式一和方式二的结合,可以对至少一个数据块以及至少一个数据块的元数据一起进行EC编码,得到至少一个元数据校验块,向任一条带单元,写入元数据校验块,将写入完成后的条带单元,作为校验条带单元。
举例来说,请参见图5,可以对条带单元1、条带单元2和条带单元3中承载的所有数据进行EC编码,得到GRAIN元数据校验块1以及GRAIN元数据校验块2,向条带单元4写入GRAIN元数据校验块1,将写入完成后的条带单元4作为校验条带单元1,向条带单元5写入GRAIN元数据校验块2,将写入完成后的条带单元5作为校验条带单元2。
405、客户端节点将至少一个数据条带单元以及至少一个校验条带单元,分发至至少一个存储节点。
可选地,可以将至少一个数据条带单元以及至少一个校验条带单元,分发至数据的目标存储位置对应的至少一个存储节点。具体来说,可以根据数据的目标存储位置,确定该目标存储位置对应的存储节点,得到至少一个存储节点,可以为每个存储节点分配数据条带单元和/或校验条带单元,向每个存储节点分发为其分配的数据条带单元和/或校验条带单元。
关于确定目标存储位置对应的存储节点的方式,可以预先建立存储位置与存储节点的标识之间的映射关系,根据目标存储位置,查询存储位置与存储节点的标识之间的映射关系,得到目标存储位置对应的至少一个存储节点的标识,将该至少一个存储节点的标识对应的存储节点,作为目标存储位置对应的存储节点。
可选地,可以根据分布式存储系统中存储节点的数量以及状态,采用分区分配算法,生成分区视图,分区视图用于指示每个分区对应的存储节点,分区视图可以包括至少一个分区标识以及对应的至少一个存储节点的标识,客户端节点可以根据数据的目标存储位置,确定目标存储位置对应的分区标识,根据分区标识查询分区视图,得到至少一个存储节点的标识,将该至少一个存储节点的标识对应的存储节点,作为目标存储位置对应的存储节点。
关于根据数据的目标存储位置确定分区标识的过程,当目标存储位置为LBA时,可以将LBA除以分区的总数量,将得到的余数作为分区标识,从而确定LBA归属到哪个分区,其中,LBA与分区之间的对应关系可以称为LBA打散到分区的关系,分区与存储节点之间的对应关系可以称为分区部署到存储节点的部署关系。
关于为存储节点分配数据条带单元或校验条带单元的方式,可以按照存储节点的标识的顺序,依次为每个存储节点分配数据条带单元或校验条带单元,例如,可以为存储节点1分配数据条带单元1,为存储节点2分配数据条带单元2。又如,可以为每个存储节点随机分配一个数据条带单元或校验条带单元,当然,还可以采用其他方式分配数据条带单元或校验条带单元,本实施例对如何分配数据条带单元或校验条带单元不做限定。
关于分发数据条带单元和/或校验条带单元的方式,可以根据每个存储节点对应的数据条带单元和/或校验条带单元,生成至少一个写请求,将至少一个写请求分发至该至少一个存储节点,例如可以向每个存储节点发送一个写请求,从而向各个存储节点分发对应的数据条带单元和/或校验条带单元。其中,每个写请求携带存储节点对应的数据条带单元和/或校验条带单元,可选地还可以携带数据的目标存储位置。每个写请求可以是键值对(key-value)形式的输入/输出(Input/Output,以下简称:IO)请求。
可选地,可以由客户端节点向每个存储节点发送对应的数据条带单元和/或校验条带单元。具体来说,可以由客户端节点为每个存储节点分配对应的数据条带单元和/或校验条带单元,由客户端节点生成至少一个写请求,向每个存储节点发送写请求,通过客户端节点与每个存储节点进行交互,来将至少一个数据条带单元以及至少一个校验条带单元,分发至该至少一个存储节点。
示例性地,请参见图5,client节点可以向OSD节点1发送携带有数据条带单元1的写请求,向OSD节点2发送携带有数据条带单元2的写请求,向OSD节点3发送携带有数据条带单元3的写请求,向OSD节点4发送携带有校验条带单元1的写请求,向OSD节点5发送携带有校验条带单元2的写请求,从而实现数据条带单元以及校验条带单元的分发。
本实施例中,通过由客户端节点向每个存储节点发送对应的数据条带单元和/或校验条带单元,待存储的数据只需经过客户端节点与存储节点之间的一跳转发,即可到达每个存储节点,从而在每个存储节点上进行存储,而无需先经过客户端节点到达主存储节点,再从主存储节点到达每个备存储节点,也就避免了数据要经过两跳转发,才能到达每个存储节点的情况,节省了主存储节点的转发所导致的网络时延,从而降低了存储数据的时延,提高存储数据的效率,加快存储数据的速度,从而极大地提升了分布式存储系统的存储性能。
需要说明的是,由客户端节点向每个存储节点发送数据条带单元和/或校验条带单元,仅是分发数据条带单元和/或校验条带单元的可选方式,而非分发数据条带单元和/或校验条带单元的必选方式,在另一个可能的实施例中,也可以在至少一个存储节点中,选取某一存储节点为主存储节点,其他存储节点为备存储节点,客户端节点可以向主存储节点发送至少一个数据条带单元以及至少一个校验条带单元,由主存储节点向各个备存储节点,分别发送数据条带单元和/或校验条带单元,本实施例对如何分发数据条带单元和/或校验条带单元不做限定。
406、当至少一个存储节点接收到数据条带单元和/或校验条带单元时,至少一个存储节点存储数据条带单元和/或校验条带单元。
具体来说,每个存储节点可以接收写请求,解析写请求,得到写请求携带的数据条带单元和/或校验条带单元,向存储空间写入数据条带单元和/或校验条带单元,从而存储数据条带单元和/或校验条带单元。其中,写请求可以携带数据的目标存储位置,可以向目标存储位置对应的存储空间写入数据条带单元和/或校验条带单元。
407、至少一个存储节点向客户端节点发送第一写完成消息,第一写完成消息用于指示对应的存储节点已存储数据条带单元和/或校验条带单元。
为了区分描述,本实施例将存储节点发送的写完成消息,称为第一写完成消息,将客户端节点发送的写完成消息,称为第二写完成消息,需要说明的是,术语“第一写完成消息”和“第二写完成消息”仅是为了区分不同的写完成消息,而不应理解为明示或暗示不同写完成消息之间的相对重要性以及写完成消息的总数量。
每个存储节点在写入数据条带单元和/或校验条带单元完成后,可以生成第一写完成消息,向客户端节点发送第一写完成消息,以便通知客户端节点,自身已经存储数据成功。
408、客户端节点接收至少一个存储节点发送的第一写完成消息,向目标应用或外部主机发送第二写完成消息,第二写完成消息用于指示已向目标存储位置写入待存储的数据。
具体来说,客户端节点可以判断是否已经接收到所有存储节点的第一写完成消息,当确认接收到所有存储节点的第一写完成消息,则生成第二写完成消息,向目标应用或外部主机发送第二写完成消息。其中,目标应用或外部主机可以接收第二写完成消息,对该第二写完成消息按照预设提示方式进行提示,从而达到向用户提示,已向目标存储位置写入待存储的数据的功能。另外,该目标应用在逻辑架构上可以位于客户端节点的上层,目标应用可以称为客户端节点的上层应用。
需要说明的是,步骤407以及步骤408仅是存储数据的可选步骤,而非存储数据的必选步骤,本实施例对是否执行步骤407以及步骤408不做限定。
综上所述,上述阐述了存储数据的写IO流程,而读取数据的读IO流程可以包括以下步骤一至步骤二。
步骤一、客户端节点接收读请求,根据读请求中的目标存储位置,确定目标存储位置对应的分区的至少一个存储节点。例如,可以根据LBA与分区之间的映射关系,确定LBA对应的分区,查询分区视图,确定分区对应的至少一个存储节点。
步骤二、客户端节点将读请求转发到至少一个存储节点,从而在该至少一个存储节点进行数据读取。
本实施例提供的方法,引入了对EC条带中数据块的元数据进行交叉备份的机制,通过将数据块以及交叉备份的元数据,共同存储在数据条带单元中,对数据条带单元进行EC编码得到校验条带单元后,将各个数据条带单元以及各个校验条带单元,分发至各个存储节点,可以确保每个存储节点存储完成后,不同存储节点之间会互相保存数据块的元数据,即使某个存储节点的元数据丢失,由于其他存储节点预先存储了该存储节点的元数据,能够从其他存储节点的数据条带单元中,读取和恢复丢失的元数据,从而极大地提高了数据存储的可靠性和安全性,提升分布式存储系统的存储性能。并且,通过EC技术来存储数据,可以避免通过三副本机制来存储数据时,对缓存的性能开销,从而节省存储空间,降低运行成本。进一步地,可以由客户端节点向每个存储节点,发送对应的数据条带单元和校验条带单元,保证数据只需经过一跳网络转发,即可到达每个存储节点,以得到存储,可以极大地降低时延,提高存储数据的速度和效率,从而提升分布式存储系统的存储性能。
以下通过图6实施例,描述存储节点处于亚健康状态的场景下,数据的存储流程。为了区分描述,图6实施例中,将处于亚健康状态的存储节点称为第三存储节点,将未处于亚健康状态的存储节点称为第四存储节点。需要说明的是,术语“第三存储节点”以及“第四存储节点”仅是为了区分描述是否处于亚健康状态的存储节点,而不应理解为明示或暗示存储节点之间的顺序、相对重要性以及存储节点的总数量。
图6是本申请实施例提供的一种数据存储方法的流程图,如图6所示,该方法的交互主体包括客户端节点以及至少一个第四存储节点,包括以下步骤:
601、客户端节点获取至少一个空白EC条带。
本步骤与上述步骤401同理,在此不做赘述。
602、客户端节点获取待存储的数据以及数据的目标存储位置。
本步骤与上述步骤402同理,在此不做赘述。
603、客户端节点确定第三存储节点处于亚健康状态。
亚健康状态也称亚健康闪断,亚健康状态可以包括处理读写请求异常缓慢的状态、写缓存失效的状态、磁盘损坏的状态等。
关于确定第三存储节点处于亚健康状态的方式,可选地,客户端节点可以接收亚健康消息,根据亚健康消息,确定第三存储节点处于亚健康状态。其中,亚健康消息用于指示第三存储节点处于亚健康状态,可以携带第三存储节点的标识,客户端节点可以解析亚健康消息,得到该第三存储节点的标识,从而确定第三存储节点处于亚健康状态。
可选地,客户端节点接收的亚健康消息可以来自于MDC节点。具体来讲,分布式存储系统可以包括MDC节点,MDC节点用于维护每个存储节点的状态,MDC节点可以与每个存储节点保持通信,当MDC节点确定第三存储节点处于亚健康状态时,MDC节点可以根据第三存储节点的标识,生成亚健康消息,向客户端节点发送亚健康消息,客户端节点可以接收MDC节点的亚健康消息,从而确定第三存储节点处于亚健康状态。
需要说明的是,接收亚健康消息,仅是确定第三存储节点处于亚健康状态的方式的一种示例,而非确定第三存储节点处于亚健康状态的必选方式,可选地,客户端节点也可以通过其他方式确定第三存储节点处于亚健康状态。例如,客户端节点可以与第三存储节点保持通信,客户端节点可以主动探测到第三存储节点处于亚健康状态。本实施例对如何确定第三存储节点处于亚健康状态不做限定。
604、客户端节点根据待存储的至少一个数据块,生成至少一个数据条带单元。
605、客户端节点对至少一个数据条带单元进行EC编码,得到至少一个校验条带单元。
606、客户端节点将至少一个数据条带单元以及至少一个校验条带单元,分发至至少一个第四存储节点。
步骤604至步骤606与上述步骤403至步骤405同理,而区别之处主要包括以下两点:
区别一、分发的数据内容有所增加。本实施例中,在分发数据条带单元以及校验条带单元的基础上,还会分发第三存储节点的亚健康标记,以便通过第三存储节点的亚健康标记,指示第三存储节点处于亚健康状态。其中,亚健康标记用于指示第三存储节点处于亚健康状态,可以包括第三存储节点的标识,亚健康标记可以由客户端节点生成。
分发第三存储节点的亚健康标记的方式,可以包括以下方式一至方式二中的一项或多项的组合。
方式一、可以向至少一个数据条带单元写入亚健康标记,以使每个数据条带单元在携带数据块以及交叉备份的元数据的同时,还会携带第三存储节点的亚健康标记,从而通过分发至少一个数据条带单元,来分发第三存储节点的亚健康标记。
其中,可以先向至少一个数据条带单元写入亚健康标记,再对至少一个数据条带单元进行EC编码,得到至少一个校验条带单元。另外,也可以先生成至少一个数据条带单元,对至少一个数据条带单元进行EC编码,得到至少一个校验条带单元,再向至少一个数据条带单元中的空闲位置,写入亚健康标记。
需要说明的是,如果由客户端节点向每个存储节点发送数据条带单元,则可以由客户端节点向至少一个数据条带单元写入亚健康标记,如果由主存储节点向每个存储节点发送数据条带单元,则可以由主存储节点向至少一个数据条带单元写入亚健康标记,本实施例对向数据条带单元写入亚健康标记的执行主体不做限定。
方式二、可以向至少一个写请求写入亚健康标记,以使每个写请求在携带数据条带单元和/或校验条带单元的同时,还会携带第三存储节点的亚健康标记,从而通过分发至少一个写请求,来分发第三存储节点的亚健康标记。
例如,可以在生成写请求时,对亚健康标记以及数据条带单元进行封装,得到携带亚健康标记以及数据条带单元的写请求,从而向写请求写入亚健康标记。又如,写请求中可以预留亚健康字段,可以对亚健康字段置位,从而向写请求中写入亚健康标记,本实施例对如何向写请求中写入亚健康标记不做限定。
需要说明的是,如果由客户端节点向每个存储节点发送写请求,则可以由客户端节点向至少一个写请求写入亚健康标记,如果由主存储节点向每个存储节点发送写请求,则可以由主存储节点向至少一个数据条带单元写入写请求,本实施例对向写请求写入亚健康标记的执行主体不做限定。
举例来说,请参见图7,当OSD节点1发生亚健康闪断时,客户端节点可以向OSD节点2的写请求写入OSD节点1的亚健康标记,并向OSD节点3的写请求写入OSD节点1的亚健康标记,客户端节点可以向OSD节点2和OSD节点3,发送携带OSD节点1的亚健康标记的写请求,来向OSD节点2和OSD节点3,分发OSD节点1的亚健康标记。
区别二、数据的分发对象可以发生变化。具体来说,若第三存储节点处于亚健康状态,可以向至少一个存储节点中的第四存储节点,发送数据条带单元和/或校验条带单元。其中,第四存储节点与第三存储节点可以是不同的存储节点。关于确定第四存储节点的方式,可以确定至少一个存储节点中第三存储节点以外的存储节点,得到至少一个第四存储节点,向该至少一个第四存储节点发送数据条带单元和/或校验条带单元。其中,可以由客户端节点向每个第四存储节点发送数据条带单元和/或校验条带单元,也可以由主存储节点向每个第四存储节点发送数据条带单元和/或校验条带单元,本实施例对此不做限定。
可选地,可以对待存储的数据进行降级写,即,可以无需发送第三存储节点对应的数据条带单元和/或校验条带单元,而发送第三存储节点对应的数据条带单元和/或校验条带单元以外的数据条带单元和/或校验条带单元。其中,若采用降级写的方式来存储数据,上述携带数据条带单元和/或校验条带单元的写请求可以称为降级写请求。
具体来说,降级写可以包括以下实现方式一至实现方式二中的任一项或多项:
实现方式一、向至少一个第四存储节点,发送第三存储节点对应的第一数据条带单元以外的至少一个第二数据条带单元以及至少一个校验条带单元。
当第三存储节点对应数据条带单元时,假设将第三存储节点对应的数据条带单元称为第一数据条带单元,将第一数据条带单元以外的数据条带单元称为第二数据条带单元,实现方式一具体可以包括:确定生成的至少一个数据条带单元中,第一数据条带单元以外的数据条带单元,得到至少一个第二数据条带单元,向该至少一个第四存储节点,发送对应的第二数据条带单元和/或校验条带单元。
举例来说,请参见图7,当OSD节点1发生亚健康闪断时,可以向OSD节点1以外的其余的OSD节点(即OSD节点2至OSD节点5),发送数据条带单元1以外的数据条带单元和/或校验条带单元(即数据条带单元2、数据条带单元3、校验条带单元1和校验条带单元2)。
实现方式二、向至少一个第四存储节点,发送第三存储节点对应的第一校验条带单元以外的至少一个第二校验条带单元以及至少一个数据条带单元。
当第三存储节点对应校验条带单元时,假设第三存储节点对应的校验条带单元称为第一校验条带单元,其他校验条带单元称为第二校验条带单元,实现方式二具体可以包括:确定生成的至少一个校验条带单元中,第一校验条带单元以外的校验条带单元,得到至少一个第二校验条带单元,向该至少一个第四存储节点,发送对应的第二校验条带单元和/或校验条带单元。
607、第四存储节点接收对应的数据条带单元和/或校验条带单元,第四存储节点存储对应的数据条带单元和/或校验条带单元。
步骤607与上述步骤406同理,而区别之处主要在于,第四存储节点在存储数据条带单元和/或校验条带单元的基础上,可以在第三存储节点处于亚健康状态期间,为第三存储节点记录亚健康日志,以便在第三存储节点处于亚健康恢复状态时,向第三存储节点发送该第三存储节点缺失的元数据。
亚健康日志用于指示在第三存储节点处于亚健康状态期间存储的数据条带单元,亚健康日志也可以称为元数据差异日志,能够指示由于第三存储节点处于亚健康状态,第三存储节点与第四存储节点之间存储的元数据的差异。亚健康日志可以包括第三存储节点与数据条带单元之间的对应关系,例如可以包括第三存储节点的亚健康标记以及数据条带单元的条带单元标识之间的对应关系。
可选的,记录亚健康日志的实现方式可以包括以下实现一至实现二中的任一种或多种:
实现一、当接收到的写请求携带第三存储节点的亚健康标记以及数据条带单元时,向亚健康日志写入第三存储节点对应的亚健康记录。
具体来讲,第四存储节点解析写请求时,如果从写请求中得到了第三存储节点的亚健康标记,则生成第三存储节点对应的亚健康记录,向亚健康日志中写入第三存储节点对应的亚健康记录。其中,该亚健康记录是指亚健康日志中的一条记录,可以包括第三存储节点的亚健康标记,另外还可以包括其他信息,例如接收到亚健康标记的时间戳、写请求中的数据条带单元的条带单元标识等。
实现二、当接收到的数据条带单元携带第三存储节点的亚健康标记时,向亚健康日志,写入第三存储节点对应的亚健康记录。
具体来讲,第四存储节点解析数据条带单元时,如果从数据条带单元中得到了第三存储节点的亚健康标记,则生成第三存储节点对应的亚健康记录,向亚健康日志中写入第三存储节点对应的亚健康记录。
需要说明的是,向亚健康日志写入亚健康记录的步骤,可以在第三存储节点处于亚健康期间多次执行,例如,可以每当接收到的写请求携带第三存储节点的亚健康标记时,就向亚健康日志写入一条亚健康记录,从而维护带有亚健康标记的写请求日志记录。
608、每个第四存储节点向客户端节点发送第一写完成消息。
609、客户端节点接收至少一个第四存储节点发送的第一写完成消息,向目标应用或外部主机发送第二写完成消息。
步骤608至步骤609与上述步骤407至步骤408同理,相区别的是,由于第三存储节点处于亚健康状态,客户端节点可以无需判断是否接收到第三存储节点的第一写完成消息,当接收到第三存储节点以外的至少一个第四存储节点的第一写完成消息,即确认数据已经存储成功,则向目标应用或外部主机发送第二写完成消息,也即是,一旦降级写入到其他存储节点成功,客户端节点即可向上返回IO写成功。
综上所述,上述阐述了第三存储节点处于亚健康状态的写IO流程,本实施例还提供了第三存储节点处于亚健康状态的读IO流程,以第三存储节点对应的数据条带单元称为第一数据条带单元,第一数据条带单元的数据块的元数据备份存储于第五存储节点为例,读IO流程可以包括以下步骤一至步骤二。
步骤一、当客户端节点接收到读请求时,查询存储节点之间的交叉备份关系,确定第三存储节点对应的第五存储节点,该第五存储节点存储的交叉备份的元数据包括第一数据条带单元的数据块的元数据,该读请求用于指示读取第一数据条带单元的数据块。
如果客户端接收到读请求,而该读请求指示读取第一数据条带单元的数据块中的数据,由于存储该第一数据条带单元的第三存储节点当前处于亚健康状态,可以根据第三存储节点,查询存储节点之间的交叉备份关系,得到第三存储节点对应的第五存储节点,由于该第五存储节点存储的数据条带单元中的交叉备份的元数据,包括第一数据条带单元的数据块的元数据,换句话说,第一数据条带单元的数据块的元数据备份已经预先存储在第五存储节点上,因此向第五存储节点转发读请求,即可读取第一数据条带单元的数据。
举例来说,请参见图7,当OSD节点1处于亚健康状态时,如果客户端节点接收到读请求,而读请求指示要读取OSD节点1存储的GRAIN数据1,可以根据OSD节点1,查询存储节点之间的交叉备份关系,得到OSD节点2和OSD节点3,向OSD节点2和OSD节点3转发读请求。
步骤二、客户端节点向第五存储节点发送读请求。
步骤三、第五存储节点接收客户端节点发送的读请求,进行数据读取。
第五存储节点可以读取自身存储的数据条带单元中的交叉备份的元数据,从该交叉备份的元数据中,得到第一数据条带单元的数据块的元数据,根据数据块的元数据,可以索引至对应的数据块,从而读取数据块中的数据,将数据返回给客户端节点。具体来讲,第五存储节点可以与第三存储节点以外的其他存储节点进行数据交互,可以接收其他存储节点发送的数据条带单元以及校验条带单元,从而得到第一数据条带单元以外的至少一个第二数据条带单元以及至少一个校验条带单元,可以对至少一个第二数据条带单元以及至少一个校验条带单元,进行EC反编码,得到第一数据条带单元,从而还原第一数据条带单元,读取第一数据条带单元的数据块,将数据块中的数据返回给客户端节点。
本实施例提供的方法,如果某个存储节点处于亚健康状态,在存储数据时可以立即避开处于亚健康状态的存储节点,而通过其它存储节点来进行数据存储,从而实现存储节点之间快速切换,降低了存储节点的亚健康状态对存储系统性能的影响,保证即使存储节点处于亚健康状态,存储系统也可以快速存储数据,从而保证存储系统的可靠性和稳定性。
图8是本申请实施例提供的一种数据恢复方法的流程图,如图8所示,该方法的执行主体为第五存储节点,包括以下步骤:
801、第五存储节点存储至少一个数据条带单元。
本步骤的具体实现请参见上述图4实施例和图6实施例,在此不做赘述。
802、第五存储节点确定第三存储节点处于亚健康恢复状态。
该亚健康恢复状态是指从亚健康状态过渡到健康状态的状态,也即是正在从亚健康恢复的状态。
关于如何确定第三存储节点处于亚健康恢复状态,可选地,第五存储节点可以接收亚健康恢复消息,解析亚健康恢复消息,得到亚健康恢复消息携带的第三存储节点的标识,根据第三存储节点的标识,可以确定第三存储节点处于亚健康恢复状态。其中,亚健康恢复消息用于指示第三存储节点处于亚健康恢复状态,可以携带第三存储节点的标识。
可选地,第五存储节点可以接收MDC节点发送的亚健康恢复消息。具体来讲,MDC节点可以与每个存储节点保持通信,MDC节点可以感知每个存储节点的当前状态,当MDC节点确定第三存储节点处于亚健康恢复状态时,MDC节点可以生成亚健康恢复消息,向第五存储节点发送亚健康恢复消息,第五存储节点可以接收MDC节点的亚健康恢复消息,从而确定第三存储节点处于亚健康恢复状态。
需要说明的第一点是,接收MDC节点发送的亚健康恢复消息仅是接收亚健康恢复消息的可选方式,而非接收亚健康恢复消息的必选方式,可选地,第五存储节点可以接收其他节点发送的亚健康恢复消息,例如,当第三存储节点处于亚健康恢复状态时,第三存储节点可以主动向第五存储节点发送亚健康恢复消息,第五存储节点可以接收第五存储节点发送的亚健康恢复消息。
需要说明的第二点是,步骤802仅是数据恢复的可选步骤,而非数据恢复的必选步骤。在另一种可能的实现中,第五存储节点也可以无需执行步骤802,例如,第五存储节点可以当接收到缺失元数据的发送指令时,执行下述步骤803。
803、第五存储节点根据至少一个数据条带单元,获取第三存储节点的缺失元数据。
以第三存储节点存储的数据条带单元称为第一数据条带单元为例,由于第五存储节点存储的数据条带单元的交叉备份的元数据中包括第一数据条带单元的数据块的元数据,换句话说,第一数据条带单元的数据块的元数据备份,已经预先存储在第五存储节点上,因此第五存储节点根据自身存储的数据条带单元,即可获取到第三存储节点的缺失元数据。
其中,该缺失元数据是指第三存储节点本应存储而未存储的数据条带单元的数据块的元数据,例如可以是第三存储节点由于处于亚健康状态,而未存储的数据块的元数据。缺失元数据可以理解为差异元数据,即第三存储节点与第五存储节点之间存储的元数据差异。
可选地,获取缺失元数据的过程具体可以包括以下步骤一至步骤二:
步骤一、从至少一个数据条带单元中,选取至少一个第二数据条带单元。
第二数据条带单元是第五存储节点自身存储的数据条带单元,第二数据条带单元的存储时间属于第三存储节点处于亚健康状态期间。其中,第二数据条带单元的存储时间是指第五存储节点存储第二数据条带单元的时间点,第三存储节点处于亚健康状态期间可以指第三存储节点开始处于亚健康状态至第三存储节点结束处于亚健康状态的时间范围,例如,可以指第三存储节点开始处于亚健康状态至第三存储节点开始处于亚健康恢复状态的时间范围。第五存储节点可以选取第三存储节点处于亚健康状态期间,该第五存储节点自身存储的每个数据条带单元,将选取的至少一个数据条带单元作为该至少一个第二数据条带单元。
可选地,步骤一具体可以包括以下实现方式一至实现方式三中的一项或多项的组合。
实现方式一、根据第三存储节点的标识,查询亚健康日志,得到至少一个第二数据条带单元。
可以将第三存储节点的标识作为索引,查询亚健康日志,确定亚健康日志中该第三存储节点的标识对应的数据条带单元的条带单元标识,得到至少一个条带单元标识,可以确定至少一个条带单元标识对应的至少一个数据条带单元,将该至少一个数据条带单元作为至少一个第二数据条带单元。举例来说,OSD节点2可以根据OSD节点1的标识,查询亚健康日志,得到OSD节点1的标识对应的条带单元标识。
实现方式二、选取具有第三存储节点的亚健康标记的数据条带单元,作为至少一个第二数据条带单元。
可以判断存储的每个数据条带单元中是否携带第三存储节点的亚健康标记,当任一数据条带单元携带第三存储节点的亚健康标记,则选取该数据条带单元,作为第二数据条带单元。
实现方式三、可以确定第三存储节点处于亚健康状态的目标时间段,选取该目标时间段内存储的至少一个数据条带单元,作为至少一个第二数据条带单元。
关于如何确定目标时间段,例如,可以当接收到第三存储节点的亚健康消息时,记录第一时间戳,当接收到第三存储节点的亚健康恢复消息时,记录第二时间戳,将第一时间戳至第二时间戳之间的时间段,作为第三存储节点处于亚健康状态的目标时间段。又如,可以当接收到的写请求携带第三存储节点的亚健康标记时,记录第一时间戳,当接收到的写请求不再携带第三存储节点的亚健康标记时,记录第二时间戳,将第一时间戳至第二时间戳之间的时间段,作为第三存储节点处于亚健康状态的目标时间段。
关于如何选取至少一个第二数据条带单元,可以在存储每个数据条带单元时,记录每个数据条带单元的存储时间点,可以根据每个数据条带单元的存储时间点,选取存储时间点处于目标时间段内的数据条带单元,作为至少一个第二数据条带单元。
步骤二、根据至少一个第二数据条带单元中的交叉备份的元数据,确定第三存储节点的缺失元数据。
步骤二可以包括以下实现方式一至实现方式二中的任一项或多项的组合:
实现方式一、可以将至少一个第二数据条带单元中的交叉备份的元数据,作为第三存储节点的缺失元数据。举例来说,请参见图9,OSD节点2可以将GRAIN元数据2、GRAIN元数据3和GRAIN元数据1,作为OSD节点1的缺失元数据。
实现方式二、可以从至少一个第二数据条带单元的交叉备份的元数据中,选取一个或多个元数据,将选取的一个或多个元数据,作为第三存储节点的缺失元数据。
例如,可以选取第三存储节点对应的数据块的元数据,作为第三存储节点的缺失元数据,举例来说,请参见图9,OSD节点2可以选取OSD节点1对应的GRAIN元数据1,将GRAIN元数据1,作为OSD节点1的缺失元数据。
804、第五存储节点向第三存储节点发送缺失元数据。
通过向第三存储节点发送缺失元数据,可以将第三存储节点处于亚健康状态期间,第三存储节点的缺失元数据同步给第三存储节点,换句话说,可以将第三存储节点与第五存储节点之间的差异元数据同步给第三存储节点,以使第三存储节点接收到缺失元数据后,能够重新存储缺失元数据,从而恢复亚健康期间未存储的数据块的元数据。
可选地,当第三存储节点处于亚健康状态时,读IO流程可以包括以下步骤一至步骤三:
步骤一、客户端节点接收读请求,根据读请求中携带的目标存储位置,确定目标存储位置对应的至少一个存储节点。例如,可以根据LBA与分区之间的映射关系,确定LBA对应的分区,查询分区视图,确定分区对应的至少一个存储节点。
步骤二、客户端节点向第五存储节点转发读请求。
当客户端节点确定第三存储节点处于亚健康恢复状态时,可以根据第三存储节点,查询存储节点之间的交叉备份关系,得到第五存储节点,将第三存储节点对应的读请求,转发给第五存储节点,也即是,将读请求转发给元数据备份所处的存储节点。
例如,请参见图9,假设第三存储节点为OSD节点1,OSD节点2和OSD节点3存储的交叉备份的元数据中包括OSD节点1的元数据备份,则可以将OSD节点1对应的读请求,转发给OSD节点2和OSD节点3。
可选的,针对第三存储节点恢复该缺失元数据的具体过程,可以包括以下步骤一至步骤三:
步骤一、第三存储节点接收客户端节点的写请求和第五存储节点的写请求,并维护客户端节点对应的第一写请求记录以及第五存储节点对应的第二写请求记录。
客户端节点的写请求携带数据条带单元以及目标存储位置,第一写请求记录用于记录在第三存储节点处于亚健康恢复状态的过程中,第三存储节点需要存储的数据和元数据,每当第三存储节点接收到客户端节点的写请求时,即可在第一写请求记录中,记录客户端节点的写请求。第五存储节点的写请求携带缺失元数据,第二写请求记录用于记录第三存储节点接收到的需要存储的缺失元数据,当第三存储节点接收到第五存储节点的写请求时,即可在第二写请求记录中,记录第五存储节点的写请求。
步骤二、当缺失元数据接收完成后,根据第一写请求记录以及第二写请求记录,对多个写请求进行合并处理,得到至少一个目标写请求。
具体来讲,可以确定第一写请求记录以及第二写请求记录中的所有写请求,根据所有写请求携带的时间戳,按照时间戳的早晚顺序进行排序,对于排序后的所有写请求,可以根据所有写请求中携带的目标存储位置,判断是否存在目标存储位置相同的写请求,当多个写请求中携带的目标存储位置相同时,对这多个目标存储位置相同的写请求进行合并处理,即,筛选出这写请求中时间最近的写请求,而过滤掉其他写请求,最终得到至少一个目标写请求。
步骤三、存储该至少一个目标写请求中携带的元数据。
当存储元数据完成后,第三存储节点恢复为健康状态。可选地,第三存储节点恢复为健康状态后,可以向MDC节点发送第三存储节点处于健康状态的消息,MDC节点可以向客户端节点和每个存储节点,广播到第三存储节点的健康消息。
需要说明的是,第三存储节点处于亚健康状态仅是缺失元数据的一种示例性场景,而非必选场景,相应地,第三存储节点处于亚健康恢复状态也仅是进行数据恢复的一种示例性场景,而非必选场景,在另一个示例性场景中,第三存储节点也可以由于其他原因缺失元数据,例如由于设备故障、临时断电、内存容量不足等原因缺失元数据,相应地,第三存储节点也可以在其他场景下进行数据恢复,例如当第三存储节点恢复正常时进行数据恢复,例如当第三存储节点接收到数据恢复指令时进行数据恢复,本实施例对第三存储节点恢复数据的场景不做限定。
本实施例提供的方法,引入了对EC条带中数据块的元数据进行交叉备份的机制,通过将数据块以及交叉备份的元数据,共同存储在数据条带单元中,确保不同存储节点之间会互相存储数据块的元数据,即使某个存储节点的元数据丢失,由于其他存储节点的数据条带单元中预先存储了该存储节点的元数据备份,其他存储节点可以根据自身存储的数据条带单元,获取该存储节点的缺失元数据,将该存储节点的缺失元数据同步给该存储节点,从而降低了元数据丢失的概率,极大地提高了数据存储的可靠性和安全性,从而提升分布式存储系统的存储性能。尤其是,如果某个存储节点由于亚健康闪断而缺失元数据,当该存储节点处于亚健康恢复状态时,其他存储节点即可根据本地记录的亚健康日志中记录的元数据差异,将该存储节点的缺失元数据同步到从亚健康恢复正常的存储节点上,从而实现存储节点从亚健康状态恢复后可以自动地恢复缺失元数据,降低了存储节点处于亚健康状态对存储系统性能的影响,保证分布式存储系统的高稳定性和高可靠性。
图10是本申请实施例提供的一种客户端节点的结构示意图,该客户端节点包括:生成模块1001、编码模块1002和分发模块1003。
生成模块1001,用于执行上述步骤403;
编码模块1002,用于执行上述步骤404;
分发模块1003,用于执行上述步骤405。
可选地,该生成模块1001,用于执行上述步骤403中的步骤一至步骤三;
可选地,该生成模块1001,用于执行上述步骤403中的步骤二中的(2.1)至(2.2);
可选地,该编码模块1002,用于执行上述步骤404中的方式一至方式三中的至少一种方式。
可选地,该分发模块1003,用于向每个存储节点发送对应的数据条带单元和/或校验条带单元。
可选地,该装置还包括:
发送模块,用于执行上述步骤408。
可选地,该分发模块1003,用于执行上述步骤606。
可选地,该分发模块1003,用于执行上述步骤606中实现方式一至实现方式二中的至少一项。
可选地,该装置还包括:
发送模块,用于执行上述图6实施例中读IO流程的步骤二。
可选地,该装置还包括:
查询模块,用于执行上述图6实施例中读IO流程的步骤一。
可选地,该分发模块1003,用于执行上述步骤606。
可选地,该装置还包括:
发送模块,用于执行上述步骤609。
需要说明的第一点是:上述实施例所述的各个模块具体可以是软件中执行相应功能的软件模块,即,“模块”可以是一组计算机程序构成的功能模块,该计算机程序可以是源程序或目标程序,该计算机程序可以通过任意编程语言实现。客户端节点通过上述各个模块,可以基于处理器加存储器的硬件来实现存储数据的功能,也即是,可以通过客户端节点的处理器,运行存储在客户端节点的存储器中的软件代码,来执行相应的软件来实现存储数据的功能。
需要说明的第二点是:上述实施例提供的客户端节点在存储数据时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将客户端节点的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的客户端节点与存储数据方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图11是本申请实施例提供的一种存储节点的结构示意图,该装置包括:存储模块1101、获取模块1102和发送模块1103。
存储模块1101,用于执行上述步骤801;
获取模块1102,用于执行上述步骤803;
发送模块1103,用于执行上述步骤804。
可选地,该获取模块1102,用于执行上述步骤803中的步骤一至步骤二;
可选地,该选取子模块,用于执行上述步骤803中的步骤一中的实现方式一至实现方式三中的至少一项。
可选地,该装置还包括:
记录模块,用于记录亚健康日志。
可选地,该记录模块,用于执行步骤607中的实现一至实现二中的至少一项。
可选地,该装置还包括:
接收模块,用于接收亚健康恢复消息。
需要说明的第一点是:上述实施例所述的各个模块具体可以是软件中执行相应功能的软件模块,即,“模块”可以是一组计算机程序构成的功能模块,该计算机程序可以是源程序或目标程序,该计算机程序可以通过任意编程语言实现。通过上述各个模块,存储节点可以基于处理器加存储器的硬件来实现恢复数据的功能,也即是,可以通过存储节点的处理器,运行存储在存储节点的存储器中的软件代码,来执行相应的软件来实现恢复数据的功能。
需要说明的第二点是:上述实施例提供的存储节点在恢复数据时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将存储节点的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的存储节点与数据恢复方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
在一个示例性实施例中,本申请还提供了一种包含指令的计算机程序产品,当其在客户端节点上运行时,使得该客户端节点能够实现上述实施例中数据存储方法所执行的操作。
在一个示例性实施例中,本申请还提供了一种包含指令的计算机程序产品,当其在存储节点上运行时,使得该存储节点能够实现上述实施例中数据恢复方法所执行的操作。
在一个示例性实施例中,本申请还提供了一种数据存储系统,在一种可能的实现方式中,所述系统包括:上述图2实施例所述的客户端节点和上述图3实施例所述的存储节点。
在另一种可能的实现方式中,所述系统包括:上述图10实施例所述的客户端节点和上述图11实施例所述的存储节点。
在一个示例性实施例中,本申请还提供了一种芯片,所述芯片包括处理器和/或程序指令,当所述芯片运行时,实现上述实施例中数据存储方法所执行的操作。
在一个示例性实施例中,本申请还提供了一种芯片,所述芯片包括处理器和/或程序指令,当所述芯片运行时,实现上述实施例中数据恢复方法所执行的操作。
上述所有可选技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机程序指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机程序指令可以从一个网站站点、计算机、服务器或数据中心通过有线或无线方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如软盘、硬盘、磁带)、光介质(例如,数字视频光盘(digital video disc,DVD)、或者半导体介质(例如固态硬盘)等。
本申请中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本申请中的字符“/”,一般表示前后关联对象是一种“或”的关系。
本申请中术语“多个”的含义是指两个或两个以上,例如,多个数据包是指两个或两个以上的数据包。
本申请中术语“第一”“第二”等字样用于对作用和功能基本相同的相同项或相似项进行区分,本领域技术人员可以理解,“第一”“第二”等字样不对数量和执行顺序进行限定。
以上所述仅为本申请的可选实施例,并不用以限制本申请,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。

Claims (19)

1.一种数据存储方法,其特征在于,所述方法包括:
根据待存储的至少一个数据块,生成至少一个数据条带单元,每个数据条带单元包括数据块以及交叉备份的元数据,所述交叉备份的元数据包括所述数据条带单元包括的数据块的元数据和所述数据条带单元以外的其他数据条带单元包括的数据块的元数据;
对所述至少一个数据条带单元进行纠删码EC编码,得到至少一个校验条带单元;
将所述至少一个数据条带单元以及所述至少一个校验条带单元,分发至至少一个存储节点。
2.根据权利要求1所述的方法,其特征在于,所述根据待存储的至少一个数据块,生成至少一个数据条带单元,包括:
对所述至少一个数据块的元数据进行备份,得到至少一个元数据备份,所述至少一个数据块和所述至少一个元数据备份一一对应;
对于所述至少一个数据块中的数据块,从所述至少一个元数据备份中,选取所述数据块对应的至少一个目标元数据备份,所述至少一个目标元数据备份为当前数据条带单元以外的其他数据条带单元包括的数据块的元数据备份;
根据所述数据块、所述数据块的元数据以及所述至少一个目标元数据备份,生成数据条带单元。
3.根据权利要求2所述的方法,其特征在于,所述从所述至少一个元数据备份中,选取所述数据块对应的至少一个目标元数据备份,包括:
根据所述数据块对应的第一存储节点,查询存储节点之间的交叉备份关系,得到所述第一存储节点对应的至少一个第二存储节点;
确定所述至少一个第二存储节点对应的数据块的元数据备份,作为所述至少一个目标元数据备份。
4.根据权利要求1所述的方法,其特征在于,所述对所述至少一个数据条带单元进行纠删码EC编码,得到至少一个校验条带单元,包括下述至少一个步骤:
对所述至少一个数据条带单元中的数据块进行EC编码,得到所述至少一个校验条带单元中的校验块;
对所述至少一个数据条带单元中的元数据进行EC编码,得到所述至少一个校验条带单元中的元数据校验块。
5.根据权利要求1所述的方法,其特征在于,所述将所述至少一个数据条带单元以及所述至少一个校验条带单元,分发至至少一个存储节点,包括:
确定所述至少一个存储节点中的第三存储节点处于亚健康状态;
向所述至少一个存储节点中的第四存储节点,发送所述第三存储节点对应的第一数据条带单元以外的至少一个第二数据条带单元以及所述至少一个校验条带单元;和/或,向所述至少一个存储节点中的第四存储节点,发送所述第三存储节点对应的第一校验条带单元以外的至少一个第二校验条带单元以及所述至少一个数据条带单元。
6.根据权利要求5所述的方法,其特征在于,所述向所述至少一个存储节点中的第四存储节点,发送所述第三存储节点对应的第一数据条带单元以外的至少一个第二数据条带单元以及所述至少一个校验条带单元之后,所述方法还包括:
当接收到读请求时,向第五存储节点发送所述读请求,所述读请求用于指示读取所述第一数据条带单元的数据块,所述第五存储节点存储的交叉备份的元数据包括所述第一数据条带单元的数据块的元数据。
7.根据权利要求5所述的方法,其特征在于,所述向所述至少一个存储节点中的第四存储节点,发送所述第三存储节点对应的第一数据条带单元以外的至少一个第二数据条带单元以及所述至少一个校验条带单元,包括下述至少一个步骤:
向所述至少一个第二数据条带单元写入所述第三存储节点的亚健康标记,所述亚健康标记用于指示所述第三存储节点处于亚健康状态;
向所述第四存储节点发送写请求,所述写请求携带所述第三存储节点的亚健康标记以及所述第四存储节点对应的第二数据条带单元。
8.一种数据恢复方法,其特征在于,所述方法包括:
存储至少一个数据条带单元,每个数据条带单元包括数据块以及交叉备份的元数据,所述交叉备份的元数据包括所述数据条带单元的数据块的元数据和所述数据条带单元以外的其他数据条带单元包括的数据块的元数据;
根据所述至少一个数据条带单元,获取第三存储节点的缺失元数据;
向所述第三存储节点发送所述缺失元数据。
9.根据权利要求8所述的方法,其特征在于,所述根据所述至少一个数据条带单元,获取第三存储节点的缺失元数据,包括:
从所述至少一个数据条带单元中,选取至少一个第二数据条带单元,所述第二数据条带单元的存储时间属于所述第三存储节点处于亚健康状态期间;
根据所述至少一个第二数据条带单元中的交叉备份的元数据,确定所述缺失元数据。
10.根据权利要求9所述的方法,其特征在于,所述从所述至少一个数据条带单元中,选取至少一个第二数据条带单元,包括下述至少一个步骤:
根据所述第三存储节点的标识,查询亚健康日志,得到所述至少一个第二数据条带单元,所述亚健康日志用于指示在所述第三存储节点处于亚健康状态期间存储的数据条带单元;
选取具有所述第三存储节点的亚健康标记的数据条带单元,作为所述至少一个第二数据条带单元,所述亚健康标记用于指示所述第三存储节点处于亚健康状态。
11.根据权利要求10所述的方法,其特征在于,所述根据所述第三存储节点的标识,查询亚健康日志之前,所述方法还包括:
在所述第三存储节点处于亚健康状态期间,为所述第三存储节点记录所述亚健康日志。
12.根据权利要求11所述的方法,其特征在于,所述在所述第三存储节点处于亚健康状态期间,为所述第三存储节点记录所述亚健康日志,包括下述至少一个步骤:
当接收到的写请求携带所述第三存储节点的亚健康标记以及数据条带单元时,向所述亚健康日志,写入所述第三存储节点对应的亚健康记录;
当接收到的数据条带单元携带所述第三存储节点的亚健康标记时,向所述亚健康日志,写入所述第三存储节点对应的亚健康记录。
13.根据权利要求8所述的方法,其特征在于,所述根据所述至少一个数据条带单元,获取第三存储节点的缺失元数据之前,所述方法还包括:
接收亚健康恢复消息,所述亚健康恢复消息用于指示所述第三存储节点处于亚健康恢复状态。
14.一种客户端节点,其特征在于,所述客户端节点,包括:
生成模块,用于根据待存储的至少一个数据块,生成至少一个数据条带单元,每个数据条带单元包括数据块以及交叉备份的元数据,所述交叉备份的元数据包括所述数据条带单元的数据块的元数据和所述数据条带单元以外的其他数据条带单元包括的数据块的元数据;
编码模块,用于对所述至少一个数据条带单元进行纠删码EC编码,得到至少一个校验条带单元;
分发模块,用于将所述至少一个数据条带单元以及所述至少一个校验条带单元,分发至至少一个存储节点。
15.一种存储节点,其特征在于,所述存储节点,包括:
存储模块,用于存储至少一个数据条带单元,每个数据条带单元包括数据块以及交叉备份的元数据,所述交叉备份的元数据包括所述数据块的元数据和所述数据条带单元以外的其他数据条带单元包括的数据块的元数据;
获取模块,用于根据所述至少一个数据条带单元,获取第三存储节点的缺失元数据;
发送模块,用于向所述第三存储节点发送所述缺失元数据。
16.一种客户端节点,其特征在于,所述客户端节点包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现如权利要求1至权利要求7任一项所述的数据存储方法所执行的操作。
17.一种存储节点,其特征在于,所述存储节点包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现如权利要求8至权利要求13任一项所述的数据恢复方法所执行的操作。
18.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令,所述指令由处理器加载并执行以实现如权利要求1至权利要求7任一项所述的数据存储方法所执行的操作。
19.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令,所述指令由处理器加载并执行以实现如权利要求8至权利要求13任一项所述的数据恢复方法所执行的操作。
CN201810922810.0A 2018-08-14 2018-08-14 数据存储方法、数据恢复方法、节点及存储介质 Active CN110825552B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201810922810.0A CN110825552B (zh) 2018-08-14 2018-08-14 数据存储方法、数据恢复方法、节点及存储介质
PCT/CN2019/087904 WO2020034695A1 (zh) 2018-08-14 2019-05-22 数据存储方法、数据恢复方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810922810.0A CN110825552B (zh) 2018-08-14 2018-08-14 数据存储方法、数据恢复方法、节点及存储介质

Publications (2)

Publication Number Publication Date
CN110825552A CN110825552A (zh) 2020-02-21
CN110825552B true CN110825552B (zh) 2021-04-09

Family

ID=69525070

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810922810.0A Active CN110825552B (zh) 2018-08-14 2018-08-14 数据存储方法、数据恢复方法、节点及存储介质

Country Status (2)

Country Link
CN (1) CN110825552B (zh)
WO (1) WO2020034695A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111510338B (zh) * 2020-03-09 2022-04-26 苏州浪潮智能科技有限公司 一种分布式块存储网络亚健康测试方法、装置及存储介质
CN112527561B (zh) * 2020-12-09 2021-10-01 广州技象科技有限公司 基于物联网云存储的数据备份方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102682012A (zh) * 2011-03-14 2012-09-19 成都市华为赛门铁克科技有限公司 一种文件系统内读写数据的方法及装置
CN105095013A (zh) * 2015-06-04 2015-11-25 华为技术有限公司 数据存储方法、恢复方法、相关装置以及系统
CN106662983A (zh) * 2015-12-31 2017-05-10 华为技术有限公司 分布式存储系统中的数据重建的方法、装置和系统
CN107885612A (zh) * 2016-09-30 2018-04-06 华为技术有限公司 数据处理方法和系统及装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8352501B2 (en) * 2010-01-28 2013-01-08 Cleversafe, Inc. Dispersed storage network utilizing revision snapshots
US10110676B2 (en) * 2014-08-22 2018-10-23 Nexenta Systems, Inc. Parallel transparent restructuring of immutable content in a distributed object storage system
CN104331478B (zh) * 2014-11-05 2017-09-22 浪潮电子信息产业股份有限公司 一种自精简存储系统数据一致性管理方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102682012A (zh) * 2011-03-14 2012-09-19 成都市华为赛门铁克科技有限公司 一种文件系统内读写数据的方法及装置
CN105095013A (zh) * 2015-06-04 2015-11-25 华为技术有限公司 数据存储方法、恢复方法、相关装置以及系统
CN106662983A (zh) * 2015-12-31 2017-05-10 华为技术有限公司 分布式存储系统中的数据重建的方法、装置和系统
CN107885612A (zh) * 2016-09-30 2018-04-06 华为技术有限公司 数据处理方法和系统及装置

Also Published As

Publication number Publication date
WO2020034695A1 (zh) 2020-02-20
CN110825552A (zh) 2020-02-21

Similar Documents

Publication Publication Date Title
US10795789B2 (en) Efficient recovery of erasure coded data
CN107807794B (zh) 一种数据存储方法和装置
CN106776130B (zh) 一种日志恢复方法、存储装置和存储节点
US9411685B2 (en) Parity chunk operating method and data server apparatus for supporting the same in distributed raid system
US7266716B2 (en) Method and recovery of data using erasure coded data from stripe blocks
EP2933733A1 (en) Data processing method and device in distributed file storage system
US20160006461A1 (en) Method and device for implementation data redundancy
CN110018783B (zh) 一种数据存储方法、装置及系统
US7284088B2 (en) Methods of reading and writing data
CN105404469A (zh) 一种视频数据的存储方法和系统
CN110651246B (zh) 一种数据读写方法、装置和存储服务器
CN109582213B (zh) 数据重构方法及装置、数据存储系统
CN108733311B (zh) 用于管理存储系统的方法和设备
US8225136B2 (en) Control method and storage device
CN107729536B (zh) 一种数据存储方法和装置
CN109144406B (zh) 分布式存储系统中元数据存储方法、系统及存储介质
WO2016029743A1 (zh) 一种生成虚拟机的逻辑磁盘的方法,及装置
CN110825552B (zh) 数据存储方法、数据恢复方法、节点及存储介质
US20190347165A1 (en) Apparatus and method for recovering distributed file system
US11010072B2 (en) Data storage, distribution, reconstruction and recovery methods and devices, and data processing system
CN114968668A (zh) 数据处理方法、装置、数据接入端及存储介质
US11429313B2 (en) Data processing method, device and distributed storage system
WO2021046693A1 (zh) 存储系统中数据处理方法、装置以及存储系统
CN111226200B (zh) 为分布式应用创建一致性快照的方法、装置和分布式系统
US10423506B1 (en) Fast rebuild using layered RAID

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20220214

Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province

Patentee after: Huawei Cloud Computing Technology Co.,Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd.