掌桥专利:专业的专利平台
掌桥专利
首页

数据校验方法、介质、装置及计算设备

文献发布时间:2024-04-18 20:00:50


数据校验方法、介质、装置及计算设备

技术领域

本公开的实施方式涉及计算机技术领域,更具体地,本公开的实施方式涉及一种数据校验方法、介质、装置及计算设备。

背景技术

本部分旨在为权利要求书中陈述的本公开的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是相关技术。

一致性是指在分布式存储系统领域中,对于多个服务节点,给定一系列操作,在约定协议的保障下,使得他们对处理结果达成“某种程度”的协同。

为了在分布式存储系统上满足这种一致性,最成熟的就是使用共识算法,例如Paxos、Raft。但是,首先系统在实现共识算法时可能出现错误,需要通过一些测试方法来验证原始数据和实际存储数据的一致性;其次,数据存储在硬盘或磁盘上,硬盘存在一定概率的介质损坏,磁盘出现坏块等现象,从而发生静默数据错误,导致严重的数据丢失、数据不一致,需要能快速的进行数据一致性校验以支持数据的恢复;另外,数据在网络传输、内存数据错误等情况下都有可能出现需要存储的数据发生故障的风险。

当分布式存储系统使用Raft协议时,则在集群中存在领导节点、候选节点和跟随节点,领导节点从客户端接收到操作请求后,会把这条指令加到它的日志中,然后通过远程过程调用让其他节点复制这条日志。当这条日志被复制之后,领导节点会将这条日志应用到它的整体数据读写的状态机中,并且向客户端返回执行结果,以实现将一份数据进行多副本存储。

基于Raft分布式存储系统,如何使得分布式存储系统的数据一致性验证机制更加全面和完善,为亟待解决的问题。

发明内容

本公开提供一种数据校验方法、介质、装置及计算设备,基于Raft分布式存储系统,来实现写入一致性验证和节点一致性验证,其中,写入一致性验证用于验证客户端之前向所述领导节点的所述待校验副本集写入的数据与所述领导节点当前存储的数据是否一致;所述节点一致性验证用于验证所述领导节点中所述待校验副本集当前存储的数据和所述跟随节点中所述待校验副本集当前存储的数据是否一致,使得分布式存储系统的数据一致性验证机制更加全面和完善。

在本公开实施方式的第一方面中,提供了一种数据校验方法,应用于分布式存储系统中的元数据管理器,该分布式存储系统包括元数据管理器和多个数据节点,所述元数据管理器与多个数据节点通信;所述方法包括:

响应于获取到数据校验请求,则向目标数据节点发送所述数据校验请求,以使所述目标数据节点执行数据校验;所述数据校验请求用于指示对待校验副本集进行校验;所述目标数据节点为针对所述待校验副本集的领导节点;针对所述待校验副本集的跟随节点与所述领导节点中分别存储有所述待校验副本集;所述数据校验请求用于指示所述目标数据节点对所述待校验副本集进行写入一致性验证和节点一致性验证,其中,所述写入一致性验证用于验证客户端之前向所述领导节点的所述待校验副本集写入的数据与所述领导节点当前存储的数据是否一致;所述节点一致性验证用于验证所述领导节点中所述待校验副本集当前存储的数据和所述跟随节点中所述待校验副本集当前存储的数据是否一致;

接收所述目标数据节点发送的校验结果。

在本公开实施方式的第二方面中,提供了一种数据校验方法,应用于分布式存储系统中的数据节点,该分布式存储系统包括元数据管理器和多个数据节点,所述元数据管理器与多个数据节点通信;所述方法包括:

接收元数据管理器发送的数据校验请求;所述数据校验请求用于指示对待校验副本集进行校验;所述数据节点为针对所述待校验副本集的领导节点;针对所述待校验副本集的跟随节点和所述领导节点中分别存储有所述待校验副本集;所述数据校验请求用于指示所述数据节点对所述待校验副本集进行写入一致性验证和节点一致性验证,其中,所述写入一致性验证用于验证客户端之前向领导节点的所述待校验副本集写入的数据与所述领导节点当前存储的数据是否一致;所述节点一致性验证用于验证所述领导节点中所述待校验副本集当前存储的数据和所述跟随节点中所述待校验副本集当前存储的数据是否一致;

根据所述数据校验请求对所述待校验副本集进行写入一致性验证和节点一致性验证,以得到校验结果;

向所述元数据管理器发送所述校验结果。

在本公开实施方式的第三方面中,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如第一方面或第二方面提供的方法。

在本公开实施方式的第四方面中,提供了一种数据校验装置,应用于分布式存储系统中的元数据管理器,该分布式存储系统包括元数据管理器和多个数据节点,所述元数据管理器与多个数据节点通信;所述装置包括:

第一发送模块,用于响应于获取到数据校验请求,则向目标数据节点发送所述数据校验请求,以使所述目标数据节点执行数据校验;所述数据校验请求用于指示对待校验副本集进行校验;所述目标数据节点为针对所述待校验副本集的领导节点;针对所述待校验副本集的跟随节点与所述领导节点中分别存储有所述待校验副本集;所述数据校验请求用于指示所述目标数据节点对所述待校验副本集进行写入一致性验证和节点一致性验证,其中,所述写入一致性验证用于验证客户端之前向所述领导节点的所述待校验副本集写入的数据与所述领导节点当前存储的数据是否一致;所述节点一致性验证用于验证所述领导节点中所述待校验副本集当前存储的数据和所述跟随节点中所述待校验副本集当前存储的数据是否一致;

第一接收模块,用于接收所述目标数据节点发送的校验结果。

在本公开实施方式的第五方面中,提供了一种数据校验装置,应用于分布式存储系统中的数据节点,该分布式存储系统包括元数据管理器和多个数据节点,所述元数据管理器与多个数据节点通信;所述装置包括:

第二接收模块,用于接收元数据管理器发送的数据校验请求;所述数据校验请求用于指示对待校验副本集进行校验;所述数据节点为针对所述待校验副本集的领导节点;针对所述待校验副本集的跟随节点和所述领导节点中分别存储有所述待校验副本集;所述数据校验请求用于指示所述数据节点对所述待校验副本集进行写入一致性验证和节点一致性验证,其中,所述写入一致性验证用于验证客户端之前向领导节点的所述待校验副本集写入的数据与所述领导节点当前存储的数据是否一致;所述节点一致性验证用于验证所述领导节点中所述待校验副本集当前存储的数据和所述跟随节点中所述待校验副本集当前存储的数据是否一致;

验证模块,用于根据所述数据校验请求对所述待校验副本集进行写入一致性验证和节点一致性验证,以得到校验结果;

第二发送模块,用于向所述元数据管理器发送所述校验结果。

在本公开实施方式的第六方面中,提供了一种计算设备,包括:至少一个处理器和存储器;

所述存储器存储计算机执行指令;

所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如第一方面或第二方面提供的数据校验方法。

在本公开实施方式中,提供一种数据校验方法、介质、装置及计算设备,该方法通过响应于获取到数据校验请求,则向目标数据节点发送所述数据校验请求,以使所述目标数据节点执行数据校验;所述数据校验请求用于指示对待校验副本集进行校验;所述目标数据节点为针对所述待校验副本集的领导节点;针对所述待校验副本集的跟随节点与所述领导节点中分别存储有所述待校验副本集;所述数据校验请求用于指示所述目标数据节点对所述待校验副本集进行写入一致性验证和节点一致性验证,其中,所述写入一致性验证用于验证客户端之前向所述领导节点的所述待校验副本集写入的数据与所述领导节点当前存储的数据是否一致;所述节点一致性验证用于验证所述领导节点中所述待校验副本集当前存储的数据和所述跟随节点中所述待校验副本集当前存储的数据是否一致,接收所述目标数据节点发送的校验结果。采用上述方法可以实现对于分布式存储系统的写入一致性验证和节点一致性验证,使得分布式存储系统的数据一致性验证机制更加全面和完善。

附图说明

通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,其中:

图1示意性地示出了根据本公开实施方式提供的应用场景示意图;

图2示意性地示出了根据本公开一实施例提供的数据校验方法的流程示意图;

图3示意性地示出了根据本公开另一实施例提供的数据校验方法的流程示意图;

图4示意性地示出了根据本公开又一实施例提供的数据校验方法的流程示意图;

图5示意性地示出了根据本公开又一实施例提供的数据校验方法的流程示意图;

图6示意性地示出了根据本公开一实施例提供的写入一致性验证的示意图;

图7示意性地示出了根据本公开一实施例提供的节点一致性验证的示意图;

图8示意性地示出了根据本公开一实施例提供的计算机可读存储介质的结构示意图;

图9示意性地示出了根据本公开一实施例提供的数据校验装置的结构示意图;

图10示意性地示出了根据本公开另一实施例提供的数据校验装置的结构示意图;

图11示意性地示出了根据本公开一实施例提供的计算设备的结构示意图。

在附图中,相同或对应的标号表示相同或对应的部分。

具体实施方式

下面将参考若干示例性实施方式来描述本公开的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本公开,而并非以任何方式限制本公开的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

本领域技术人员知道,本公开的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。

据本公开的实施方式,提出了一种数据校验方法、介质、装置及计算设备。

在本文中,需要理解的是,所涉及的术语仅用于方便理解,并未表示对含义的限制。此外,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。

另外,本公开所涉及的数据可以为经用户授权或者经过各方充分授权的数据,对数据的采集、传播、使用等,均符合国家相关法律法规要求,本公开实施方式/实施例可以互相组合。

下面是本公开中涉及的术语说明:

静默数据错误:数据在存储系统传输中,经过了多个部件、多种传输通道和复杂的软件处理过程,其中任意一个环节发生错误都可能会导致数据错误。但是这种错误一般无法被立即检测出来,而是后续通过应用在访问数据过程中,才发现数据已经出错,这种数据很难在数据发生错误那一刻被检查出来的错误,称为静默数据破坏。

数据节点(Chunkserver),负责数据存储,数据存储的最小单元是chunk,支持覆盖写,管理数据存储的基本单位是副本集(Copyset)。数据节点使用Raft协议做复制,保持数据的一致性和容灾。副本以Copyset为单位进行管理,不同节点上的多个Copyset构成一个复制组(Raft Group),互为副本。数据在多个数据节点之间的负载均衡由元数据管理器MDS调度,是以副本集为单位进行调度。

发明概述

本发明人发现,当基于Raft协议向各个数据节点写入数据的过程中,如果Raft日志被复制到半数以上的数据节点后,就会由领导节点向客户端返回写成功的消息。此时客户端认为各个数据节点中均正确存储有该数据,但是,如果在这个时候出现一些故障,比如网络故障、节点故障等,则有可能导致剩余的数据节点中发生数据写入错误。

相关技术中的一致性校验方法,只能做到对客户端层面数据存储的一致性校验,也就是说,当对某一待校验副本集中的数据进行校验时,读取的数据只是领导节点中的待校验副本集数据,而分布式存储系统的底层多是以多副本的方式存储,多副本的方式存储是指,将同一份数据存储在多个数据节点中,示例性的,将同一份数据存储在领导节点和多个跟随节点中,而上述的一致性校验方法无法验证各个跟随节点中的数据是否正确,然而,在写入数据的过程中,部分跟随节点中可能存在数据写入错误的情况,或者,在数据成功写入各个数据节点后,部分跟随节点中的数据可能存在数据发生错误的情况。

基于上述问题,本公开在进行数据一致性校验时,不仅可以对领导节点中待校验副本集中的数据进行校验,还可以对各个跟随节点中待校验副本集中的数据进行校验,从而避免出现领导节点向客户端返回写成功的消息,而实际上剩余的数据节点中的数据写入错误的情况出现,使得分布式存储系统的数据一致性验证机制更加全面和完善。

在本申请的方案中,通过元数据管理器与多个数据节点进行通信,当存在数据校验需求时,可以向目标数据节点发送针对待校验副本集的数据校验请求,该目标数据节点为针对待校验副本集的领导节点,该校验请求表示对目标数据节点进行写入一致性验证和节点一致性验证,写入一致性验证可以验证客户端之前写入的数据与领导节点当前存储的数据是否一致,节点一致性验证可以验证领导节点中待校验副本集当前存储的数据与各个跟随节点中待校验副本集中当前存储的数据是否一致,采用上述方法可以实现对于分布式存储系统的写入一致性验证和节点一致性验证,使得分布式存储系统的数据一致性验证机制更加全面和完善。

在介绍了本公开的基本原理之后,下面具体介绍本公开的各种非限制性实施方式。

应用场景总览

首先参考图1所示,图1示意性地示出了根据本公开实施方式提供的应用场景示意图,如图1所示,元数据管理器与多个数据节点通信,本申请的数据校验方法可以分别应用在元数据管理器和数据节点上,针对元数据管理器,可以接收客户端发送的数据校验请求,并向数据校验请求中待校验副本集对应的领导节点(一个数据节点)发送数据校验请求,领导节点可以根据接收的数据校验请求进行数据校验,领导节点在进行数据校验时,可以进行写入一致性验证和节点一致性验证,从而生成校验结果,并将校验结果发送给元数据管理器。

示例性方法

下面结合图1的应用场景,参考图2-图7来描述根据本公开示例性实施方式的数据校验方法。需要注意的是,上述应用场景仅是为了便于理解本公开的精神和原理而示出,本公开的实施方式在此方面不受任何限制。相反,本公开的实施方式可以应用于适用的任何场景。

参考图2,图2示意性地示出了根据本公开一实施例提供的数据校验方法的流程示意图。如图2所示,该方法应用于分布式存储系统中的元数据管理器,该分布式存储系统包括元数据管理器和多个数据节点,所述元数据管理器与多个数据节点通信;该方法包括:

步骤S201、响应于获取到数据校验请求,则向目标数据节点发送所述数据校验请求,以使所述目标数据节点执行数据校验;

所述数据校验请求用于指示对待校验副本集进行校验;所述目标数据节点为针对所述待校验副本集的领导节点;针对所述待校验副本集的跟随节点与所述领导节点中分别存储有所述待校验副本集;所述数据校验请求用于指示所述目标数据节点对所述待校验副本集进行写入一致性验证和节点一致性验证,其中,所述写入一致性验证用于验证客户端之前向所述领导节点的所述待校验副本集写入的数据与所述领导节点当前存储的数据是否一致;所述节点一致性验证用于验证所述领导节点中所述待校验副本集当前存储的数据和所述跟随节点中所述待校验副本集当前存储的数据是否一致。

当在对数据进行校验时,可以由元数据管理器(MDS)进行调度。可选的,可以由元数据管理器中的调度模块(ScanSchedule模块)进行调度。可选的,元数据管理器可以与多个数据节点(chunkserver)通信。元数据管理器可以获取到数据校验请求,具体的,可以为接收到来自于客户端发送的数据校验请求,或者,元数据管理器还可以生成数据校验请求。示例性的,在元数据管理器中可以设置数据校验请求的生成逻辑,如定时产生数据校验请求。

数据校验请求中通常可以指示出待校验副本集(待校验副本集中包括多个副本),每一副本表示存储的一个数据。为了提高系统的可靠性,当将数据存储在数据节点中时,通常会以多副本的形式存储,示例性的,针对一个数据1,将其分片处理,并将分片处理后的数据分别存储在数据节点1、数据节点2和数据节点3中,则三个数据节点中存储的该数据互为副本。

针对一个待校验副本集而言,存在一个领导节点和跟随节点。示例性的,针对上述数据1,当其对应的副本集作为待校验副本集时,数据节点1可能为领导节点,而数据节点2和数据节点3为跟随节点。在元数据管理器中存储有各个副本集对应的领导节点和跟随节点的信息。

当元数据管理器在获取到数据校验请求时,可以向目标数据节点发送数据校验请求,从而使得目标数据节点执行数据校验的动作,此处的目标数据节点为针对该待校验副本集的领导节点。在发送数据校验请求时,可以通过心跳信息来发送数据校验请求。

当目标数据节点在接收到该数据校验请求时,则可以执行数据校验的动作,具体的,目标数据节点在进行数据校验时,可以进行写入一致性验证和节点一致性验证,从而对写入的数据和各个数据节点中存储的数据进行一致性校验。

写入一致性验证是指,领导节点中的待校验副本集当前存储的数据与客户端之前向该领导者节点中的待校验副本集传入的数据是否一致。节点一致性验证是指,领导节点中的待校验副本集中当前存储的数据和各个跟随节点中的待校验副本集中当前存储的数据是否一致。示例性的,在进行节点一致性验证时,可以将领导节点中的待校验副本集中当前存储的数据与全部跟随节点中的待校验副本集中当前存储的数据一一对比,以实现节点一致性验证。通过目标数据节点执行写入一致性验证和节点一致性验证,可以实现不仅对领导节点中的数据进行一致性校验,以及,对各个跟随节点中的数据进行一致性校验。

可选的,在向目标数据节点发送数据校验请求时,可以是向目标数据节点中的扫描管理模块(ScanManager模块)发送数据校验请求。

可选的,针对不同的待校验副本集,对应的目标数据节点不同。示例性的,针对待校验副本集1,其对应目标数据节点1,针对待校验副本集2,其对应目标数据节点2,等等。在同一时刻,不同的数据节点可以同时执行对相应的待校验副本集的数据校验动作。

步骤S202、接收所述目标数据节点发送的校验结果。

当元数据管理器在向目标数据节点发送数据校验请求后,则目标数据节点可以对待校验副本集进行校验并获取校验结果,当元数据管理器在获取校验结果后,可以向元数据管理器发送该校验结果,以根据校验结果执行相应的操作。

示例性的,当校验结果为待校验副本集未通过写入一致性验证,和/或,未通过节点一致性验证时,则可以向用户发送告警信息。

在本公开实施例中,响应于获取到数据校验请求,则向目标数据节点发送所述数据校验请求,以使所述目标数据节点执行数据校验;所述数据校验请求用于指示对待校验副本集进行校验;所述目标数据节点为针对所述待校验副本集的领导节点;针对所述待校验副本集的跟随节点与所述领导节点中分别存储有所述待校验副本集;所述数据校验请求用于指示所述目标数据节点对所述待校验副本集进行写入一致性验证和节点一致性验证,其中,所述写入一致性验证用于验证客户端之前向所述领导节点的所述待校验副本集写入的数据与所述领导节点当前存储的数据是否一致;所述节点一致性验证用于验证所述领导节点中所述待校验副本集当前存储的数据和所述跟随节点中所述待校验副本集当前存储的数据是否一致;接收所述目标数据节点发送的校验结果。采用上述方法可以实现对于分布式存储系统的写入一致性验证和节点一致性验证,使得分布式存储系统的数据一致性验证机制更加全面和完善。

图3示意性地示出了根据本公开另一实施例提供的数据校验方法的流程示意图;如图3所示,所述方法包括:

步骤S301、响应于获取到数据校验请求,则检查所述目标数据节点中所述待校验副本集的扫描状态信息;

当元数据管理器在获取到数据校验请求后,元数据管理器可以执行扫描同步(ScanPeer)流程,也就是将确定的各个待校验副本集同步给相应的目标数据节点。

可选的,针对任一待校验副本集,元数据管理器可以确定与该待校验副本集对应的目标数据节点,并且,在元数据管理器中还存储有该待校验副本集的扫描状态信息,根据该待校验副本集的扫描状态信息可以确定是否继续向该目标数据节点发送数据校验请求。

步骤S302、响应于所述扫描状态信息为未收到所述数据校验请求,则向所述目标数据节点发送所述数据校验请求,将所述扫描状态信息设置为扫描中或等待中;其中,当所述待校验副本集为本次校验的副本集时,则对应的所述扫描状态信息为扫描中;当所述待校验副本集为非本次校验的副本集时,则对应的扫描状态信息为等待中。

扫描状态信息用于描述待校验副本集的扫描状态,当扫描状态信息为未收到数据校验请求时,则本次需要向目标数据节点发送该数据校验请求。示例性的,在各个数据节点中,存在CopySetInfo这一数据,用于描述待校验副本集的信息。可选的,在该数据中存在ConfigChangeInfo的字段,在该字段中存在ConfigChangeType的属性信息,当ConfigChangeType为None时,则表示扫描状态信息为未收到数据校验请求。

当在向目标数据节点发送数据校验请求后,还可以将扫描状态信息进行修改,可以将扫描状态信息设置为扫描中或等待中,可选的,可以根据待校验副本集是否为本次校验的副本集进行设置,当为本次校验的副本集时,则将扫描状态信息设置为扫描中;当为非本次校验的副本集时,则将扫描状态信息设置为等待中。目标数据节点在进行数据校验时,可以先对本次校验的副本集进行数据校验,当校验完成后,可以继续对非本次校验的副本集进行校验。

步骤S303、响应于所述扫描状态信息为扫描中,则不执行任何操作;以及,响应于所述扫描状态信息为等待中,则不执行任何操作。

当扫描状态信息为扫描中,或者,为等待中时,则表示已经向目标数据节点下发针对待校验副本集的数据校验请求,则当前无需再次向该目标数据节点发送针对该待校验副本集的数据校验请求,也就是可以不执行任何操作。

通过检查待校验副本集的扫描状态信息,以确定当前是否需要向对应的目标数据节点发送数据校验请求,避免在已经向目标数据节点发送针对待校验副本集的数据校验请求后再次发送数据校验请求。

步骤S304、接收所述目标数据节点发送的扫描已完成的扫描状态信息,并将接收到扫描已完成的扫描状态信息的时间确定为所述待校验副本集的扫描完成时间;所述扫描已完成的扫描状态信息为所述目标数据节点在完成写入一致性验证和节点一致性验证后向所述元数据管理器发送的信息。

当目标数据节点在接收到数据校验请求后,可以执行数据校验的动作,当在校验完成后,可以生成扫描已完成的扫描状态信息,并将扫描已完成的扫描状态信息发送给元数据管理器,元数据管理器可以接收该扫描已完成的扫描状态信息,并将接收到扫描已完成的扫描状态信息的时间确定为扫描完成时间。

后续元数据管理器在确定一副本集是否为待校验副本集时,可以基于该副本集对应的扫描完成时间来确定。

通过向元数据管理器发送扫描已完成的扫描状态信息,可以使得元数据管理器获取该副本对应的最新扫描完成时间,使得元数据管理器后续可以基于该信息确定待校验副本集。

步骤S305、接收所述目标数据节点发送的校验结果。

上述步骤S305可以参考图2所示实施例中的步骤S202,此处不再赘述。

在数据校验的过程中,分布式存储系统可能会存在一些异常情况,下面针对出现的异常情况进行说明。

在本公开的一个实施例中,所述方法还包括:

响应于接收到取消校验的请求,则将所述取消校验的请求发送给正在校验的数据节点,以使所述正在校验的数据节点停止执行数据校验。

当在进行数据校验时,完整的数据校验过程会对元数据管理器和数据节点造成一部分压力,当系统的压力较大时,可以取消校验。

可选的,取消校验的请求可以由客户端发送给元数据管理器,元数据管理器可以将取消校验的请求发送给当前正在进行校验的数据节点,当数据节点在接收到取消校验的请求后,则会停止执行数据校验的动作。

通过在接收到取消校验的请求时,将取消校验的请求发送给元数据管理器,可以当系统压力较大时,暂时停止进行数据校验,以缓解系统的压力。

在本公开的一个实施例中,向目标数据节点发送所述数据校验请求,还包括:

当所述目标数据节点在校验中,响应于在预设时长内未能与所述目标数据节点成功建立连接,则取消针对所述待校验副本集的数据校验请求,并确定新的待校验副本集。

在数据校验的整个过程中,系统中的数据节点可能会发生故障,当发生故障时,元数据管理器则无法与数据节点建立连接,因此,可以根据元数据管理器与目标数据节点未能成功建立连接的时长来确定该目标数据节点是否发生故障。可选的,元数据管理器在特定时间内未接收到目标数据节点发送的预期的结果或响应,则表示元数据管理器与目标数据节点未能成功建立连接的时长超过预设时长(timeout,超时时长)。

若确定目标数据节点发生故障,则可以将目标数据节点对应的待校验副本集的数据校验请求取消。当在取消一部分数据校验请求后,则可以通过元数据管理器确定新的待校验副本集,以实现对新的待校验副本集进行数据校验。

通过将发生故障的数据节点对应的待校验副本集的数据校验请求取消,可以实现当一个数据节点在发生故障时,对其他数据节点对应的待校验副本集进行校验,以提高数据校验的效率。

在本公开的一个实施例中,所述元数据管理器为备用元数据管理器;所述方法还包括:

当所述目标数据节点在校验中,响应于主元数据管理器发生故障,则重新根据获取到的所述数据校验请求,向所述目标数据节点发送所述数据校验请求。

在系统中,元数据管理器的数量可能不止一个,可能会存在主元数据管理器和备用元数据管理器,以便当主元数据管理器在发生故障时,备用元数据管理器可以切换为主元数据管理器,同时,扫描同步(ScanPeer)流程也需要重新构建。

具体的,新的主元数据管理器(之前为备用元数据管理器)可以根据接收到的数据校验请求或自身生的数据校验请求,来向目标数据节点重新发送数据校验请求,使得目标数据节点在执行完针对待校验副本集的数据校验的动作后,可以生成扫描已完成的扫描状态信息,并将扫描已完成的扫描状态信息发送给该新的主元数据管理器,新的元数据管理器会记录该待校验副本集的最新的扫描完成时间(last_scan时间)。

通过当主元数据管理器发生故障时,通过备用元数据管理器重新向目标数据节点下发数据校验请求,使得目标数据节点可以将需要反馈的信息准确发送给该新的主元数据管理器。

图4为示意性地示出了根据本公开又一实施例提供的数据校验方法的流程示意图,该方法包括:

步骤S401、响应于获取到数据校验请求,则根据所述数据校验请求确定所述待校验副本集。

在进行数据校验时,还可以确定待校验副本集。具体的,可以在获取到数据校验请求时,根据数据校验请求确定待校验副本集。

由于数据校验请求的不同,则在确定待校验副本集时,也存在不同的方法。其中,数据校验请求可以是客户端发送的数据校验请求,还可以是元数据管理器自身产生的定时任务类型的请求。下面分别针对上述两种数据校验请求来确定待校验副本集的过程进行说明。

在本公开的一个实施例中,根据所述数据校验请求确定所述待校验副本集,包括:

响应于确定所述数据校验请求为来自于客户端的请求,则根据所述数据校验请求中的指定文件的信息确定所述待校验副本集;所述待校验副本集用于存储所述指定文件;所述指定文件的信息包括指定文件名称、包含所述指定文件的目录和/或存储卷。

当数据校验请求为客户端发送的请求时,则在数据校验请求中包含有指定文件的信息,从而基于该指定文件的信息确定待校验副本集。示例性的,指定文件的信息可以为指定文件的名称,或者,包含指定文件的目录或存储卷。例如,指定文件的信息为文件1,或者,目录1,或者,存储卷1,则基于上述信息可以确定出待校验副本集。

此外,针对与客户端的请求对应的待校验副本集,则控制目标数据节点在进行数据校验时,可以优先对上述的待校验副本集进行校验,以提高用户的使用体验。

基于上述的指定文件的信息,元数据管理器可以方便及准确的确定出待校验副本集。

在本公开的一个实施例中,根据所述数据校验请求确定所述待校验副本集,包括:

响应于确定所述数据校验请求为自身产生的定时任务类型的请求,则针对每一副本集,判断当前时间与记录的所述副本集最新的扫描完成时间的时间间隔是否大于预设时间间隔,以及,当前时间是否处于校验时间段;

响应于所述时间间隔大于所述预设时间间隔且所述当前时间处于所述校验时间段,则将所述副本集确定为所述待校验副本集;所述校验时间段为预先配置的、用于进行数据校验的时间段。

针对元数据管理器自身产生的定时任务类型的请求,则可以基于一定的规则来确定待校验副本集。示例性的,当元数据管理器在产生针对多个副本集的数据校验请求时,则可以针对每一副本集,判断该副本集是否为待校验副本集。

具体的,在元数据管理器中存储有该副本集每次扫描完成的时间,可以获取该副本集最新的扫描完成时间,确定当前时间与最新的扫描完成时间的时间间隔,当该时间间隔大于预设时间间隔且当前时间处于校验时间段时,则表示该副本集为待校验副本集;相反的,当该时间间隔小于或等于预设时间间隔,或者,当前时间未处于校验时间段,则表示该副本集不是待校验副本集,本次无需进行校验。

可选的,校验时间段可以根据实际情况进行设置。示例性的,检验时间段可以为凌晨1:00至凌晨4:00的时间段。校验时间段为对待校验副本集进行校验的时间段,为了降低对客户端的读写性能造成的影响,可以在凌晨时间段进行数据校验。

通过上述方法确定与定时任务类型的请求中的待校验副本集,可以根据副本集的扫描完成时间确定待校验副本集,避免频繁对某一副本集进行校验,保证系统所存储的数据的可靠性的前提下,提高数据校验的效率。

步骤S402、响应于所述待校验副本集的数量大于并发度数量,则从所述待校验副本集中确定本次校验的副本集以及非本次校验的副本集;所述并发度数量为各个数据节点同时进行校验的副本集数量之和的上限值。

当在同一时刻存在较多的待校验副本集时,可以将待校验副本集划分为本次校验的副本集和非本次校验的副本集。可选的,可以预先设置并发度数量,当待校验副本集的数量大于并发度数量时,则从待校验副本集中确定本次校验的副本集和非本次校验的副本集,其中,本次校验的副本集的数量不能超过设置的并发度数量。

在元数据管理器向目标数据节点发送数据校验请求时,可以将本次校验的副本集和非本次校验的副本集对应的数据校验请求均发送给相应的目标数据节点,目标数据节点可以根据副本集的类型确定在当前时刻是否进行校验。

并发度数量与分布式存储系统中的数据节点相关,针对所有的数据节点,存在一个并发度数量,为分布式存储系统中各个数据节点同时进行校验的副本集数量之和的上限值。示例性的,针对一个分布式存储系统,存在5个数据节点,当并发度数量为100时,则在进行数据校验的动作时,各个数据节点同时进行数据校验的数量的上限值为100。

通过设置并发度数量可以对分布式存储系统同时进行校验的副本集数量进行限制,防止对元数据管理器和数据节点造成较大的压力,降低数据校验对系统整体性能的影响。

步骤S403、接收所述目标数据节点发送的校验结果。

数据校验过程与数据写入过程相关,此处对元数据管理器将待写入数据写入领导节点中的待校验副本集的过程进行说明。

在本公开的一个实施例中,所述待校验副本集中包含多个数据块,所述方法还包括:

响应于接收到将待写入数据写入所述领导节点中的所述待校验副本集中的指令时,对待写入数据进行拆分,对拆分后的每一分片数据分别进行循环冗余校验,以得到每一分片数据分别对应的CRC值;

针对每一分片数据,将所述分片数据对应的CRC值存储到所述数据块的目标位置,将所述分片数据存储到所述数据块中除所述目标位置以外的其他位置;所述CRC值用于进行写入一致性验证和节点一致性验证。

数据校验的过程与数据写入的过程相关,下面对将待写入数据写入领导节点中的待校验副本集的过程进行说明。

在接收到客户端发送的数据写入请求,以将待写入数据写入领导节点中的待校验副本集时,为了便于后续将写入的数据和存储在领导节点中待校验副本集的数据进行对比,可以在写入数据时,通过元数据管理器将待写入数据进行拆分,并针对拆分后的每一分片数据分别进行循环冗余校验,以得到每一分片数据对应的CRC值。

待校验副本集中包含多个数据块(chunk),在将待写入数据写入到待校验副本集时,可以将每一分片数据与一个数据块进行对应。针对任一分片数据,将该分片数据对应的CRC值存储到相应数据块的目标位置,如前八位字节,将分片数据存储到相应数据块中除目标位置以外的其他位置,从而在后续对待校验副本集中的某一数据块中的数据进行校验时,可以直接将获取数据块中存储的数据,并计算CRC值,将计算的CRC值与该数据块中目标位置存储的CRC值进行比较。

由于存储在数据块中目标位置的CRC值可以表示客户端之前写入该数据块的数据,而当前计算的CRC值可以表示当前该数据块中存储的数据,将二者进行比较可以进行写入一致性验证。

在向领导节点的副本集中写入数据时,通过计算待写入数据的CRC值,并存储在待校验副本集中,可以仅根据存储的该CRC值和待写入数据来确定数据的一致性。

上面各个实施例是以元数据管理器为执行主体对数据校验过程进行的说明,下面将以数据节点为执行主体对数据校验过程进行说明。

图5示意性地示出了根据本公开又一实施例提供的数据校验方法的流程示意图;如图5所示,所述方法应用于分布式存储系统中的数据节点,该分布式存储系统包括元数据管理器和多个数据节点,所述元数据管理器与多个数据节点通信;所述方法包括:

步骤S501、接收元数据管理器发送的数据校验请求。

所述数据校验请求用于指示对待校验副本集进行校验;所述数据节点为针对所述待校验副本集的领导节点;针对所述待校验副本集的跟随节点和所述领导节点中分别存储有所述待校验副本集;所述数据校验请求用于指示所述数据节点对所述待校验副本集进行写入一致性验证和节点一致性验证,其中,所述写入一致性验证用于验证客户端之前向领导节点的所述待校验副本集写入的数据与所述领导节点当前存储的数据是否一致;所述节点一致性验证用于验证所述领导节点中所述待校验副本集当前存储的数据和所述跟随节点中所述待校验副本集当前存储的数据是否一致。

针对数据节点来说,当在进行数据校验时,可以先接收元数据管理器发送的数据校验请求,在数据校验请求指示对待校验副本集进行校验。由于数据为多副本存储方式,也就是一个待校验副本集存储在多个数据节点中,其中,针对一个待校验副本集存在一个领导节点和跟随节点。当在对某一待校验副本集进行数据校验时,可以向该待校验副本集对应的领导节点发送数据校验请求。

数据节点在接收到针对某一待校验副本集的数据校验请求时,则该数据节点为针对该待校验副本集的领导节点,该领导节点可以执行针对该待校验副本集的数据校验的动作。

步骤S502、根据所述数据校验请求对所述待校验副本集进行写入一致性验证和节点一致性验证,以得到校验结果。

数据节点在进行数据校验时,可以进行写入一致性验证和节点一致性验证。通过进行写入一致性验证可以验证客户端之前向领导节点的待校验副本集写入的数据与领导节点中当前存储的数据是否一致。通过节点一致性验证可以验证领导节点中待校验副本集当前存储的数据和对应的各个跟随节点中的待校验副本集当前存储的数据是否一致。

通过进行节点一致性验证可以实现不仅做到客户端层面的数据存储的一致性,也就是不仅仅验证领导节点中待校验副本集的数据与之前向领导节点的待校验副本集写入的数据是否一致,还可以验证其他跟随节点中待校验副本集中的数据是否一致。

步骤S503、向所述元数据管理器发送所述校验结果。

当数据节点在进行数据校验后,可以得到校验结果,从而可以将校验结果发送给元数据管理器。

在本公开实施例中,通过接收元数据管理器发送的数据校验请求,所述数据校验请求用于指示对待校验副本集进行校验;所述数据节点为针对所述待校验副本集的领导节点;针对所述待校验副本集的跟随节点和所述领导节点中分别存储有所述待校验副本集;所述数据校验请求用于指示所述数据节点对所述待校验副本集进行写入一致性验证和节点一致性验证,根据所述数据校验请求对所述待校验副本集进行写入一致性验证和节点一致性验证,以得到校验结果。采用上述方法可以实现对于分布式存储系统的写入一致性验证和节点一致性验证,使得分布式存储系统的数据一致性验证机制更加全面和完善。

数据节点在进行数据校验时,会进行写入一致性验证和节点一致性验证,下面对两种数据校验分别进行详细说明。

在本公开的一个实施例中,根据所述数据校验请求对所述待校验副本集进行写入一致性验证和节点一致性验证,包括:

响应于接收到所述数据校验请求,针对每一数据块,则从所述待校验副本集中的所述数据块读取分片数据,对读取的所述分片数据进行循环冗余校验,以得到CRC校验值;

从所述数据块中取出所述CRC值,比较各个数据块对应的所述CRC校验值与所述CRC值以得到第一校验结果;所述第一校验结果表征相应的CRC校验值与所述CRC值相一致,则所述待校验副本集通过了所述写入一致性验证;所述第一校验结果表征相应的CRC校验值与所述CRC值不一致,则所述待校验副本集未通过所述写入一致性验证;

将所述第一校验结果发送给所述元数据管理器。

当在接收到数据校验请求时,可以先进行写入一致性验证,再进行节点一致性验证;或者,也可以先进行节点一致性验证,再进行写入一致性验证;或者,还可以同时进行写入一致性验证和节点一致性验证。

针对一个待校验副本集,其中存在多个数据块(chunk),当在进行写入一致性验证时,针对每一数据块可以分别进行数据校验。或者,在数据校验请求中也可以指示需要进行校验的数据块,则在进行数据校验时,则仅对该数据块进行校验。

图6示意性地示出了根据本公开一实施例提供的写入一致性验证的示意图,如图6所示,由于在将数据存储到数据节点时,元数据管理器将数据进行了拆分,得到多个分片数据。针对每一分片数据,将分片数据和分片数据对应的CRC值存储在同一数据块中,如CRC值存储在数据块的前8个字节中,分片数据存储在数据块中除前8个字节以外的位置。

在进行写入一致性验证时,可以读取数据块中存储的分片数据,并读取该数据块中的CRC值,对读取的分片数据进行循环冗余校验得到CRC校验值,从而将读取的CRC值和CRC校验值进行对比,以得到第一校验结果。当待校验副本集中各个数据块的校验结果均为CRC校验值与CRC值相一致时,则表示待校验副本集通过了写入一致性验证;当存在至少一个数据块的校验结果为CRC校验值与CRC值不一致,则表示相应的待校验副本集未通过写入一致性验证。

当在获取第一校验结果后可以将该第一校验结果发送给元数据管理器,当第一校验结果为未通过写入一致性验证时,则元数据管理器可以进行数据修复和/或向客户端发送告警信息。

相关技术中的写入一致性验证所采用的方法为:在客户端存储之前向数据节点写入的数据,在进行写入一致性校验时,从领导数据节点中读取存储的数据,计算该数据对应的md5值,计算客户端中存储的数据的md5值,将两个md5值进行比较。或者,借助一些读写工具,在写入数据时将写操作记录到一个表中,通过生成一些校验key值来生成校验日志,当再次读取数据时,将生成的校验key值与之前生成的校验日志进行对比,实现数据的一致性校验。可见,上述的写入一致性校验的过程需要客户端参与,或者,需要生成校验日志,数据验证过程较为繁琐。

而本申请的写入一致性验证的方法无需客户端参与,也无需生成校验日志,通过在向领导节点写入数据时,计算所写入数据的CRC值,并存储在数据块中,当在进行写入一致性校验时,可以将CRC校验值和预先存储在数据块中的CRC值进行比较,该方法可以方便的实现写入一致性验证,无需直接将存储的数据进行比较,可以提高数据校验的效率。

在本公开的一个实施例中,根据所述数据校验请求对所述待校验副本集进行写入一致性验证和节点一致性验证,包括:

响应于接收到所述数据校验请求,则将所述领导节点中所述待校验副本集的状态机模式由初始化状态转换为信息确认状态;在所述信息确认状态确定校验信息,并将所述校验信息发送给各个跟随节点;

响应于接收到所述各个跟随节点返回的CRC值,则将所述待校验副本集的状态机模式转换为比较状态;在所述比较状态将读取的本地的CRC值与各个跟随节点返回的CRC值进行比较,以获取第二校验结果;所述返回的CRC值与所述待校验副本集中的数据块对应,所述返回的CRC值为对所述数据块中存储的所述分片数据进行循环冗余校验后得到的数值;

响应于获取到所述第二校验结果,则将所述待校验副本集的状态机模式转换为完成状态;在所述完成状态通过心跳报文将所述第二校验结果发送给元数据管理器;

响应于将所述第二校验结果发送给元数据管理器后,则将所述待校验副本集的状态机模式转换为所述初始化状态。

图7示意性地示出了根据本公开一实施例提供的节点一致性验证的示意图,当数据节点在进行节点一致性验证时,可以引入一个状态机,该状态机用于表示待校验副本集的状态变化。待校验副本集的状态为最初为初始化状态(init),当接收到数据校验请求时,则将该待校验副本集的状态设置为信息确认状态(newmap),在信息确认状态可以确定校验信息并发送给跟随节点。

在本公开的一个实施例中,所述校验信息包括所述领导节点中所述待校验副本集的版本信息;所述跟随节点返回的CRC值是所述跟随节点在确定所述待校验副本集的自身版本信息与所述领导节点中所述待校验副本集的版本信息一致时所返回的信息。

校验信息可以是待校验副本集的版本信息,该版本信息可以是从领导节点中获取的。通过向跟随节点发送待校验副本集的版本信息,可以使得跟随节点中待校验副本集的版本与接收的版本信息一致时,向领导节点返回CRC值。其中,在向跟随节点写入数据时,无需向跟随节点写入各个分片数据对应的CRC值,仅需要向跟随节点的数据块分别写入分片数据即可,在向领导节点返回CRC值时,跟随节点可以从待校验副本集的数据块中获取存储的分片数据并计算CRC值。

可选的,跟随节点中扫描管理模块可以对待校验副本集的版本是否一致进行判断,示例性的,可以获取自身版本信息,判断自身版本信息与接收的版本信息是否一致,一致时,计算CRC值并发送给领导节点;不一致时,则进行等待,直至二者一致,再计算CRC值并发送给领导节。

此外,校验信息还可以包括要校验的数据块,则可以仅对领导节点和跟随节点中该数据块中的数据是否一致进行校验。

在数据校验的过程中,如果有数据同时在写入,则跟随节点中的部分数据存在落后的情况,因此,通过传输待校验副本集的版本号,并当待校验副本集的自身版本信息与所述领导节点中所述待校验副本集的版本信息一致时向领导节点返回CRC值,可以实现各个节点中待校验副本集中数据一致的情况下再进行数据校验。

在本公开的一个实施例中,所述方法还包括:

响应于将所述校验信息发送给各个跟随节点,则将所述待校验副本集的状态机模式转换为创建状态;在所述创建状态读取本地的CRC值,并获取各个跟随节点的名称;

响应于读取到本地的CRC值以及获取到各个跟随节点的名称,将所述待校验副本集的状态机模式转换为等待状态;在所述等待状态接收各个跟随节点返回的CRC值。

当在进入到信息确认状态后,并将校验信息发送给各个跟随节点后,待校验副本集的状态机模式进入创建状态(buildmap),在创建状态领导节点可以读取本地的CRC值,同时获取各个跟随节点的名称这一信息,便于后续确定各个跟随节点是否均返回CRC值。可选的,读取的本地的CRC值和各个跟随节点的名称可以构成srubmap。

当读取到本地的CRC值和各个跟随节点的名称后,待校验副本集的状态机模式进入等待状态(waitrep),在等待状态可以等待各个跟随节点返回CRC值,当各个跟随节点均返回CRC值后,则待校验副本集的状态机模式进入比较状态(comparemap)。

当进入到比较状态后,可以将本地的CRC值和各个跟随节点返回的CRC值进行比较,从而得到第二校验结果。

当在获取到第二校验结果后,则可以将待校验副本集的状态机模式转换为完成状态(finish),在完成状态可以将第二校验结果发送给MDS,并将待校验副本集的状态机模式转换为初始化状态(init)。MDS在获取到第二校验结果后,当第二校验结果为校验未通过时,则可以向客户端发送告警信息,或者,执行数据修复的动作。

可选的,当在进入到比较状态后若长时间未获取到第二校验结果,则可能发生错误,则可以直接进入到信息确认状态,再次执行针对该待校验副本集的节点一致性校验的动作。

通过采用状态机的方式对领导节点中的数据和各个跟随节点中的数据进行对比,可以简单且清晰的实现节点一致性验证。

示例性介质

在介绍了本公开示例性实施方式的方法之后,接下来,参考图8对本公开示例性实施方式的存储介质进行说明。

参考图8所示,存储介质80中存储着根据本公开的实施方式的用于实现上述方法的程序产品,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,该程序代码用于使计算设备执行本公开所提供的数据校验方法。然而,本公开的程序产品不限于此。

所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。

可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质。

可以以一种或多种程序设计语言的任意组合来编写用于执行本公开公开操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备。

示例性装置

在介绍了本公开示例性实施方式的介质之后,接下来,参考图9对本公开示例性实施方式的数据校验装置90进行说明,用于实现上述任一方法实施例中的方法,其实现原理和技术效果类似,在此不再赘述。

本公开提供的数据校验装置90,应用于元数据管理器,所述元数据管理器与多个数据节点通信;所述装置包括:

第一发送模块901,用于响应于获取到数据校验请求,则向目标数据节点发送所述数据校验请求,以使所述目标数据节点执行数据校验;所述数据校验请求用于指示对待校验副本集进行校验;所述目标数据节点为针对所述待校验副本集的领导节点;针对所述待校验副本集的跟随节点与所述领导节点中分别存储有所述待校验副本集;所述数据校验请求用于指示所述目标数据节点对所述待校验副本集进行写入一致性验证和节点一致性验证,其中,所述写入一致性验证用于验证客户端之前向所述领导节点的所述待校验副本集写入的数据与所述领导节点当前存储的数据是否一致;所述节点一致性验证用于验证所述领导节点中所述待校验副本集当前存储的数据和所述跟随节点中所述待校验副本集当前存储的数据是否一致;

第一接收模块902,用于接收所述目标数据节点发送的校验结果。

在本公开的一个实施例中,所述第一发送模块901包括检查子模块和发送子模块;

所述检查子模块,用于检查所述目标数据节点中所述待校验副本集的扫描状态信息;

所述发送子模块,用于响应于所述扫描状态信息为未收到所述数据校验请求,则向所述目标数据节点发送所述数据校验请求,将所述扫描状态信息设置为扫描中或等待中;其中,当所述待校验副本集为本次校验的副本集时,则对应的所述扫描状态信息为扫描中;当所述待校验副本集为非本次校验的副本集时,则对应的扫描状态信息为等待中。

在本公开的一个实施例中,所述发送子模块在向目标数据节点发送所述数据校验请求时,具体用于:

响应于所述扫描状态信息为扫描中,则不执行任何操作;以及,

响应于所述扫描状态信息为等待中,则不执行任何操作。

在本公开的一个实施例中,所述装置还包括:

处理模块,用于接收所述目标数据节点发送的扫描已完成的扫描状态信息,并将接收到扫描已完成的扫描状态信息的时间确定为所述待校验副本集的扫描完成时间;所述扫描已完成的扫描状态信息为所述目标数据节点在完成写入一致性验证和节点一致性验证后向所述元数据管理器发送的信息。

在本公开的一个实施例中,所述装置还包括:

取消校验模块,用于响应于接收到取消校验的请求,则将所述取消校验的请求发送给正在校验的数据节点,以使所述正在校验的数据节点停止执行数据校验。

在本公开的一个实施例中,所述发送子模块在向目标数据节点发送所述数据校验请求时,还用于:

当所述目标数据节点在校验中,响应于在预设时长内未能与所述目标数据节点成功建立连接,则取消针对所述待校验副本集的数据校验请求,并确定新的待校验副本集。

在本公开的一个实施例中,所述元数据管理器为备用元数据管理器;所述装置还包括:重新发送模块,用于:

当所述目标数据节点在校验中,响应于主元数据管理器发生故障,则重新根据获取到的所述数据校验请求,向所述目标数据节点发送所述数据校验请求。

在本公开的一个实施例中,所述装置还包括:

第一确定模块,用于在向目标数据节点发送所述数据校验请求之前,根据所述数据校验请求确定所述待校验副本集;

第二确定模块,用于响应于所述待校验副本集的数量大于并发度数量,则从所述待校验副本集中确定本次校验的副本集以及非本次校验的副本集;所述并发度数量为各个数据节点同时进行校验的副本数量之和的上限值。

在本公开的一个实施例中,所述第一确定模块具体用于:

响应于确定所述数据校验请求为来自于客户端的请求,则根据所述数据校验请求中的指定文件的信息确定所述待校验副本集;所述待校验副本集用于存储所述指定文件;所述指定文件的信息包括指定文件名称、包含所述指定文件的目录和/或存储卷。

在本公开的一个实施例中,所述第一确定模块具体用于:

响应于确定所述数据校验请求为自身产生的定时任务类型的请求,则针对每一副本集,判断当前时间与记录的所述副本集最新的扫描完成时间的时间间隔是否大于预设时间间隔,以及,当前时间是否处于校验时间段;

响应于所述时间间隔大于所述预设时间间隔且所述当前时间处于所述校验时间段,则将所述副本集确定为所述待校验副本集;所述校验时间段为预先配置的、用于进行数据校验的时间段。

在本公开的一个实施例中,所述待校验副本集中包含多个数据块,所述装置还包括写入模块,用于:

响应于接收到将待写入数据写入所述领导节点中的所述待校验副本集中的指令时,对待写入数据进行拆分,对拆分后的每一分片数据分别进行循环冗余校验,以得到每一分片数据分别对应的CRC值;

针对每一分片数据,将所述分片数据对应的CRC值存储到所述数据块的目标位置,将所述分片数据存储到所述数据块中除所述目标位置以外的其他位置;所述CRC值用于进行写入一致性验证和节点一致性验证。

本发明实施例提供的数据校验装置,可以实现上述如图2至图4所示的实施例的数据校验方法,其实现原理和技术效果类似,此处不再赘述。

参考图10对本公开另一示例性实施方式的数据校验装置进行说明,用于实现上述任一方法实施例中的方法,其实现原理和技术效果类似,在此不再赘述。

本公开提供的数据校验装置100,应用于数据节点,所述装置包括:

第二接收模块1001,用于接收元数据管理器发送的数据校验请求;所述数据校验请求用于指示对待校验副本集进行校验;所述数据节点为针对所述待校验副本集的领导节点;针对所述待校验副本集的跟随节点和所述领导节点中分别存储有所述待校验副本集;所述数据校验请求用于指示所述数据节点对所述待校验副本集进行写入一致性验证和节点一致性验证,其中,所述写入一致性验证用于验证客户端之前向领导节点的所述待校验副本集写入的数据与所述领导节点当前存储的数据是否一致;所述节点一致性验证用于验证所述领导节点中所述待校验副本集当前存储的数据和所述跟随节点中所述待校验副本集当前存储的数据是否一致;

验证模块1002,用于根据所述数据校验请求对所述待校验副本集进行写入一致性验证和节点一致性验证,以得到校验结果;

第二发送模块1003,用于向所述元数据管理器发送所述校验结果。

在本公开的一个实施例中,所述待校验副本集中包含多个数据块,所述验证模块1002用于:

响应于接收到所述数据校验请求,针对每一数据块,则从所述待校验副本集中的所述数据块读取分片数据,对读取的所述分片数据进行循环冗余校验,以得到CRC校验值;

从所述数据块中取出所述CRC值,比较各个数据块对应的所述CRC校验值与所述CRC值以得到第一校验结果;所述第一校验结果表征相应的CRC校验值与所述CRC值相一致,则所述待校验副本集通过了所述写入一致性验证;所述第一校验结果表征相应的CRC校验值与所述CRC值不一致,则所述待校验副本集未通过所述写入一致性验证。

在本公开的一个实施例中,所述验证模块1002用于:

响应于接收到所述数据校验请求,则将所述领导节点中所述待校验副本集的状态机模式由初始化状态转换为信息确认状态;在所述信息确认状态确定校验信息,并将所述校验信息发送给各个跟随节点;

响应于接收到所述各个跟随节点返回的CRC值,则将所述待校验副本集的状态机模式转换为比较状态;在所述比较状态将读取的本地的CRC值与各个跟随节点返回的CRC值进行比较,以获取第二校验结果;所述返回的CRC值与所述待校验副本集中的数据块对应,所述返回的CRC值为对所述数据块中存储的所述分片数据进行循环冗余校验后得到的数值;

响应于获取到所述第二校验结果,则将所述待校验副本集的状态机模式转换为完成状态;在所述完成状态通过心跳报文将所述第二校验结果发送给元数据管理器;

响应于将所述第二校验结果发送给元数据管理器后,则将所述待校验副本集的状态机模式转换为所述初始化状态。

在本公开的一个实施例中,所述校验信息包括所述领导节点中所述待校验副本集的版本信息;所述跟随节点返回的CRC值是所述跟随节点在确定所述待校验副本集的自身版本信息与所述领导节点中所述待校验副本集的版本信息一致时所返回的信息。

在本公开的一个实施例中,所述装置还包括:状态转换模块,用于:

响应于将所述校验信息发送给各个跟随节点,则将所述待校验副本集的状态机模式转换为创建状态;在所述创建状态读取本地的CRC值,并获取各个跟随节点的名称;

响应于读取到本地的CRC值以及获取到各个跟随节点的名称,将所述待校验副本集的状态机模式转换为等待状态;在所述等待状态接收各个跟随节点返回的CRC值。

本发明实施例提供的数据校验装置,可以实现上述如图5所示的实施例的数据校验方法,其实现原理和技术效果类似,此处不再赘述。

示例性计算设备

在介绍了本公开示例性实施方式的方法、介质和装置之后,接下来,参考图11对本公开示例性实施方式的计算设备进行说明。

图11显示的计算设备110仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。

如图11所示,计算设备110以通用计算设备的形式表现。计算设备110的组件可以包括但不限于:至少一个处理单元1101、至少一个存储单元1102,连接不同系统组件(包括处理单元1101和存储单元1102)的总线1103。其中,至少一个存储单元1102中存储有计算机执行指令;至少一个处理单元1101包括处理器,处理器执行该计算机执行指令,以实现上文描述的方法。

总线1103包括数据总线、控制总线和地址总线。

存储单元1102可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)11021和/或高速缓存存储器11022,可以进一步包括非易失性存储器形式的可读介质,例如只读存储器(ROM)11023。

存储单元1102还可以包括具有一组(至少一个)程序模块11024的程序/实用工具11025,这样的程序模块11024包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。

计算设备110也可以与一个或多个外部设备1104(例如键盘、指向设备等)通信。这种通信可以通过输入/输出(I/O)接口1105进行。并且,计算设备110还可以通过网络适配器1106与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图11所示,网络适配器1106通过总线1103与计算设备110的其它模块通信。应当理解,尽管图中未示出,可以结合计算设备110使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。

应当注意,尽管在上文详细描述中提及了数据校验装置的若干单元/模块或子单元/模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。

此外,尽管在附图中以特定顺序描述了本公开方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。

虽然已经参考若干具体实施方式描述了本公开的精神和原理,但是应该理解,本公开并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本公开旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。

相关技术
  • 区域变电站智能远传监测平台
  • 一种避雷器智能在线监测、数据远传的可视化云平台系统
技术分类

06120116538837