一种只读快照的快照数据生成方法及装置制造方法
【专利摘要】本发明公开了一种只读快照的快照数据生成方法及装置,方法为,当接收数据修改指示后,判定需要生成只读快照的快照数据时,获取各个节点的当前版本数据;当拥有最新版本数据的节点数目满足冗余比时,分别根据上述各个节点的当前版本数据,生成只读快照的快照数据。采用本发明技术方案,通过将当前时刻拥有最新版本数据的节点数目与冗余比进行比较,从而基于满足冗余比的各个节点的当前版本数据生成只读快照的快照数据,保证了只读快照的快照数据的准确性,避免了由于只读快照的快照数据错误而造成的错误叠加最终影响分布式存储文件系统可靠性的问题。
【专利说明】一种只读快照的快照数据生成方法及装置
【技术领域】
[0001]本发明涉及计算机应用领域,尤其涉及一种只读快照的快照数据生成方法及装置。
【背景技术】
[0002]目前,在NAS (Network Attached Storage ;网络连接存储)应用中,出于文件数据保护的需要,可以应用COW (Copy On Write ;只读快照的快照数据)技术在不同的时刻对文件系统创建只读快照,通过生成的该只读快照的快照数据保存不同时刻的文件系统映像;其中,在某个时刻创建只读快照表示在该某个时刻创建一个只读快照的标记,而在创建上述只读快照之后生成该只读快照的快照数据表示基于上述标记的某个时刻的文件系统的数据生成一个文件系统的映像,该只读快照的快照数据中包含上述某个时刻的文件系统的数据。当文件系统出现故障或者基于业务本身需要,需要将某个时刻的只读快照作为目标只读快照,并将文件系统中的数据恢复至目标只读快照的快照数据时,只需要对只读快照进行回滚操作即可将文件系统中的数据恢复至目标只读快照的快照数据。
[0003]参阅图1所示,在分布式存储文件系统中,通常采用冗余切片的装置将整个文件切分为多个定长分片,并将该每一个定长分片以文件的形式分别存储至不同的存储节点中。并且,为了能够更加快捷地获取各个定长分片,将各个定长分片的分布位置信息存储至分布式文件系统的元数据中。
[0004]参阅图2所示,在上述分布式存储文件系统中,同一个定长分片的所有数据均属于同一数据分条形成一个版本数据,当存在新版本数据的数据分条时,新版本数据的数据分条覆盖旧版本数据的数据分条。为了保证对一个定长分片对应的任意一节点中的数据进行修改时,属于该定长分片对应的其他节点数据的一致性,对定长分片中数据的修改均以该数据分条为基本单位进行修改操作,该数据分条中包含定长分片中的数据以及相应的校验码。具体为:当接收到数据修改指示,需要对任意一节点上的数据进行修改时,在现有分布式存储文件系统中,需要将该任意一节点所属定长分片对应的整个数据分条中所有节点的数据进行修改更新,其中,对于该数据分条中的校验码需要重新计算。例如,参阅图2所示,数据分条I为定长分片(ChunkO)对应的数据分条,且该数据分条I包含两个数据(D,分别存储在节点一和节点二中)和一个校验码(P,也称为冗余,存储在节点三中),当需要对数据分条I中的任意一个数据进行修改时,需要重新计算上述校验码,并且保证该数据分条I中的三个数据被同时刷新。
[0005]基于上述分布式存储文件系统,在对任意一节点的数据修改过程中,可能出现修改失败的情况。例如,参阅图3所示,在对数据分条I的数据版本三(Ver=3)的修改过程节点二并未被同步修改,从而造成在数据版本四中节点二存在数据缺失的问题。此时,当对文件系统创建上述只读快照一之后,在该数据缺失被修复之前,若对该只读快照保护的数据进行修改时,该只读快照一中的原来保护的数据(即对数据修改之前的各个节点的当前版本数据)将作为旧数据,需要根据该旧数据生成只读快照一快照数据,该只读快照一快照数据中节点二中的缺失数据将被记录为某一个历史版本数据(如版本三的数据)的数据,参阅图4所示,从而造成只读快照一中的旧数据存在数据版本号错误的问题。参阅图5所示,当对文件系统创建只读快照之后,若在该数据缺失被修复之前对该只读快照保护的数据进行修改时又出现另一节点的数据修改失败,将导致错误的叠加,造成快照数据不可用,从而降低了分布式存储文件系统中数据的准确性。
[0006]综上所述,目前由于只读快照的快照数据中数据错误造成的分布式存储文件系统准确性低的问题。
【发明内容】
[0007]本发明实施例提供一种只读快照的快照数据生成方法及装置,用以解决目前由于只读快照的快照数据中数据错误造成的分布式存储文件系统准确性低的问题。
[0008]本发明实施例提供的具体技术方案如下:
[0009]第一方面,提供一种只读快照的快照数据生成方法,包括:
[0010]接收数据修改指示后,当判定需要生成只读快照的快照数据时,获取各个节点的当前版本数据以及当前数据版本号;其中,所述各个节点的当前版本数据为未根据所述数据修改指示对各个节点的数据进行修改之前的各个节点的数据,所述当前数据版本号为未根据所述数据修改指示对各个节点的数据进行修改之前的各个节点的数据版本号;
[0011]当拥有最新版本数据的节点数目满足冗余比时,根据所述拥有最新版本数据的各个节点的当前版本数据和当前数据版本号,生成只读快照的快照数据。
[0012]结合第一方面,在第一种可能的实现方式,判定需要生成只读快照的快照数据方法,包括:获取当前时刻之前最后一次创建的只读快照,并检测在所述最后一次创建的只读快照之后,是否存在所述最后一次创建的只读快照的快照数据;若当前时刻存在所述最后一次创建的只读快照的快照数据,则判定不需要生成所述最后一次创建的只读快照的快照数据;若当前时刻不存在所述最后一次创建的只读快照的快照数据,则判定需要生成所述最后一次创建的只读快照的快照数据。
[0013]结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,若存在任意一节点的当前版本数据不是最新版本数据,则根据与所述任意一节点处于同一数据分条的拥有最新版本数据的其他节点的当前版本数据以及当前版本数据号,对所述任意一节点的当前版本数据以及当前数据版本号进行修复;或者,根据本地保存的记录日志,对所述任意一节点的当前版本数据以及当前数据版本号进行修复。
[0014]结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,生成所述只读快照的快照数据之后,接收各个节点发送的数据修改成功响应消息,当数据修改成功的节点数目满足冗余比时,基于所述数据修改指示中携带的修改数据生成新版本数据;其中,所述新版本数据包含各个节点的所述修改数据以及数据版本号;将所述只读快照的快照数据,以及所述新版本数据进行事务提交。
[0015]结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,从接收到的各个节点发送的数据修改失败响应消息中,获取数据修改失败的节点的节点标识;以及根据所述数据修改指示中携带的修改数据和接收到的各个节点发送的数据修改成功响应消息,获取数据修改成功的各个节点的修改后的数据;分别根据所述数据修改失败的每一个节点的节点标识对应的校验码以及与所述每一个节点处于同一数据分条的其他节点的修改后的数据,采用冗余校验算法对所述数据修改失败的每一个节点的数据进行修复;分别根据所述数据修改成功的所有节点的数据以及修复后的数据,生成新版本数据。
[0016]第二方面,提供一种只读快照的快照数据生成装置,包括:
[0017]判断单元,用于接收数据修改指示后,判断是否需要生成只读快照的快照数据,并将判断结果发送至获取单元;
[0018]获取单元,用于接收判断单元发送的判断结果,且当判断结果为需要生成只读快照的快照数据时,获取各个节点的当前版本数据以及当前数据版本号,并将各个节点的当前版本数据以及当前数据版本号发送至生成单元;其中,所述各个节点的当前版本数据为未根据所述数据修改指示对各个节点的数据进行修改之前的各个节点的数据,所述当前数据版本号为未根据所述数据修改指示对各个节点的数据进行修改之前的各个节点的数据版本号;
[0019]生成单元,用于接收获取单元发送的各个节点的当前版本数据以及当前数据版本号,当拥有最新版本数据的节点数目满足冗余比时,根据所述拥有最新版本数据的各个节点的当前版本数据和当前数据版本号,生成只读快照的快照数据。
[0020]结合第二方面,在第一种可能的实现方式,所述判断单元,具体用于:获取当前时刻之前最后一次创建的只读快照,并检测在所述最后一次创建的只读快照之后,是否存在所述最后一次创建的只读快照的快照数据;若当前时刻存在所述最后一次创建的只读快照的快照数据,则判定不需要生成所述最后一次创建的只读快照的快照数据;若当前时刻不存在所述最后一次创建的只读快照的快照数据,则判定需要生成所述最后一次创建的只读快照的快照数据。
[0021]结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,还包括修复单元,用于:若存在任意一节点的当前版本数据不是最新版本数据,则根据与所述任意一节点处于同一数据分条的拥有最新版本数据的其他节点的当前版本数据以及当前版本数据号,对所述任意一节点的当前版本数据以及当前数据版本号进行修复;或者,根据本地保存的记录日志,对所述任意一节点的当前版本数据以及当前数据版本号进行修复。
[0022]结合第二方面的第二种可能的实现方式,在第三种可能的实现方式中,还包括提交单元,用于:生成所述只读快照的快照数据之后,接收各个节点发送的数据修改成功响应消息,当数据修改成功的节点数目满足冗余比时,基于所述数据修改指示中携带的修改数据生成新版本数据;其中,所述新版本数据包含各个节点的所述修改数据以及数据版本号;将所述只读快照的快照数据,以及所述新版本数据进行事务提交。
[0023]结合第二方面的第三种可能的实现方式,在第四种可能的实现方式中,所述提交单元,具体用于:从接收到的各个节点发送的数据修改失败响应消息中,获取数据修改失败的节点的节点标识;以及根据所述数据修改指示中携带的修改数据和接收到的各个节点发送的数据修改成功响应消息,获取数据修改成功的各个节点的修改后的数据;分别根据所述数据修改失败的每一个节点的节点标识对应的校验码以及与所述每一个节点处于同一数据分条的其他节点的修改后的数据,采用冗余校验算法对所述数据修改失败的每一个节点的数据进行修复;分别根据所述数据修改成功的所有节点的数据以及修复后的数据,生成新版本数据。[0024]本发明实施例中,当接收数据修改指示后,判定需要生成只读快照的快照数据时,获取各个节点的当前版本数据;当拥有最新版本数据的节点数目满足冗余比时,分别根据上述各个节点的当前版本数据,生成只读快照的快照数据。采用本发明技术方案,通过将当前时刻拥有最新版本数据的节点数目与冗余比进行比较,从而基于满足冗余比的各个节点的当前版本数据生成只读快照的快照数据,保证了只读快照的快照数据的准确性,避免了由于只读快照的快照数据错误而造成的错误叠加最终影响分布式存储文件系统可靠性的问题。
【专利附图】
【附图说明】
[0025]图1为现有技术中分布式存储文件系统文件存储示意图;
[0026]图2为现有技术中分布式存储文件系统中数据修改示意图一;
[0027]图3为现有技术中分布式存储文件系统中数据修改示意图二 ;
[0028]图4为现有技术中分布式存储文件系统中数据修改示意图三;
[0029]图5为现有技术中分布式存储文件系统中数据修改示意图四;
[0030]图6为本发明实施例中系统架构示意图;
[0031]图7为本发明实施例中只读快照的快照数据生成流程图;
[0032]图8为本发明实施例中具体应用场景下只读快照的快照数据生成流程图;
[0033]图9为本发明实施例中只读快照的快照数据生成装置结构示意图;
[0034]图10为本发明实施例中只读快照的快照数据生成设备结构示意图。
【具体实施方式】
[0035]为了解决目前由于只读快照数据中数据错误造成的分布式存储文件系统准确性低的问题。本发明实施例中,当接收数据修改指示后,判定需要生成只读快照的快照数据时,获取各个节点的当前版本数据;当拥有最新版本数据的节点数目满足冗余比时,分别根据上述各个节点的当前版本数据,生成只读快照的快照数据。采用本发明技术方案,通过将当前时刻拥有最新版本数据的节点数目与冗余比进行比较,从而基于满足冗余比的各个节点的当前版本数据生成只读快照的快照数据,保证了只读快照的快照数据的准确性,避免了由于只读快照的快照数据错误而造成的错误叠加最终影响分布式存储文件系统可靠性的问题。
[0036]参阅图6所示为本发明实施例中系统架构示意图,该系统包括客户端,以及分布式存储文件系统服务器。
[0037]基于上述文件系统架构,参阅图7所示,本发明实施例中,生成只读快照的快照数据详细流程为:
[0038]步骤700:接收数据修改指示后,当判定需要生成只读快照的快照数据时,获取各个节点的当前版本数据以及当前数据版本号。
[0039]本发明实施例中,上述数据修改指示中包含修改数据,根据该修改数据对分布式存储文件系统中的数据进行修改。
[0040]可选的,判断需要生成只读快照的快照数据的方法,具体为:获取当前时刻之前最后一次创建的只读快照(以下简称只读快照),并检测在该只读快照之后,是否存在上述只读快照的快照数据;若当前时刻存在上述只读快照的快照数据,则判定不需要生成该只读快照的快照数据;若当前时刻不存在上述只读快照的快照数据,则判定需要生成该只读快照的快照数据。例如,参阅图4所示,在数据分条I的数据版本四之后创建只读快照,若在创建只读快照之后对数据分条I中的任意一节点的当前版本数据进行修改后生成数据分条I的数据版本五,由于在创建只读快照之后不存在数据分条I的数据版本,则需要创建只读快照的快照数据,用于保存上述各个节点的当前版本数据,即保护数据分条I的数据版本四对应的数据;若在创建只读快照之后对数据分条I中的任意一节点的当前版本数据进行修改生成数据分条I的数据版本六,由于分布式存储文件系统中已存在快照数据,因此,对于上述当前版本数据修改(即对数据版本五的修改)不生成只读快照的快照数据。
[0041 ] 本发明实施例中,在某个时刻创建只读快照表示在该某个时刻创建一个只读快照的标记,而在创建上述只读快照之后生成该只读快照的快照数据表示基于上述某个时刻的文件系统的数据生成一个文件系统的映像,该只读快照的快照数据中保护上述某个时刻的文件系统的当前版本数据和当前数据版本号。其中,当前数据版本号可以为数字,也可以为其他表示数据版本编号的其他标记。
[0042]此外,在分布式存储文件系统中,接收到的数据修改指示中携带修改数据,根据该修改数据更新相应的数据分条的当前版本数据以及当前数据版本号。
[0043]在上述过程中,各个节点的当前版本数据为未根据所述数据修改指示对各个节点的数据进行修改之前的各个节点的数据,当前数据版本号为未根据数据修改指示对各个节点的数据进行修改之前的各个节点的数据版本号。例如,参阅图4所示,创建只读快照之前,节点一的当前版本数据为数据版本四对应的数据,节点二的当前版本数据为空,则以历史版本数据进行补充,即节点二的当前版本数据为版本三对应的数据,节点三的当前版本数据为版本四对应的数据;节点一的当前数据版本号为数据版本四,节点二的当前数据版本号为版本三,节点三的当前数据版本号为版本四。
[0044]步骤710:当拥有最新版本数据的节点数目满足冗余比时,分别根据该拥有最新版本数据的各个节点的当前版本数据和当前数据版本号,生成只读快照的快照数据。
[0045]本发明实施例中,若分布式存储文件系统为配置成N份数据和M份冗余的系统,则满足冗余比即为在任意一数据分条中,不存在数据缺失的节点数目大于等于N。
[0046]当任意一数据分条中拥有最新版本数据的节点数目满足冗余比时,根据各个节点的当前版本数据和当前数据版本号,生成只读快照的快照数据,具体为:当任意一数据分条,当拥有最新版本数据的节点数目大于等于N时,若存在任意一节点的当前版本数据不是最版本数据,则根据与该任意一节点处于同一数据分条的拥有最新版本数据的其他节点的当前版本数据和当前数据版本号,采用冗余校验法对该任意一节点的当前版本数据和当前数据版本号进行修复,或者,根据本地保存的记录日志,对上述任意一节点的当前版本数据和当前版本数据号进行修复;根据修复后的各个节点的当前版本数据和当前版本数据号,生成只读快照的快照数据。其中,上述N表示该分布式存储文件系统中任意一数据分条中数据的份数;记录日志中存储有对分布式系统中任意一节点的修改记录。
[0047]在上述过程中,任意一节点拥有最新版本数据即表示该任意一节点的当前数据版本号为正确,而该任意一节点的当前数据版本号是否正确可以根据与该任意一节点处于同一数据分条的其他节点的当前数据版本号进行判断。由于文件系统的特性为新的数据版本覆盖旧的数据版本,每当对文件系统中的数据进行修改后,文件系统的当前数据版本号(即版本号)即为递增状态。因此,获取与上述任意一节点处于同一数据分条的其他节点的当前数据版本号中最大的当前数据版本号,若该任意一节点的当前数据版本号等于上述最大的当前数据版本号,则该任意一节点的当前数据版本号为正确。例如,参阅图4所示,在版本四对应的数据分条(包含节点一,节点二,节点三)中,节点一的当前数据版本号为版本四,节点二由于修改失败,而保存历史数据版本号,即节点二的当前数据版本号为版本三,节点三的当前数据版本号为版本四,由此可见,在该数据分条中,最大的当前数据版本号为版本四,则节点一的当前数据版本号和节点三的当前数据版本号均为正确,而节点二的当前数据版本号为错误。
[0048]对于上述存在任意一节点的当前数据版本号错误的情况,可以参见以下示例:参阅图5所示,在创建只读快照一之后对分布式存储文件系统中数据分条I的数据进行修改后,生成快照数据,由于该快照数据保护的数据为数据分条I的数据版本四对应的数据,而数据分条I的节点二存在数据缺失问题,此时快照数据保护的节点二中的数据版本号为数据版本三,从而导致只读快照一中所保护的节点二的当前数据版本号错误的问题。基于该技术问题,本发明实施例中,根据与该节点二处于同一数据分条的节点一的当前版本数据和当前数据版本号,以及节点三的当前版本数据和当前数据版本号,采用冗余校验法对该节点二的当前版本数据和当前数据版本号进行修复;或者,根据本地保存的记录日志,对节点二的当前版本数据进行修复;根据修复后的各个节点的当前版本数据,生成只读快照的快照数据。在图5中,在生成只读快照一的快照数据后,由于节点一再次修改失败,导致节点一的快照数据生成失败,但是由于节点二的数据已经及时修改,只读快照一的快照数据仍满足冗余比,为可用的数据版本,从而保证了生成的只读快照的快照数据中数据的准确性,进而有效提高了系统的可靠性。
[0049]进一步的,在生成只读快照的快照数据之后,根据接收到的各个节点发送的数据修改成功响应消息,当判定数据修改成功的节点数目满足冗余比时,基于上述数据修改指示中携带的修改数据生成新版本数据;将只读快照的快照数据以及新版本数据进行事务提交。
[0050]进一步的,上述过程仅为数据修改成功的节点数目满足冗余比的情况,即对于任意一数据分条,数据修改成功的节点数目可以等于所有节点的数目,也可以小于所有节点的数目。当数据修改成功的节点数目等于所有节点的数目时,表示所有节点的数据均修改成功,此时直接根据修改指示中携带的修改数据生成新版本数据;当数据修改成功的节点数目小于所有节点的数目时,表示存在数据修改失败的节点。
[0051]其中,对于该数据修改失败的节点的处理流程为:当接收各个节点发送的数据修改失败响应消息,获取数据修改失败的节点的节点标识;分别根据数据修改失败的每一个节点的节点标识对应的校验码以及每一个节点对应的处于同一数据分条的其他节点的修改后的数据,采用冗余校验算法对所述数据修改失败的节点的数据进行修复;分别根据数据修改成功的所有节点的数据以及修复后的数据,生成新版本数据。可选的,在上述数据修复完毕之后,在日志记录中记录此次修改,以便之后创建的只读快照的快照数据出现错误时,对该只读快照的快照数据进行修复。特殊的,当存在任意一节点没有返回任何响应消息时,该任意一节点也为数据修改失败的节点。[0052]在上述过程中,当数据修改成功的节点数目满足冗余比,且存在数据修改失败的节点时,可以根据同一数据分条中的其他节点的修改后的数据,采用冗余校验法修复数据修改失败的节点的数据。例如,参阅图4所示,对于数据分条I包含三个节点,且在数据分条I的数据版本四的节点二上存在数据缺失,而节点一和节点三上的数据均正确,此时,数据分条I中数据修改成功的节点数目满足冗余比,则可以采用冗余校验算法,通过节点一和节点三上的数据对节点二上的数据进行修复。
[0053]特殊的,当判定数据修改成功的节点数目不满足冗余比时,向客户端返回提醒消息,提示用户当前数据版本存在错误,需要用户重新输入。
[0054]参阅图8所示,下面结合具体的应用场景,详细描述根据只读快照的快照数据进行实物提交的过程:
[0055]步骤800:接收数据修改指示。
[0056]步骤810:判断是否需要生成只读快照的快照数据,若是,则执行步骤820 ;否则,结束当前流程。
[0057]步骤820:获取各个节点的当前版本数据以及当前数据版本号。
[0058]步骤830:判断上述各个节点的当前数据版本号正确的节点数目是否满足冗余t匕,若是,则执行步骤840 ;否则,执行步骤850。
[0059]步骤840:当不存在当前数据版本号错误的节点时,分别根据各个节点的当前版本数据,生成只读快照的快照数据;当存在当前数据版本号错误的节点,根据本地保存的记录日志,对各个节点的当前版本数据以及当前数据版本号进行修复,并根据修复后的只读快照的数据,生成只读快照的快照数据。
[0060]本发明实施例中,针对当前数据版本号错误的节点,还可以通过与该当前数据版本号错误的节点处于同一数据分条的其他节点的当前版本数据,对该当前数据版本号错误的节点的当前版本数据和当前数据版本号进行修复。
[0061]步骤850:返回提醒消息,提示用户数据修改失败。
[0062]步骤860:根据接收到的各个节点发送的数据修改成功响应消息,判断数据修改成功的节点数目是否满足冗余比,若是,则执行步骤870 ;否则,执行步骤880。
[0063]步骤870:基于上述数据修改指示中携带的修改数据生成新版本数据,并将上述只读快照的快照数据以及新版本数据进行事务提交。
[0064]本发明实施例中,当数据修改成功的节点数目等于所有节点的数目时,表示所有节点的数据均修改成功,此时直接根据修改指示中携带的修改数据生成新版本数据;当数据修改成功的节点数目小于所有节点的数目时,采用冗余校验算法对所述数据修改失败的节点的数据进行修复;分别根据数据修改成功的所有节点的数据以及修复后的数据,生成新版本数据。
[0065]步骤880:返回提醒消息,提示用户当前数据版本存在错误,需要用户重新输入。
[0066]本发明实施例中,对于数据修改成功的节点数目不满足冗余比的情况仅给出了用户主动修改的方式修复数据版本。
[0067]基于上述技术方案,参阅图9所示,本发明提供一种只读快照的快照数据生成装置,包括判断单元90,获取单元91,以及生成单元92,其中:
[0068]判断单元90,用于接收数据修改指示后,判断是否需要生成只读快照的快照数据,并将判断结果发送至获取单元91 ;
[0069]获取单元91,用于接收判断单元90发送的判断结果,且当判断结果为需要生成只读快照的快照数据时,获取各个节点的当前版本数据以及当前数据版本号,并将各个节点的当前版本数据以及当前数据版本号发送至生成单元92;其中,所述各个节点的当前版本数据为未根据所述数据修改指示对各个节点的数据进行修改之前的各个节点的数据,所述当前数据版本号为未根据所述数据修改指示对各个节点的数据进行修改之前的各个节点的数据版本号;
[0070]生成单元92,用于接收获取单元91发送的各个节点的当前版本数据以及当前数据版本号,当拥有最新版本数据的节点数目满足冗余比时,根据所述拥有最新版本数据的各个节点的当前版本数据和当前数据版本号,生成只读快照的快照数据。
[0071]其中,判断单元90具体用于:获取当前时刻之前最后一次创建的只读快照,并检测在所述最后一次创建的只读快照之后,是否存在所述最后一次创建的只读快照的快照数据;若当前时刻存在所述最后一次创建的只读快照的快照数据,则判定不需要生成所述最后一次创建的只读快照的快照数据;若当前时刻不存在所述最后一次创建的只读快照的快照数据,则判定需要生成所述最后一次创建的只读快照的快照数据。
[0072]进一步的,上述装置还包括修复单元93,用于:若存在任意一节点的当前版本数据不是最新版本数据,则根据与所述任意一节点处于同一数据分条的拥有最新版本数据的其他节点的当前版本数据以及当前版本数据号,对所述任意一节点的当前版本数据以及当前数据版本号进行修复;或者,根据本地保存的记录日志,对所述任意一节点的当前版本数据以及当前数据版本号进行修复。
[0073]进一步的,上述装置还包括提交单元94,用于:生成所述只读快照的快照数据之后,接收各个节点发送的数据修改成功响应消息,当数据修改成功的节点数目满足冗余比时,基于所述数据修改指示中携带的修改数据生成新版本数据;其中,所述新版本数据包含各个节点的所述修改数据以及数据版本号;将所述只读快照的快照数据,以及所述新版本数据进行事务提交。
[0074]提交单元94具体用于:从接收到的各个节点发送的数据修改失败响应消息中,获取数据修改失败的节点的节点标识;以及根据所述数据修改指示中携带的修改数据和接收到的各个节点发送的数据修改成功响应消息,获取数据修改成功的各个节点的修改后的数据;分别根据所述数据修改失败的每一个节点的节点标识对应的校验码以及与所述每一个节点处于同一数据分条的其他节点的修改后的数据,采用冗余校验算法对所述数据修改失败的每一个节点的数据进行修复;分别根据所述数据修改成功的所有节点的数据以及修复后的数据,生成新版本数据。
[0075]基于上述技术方案,参阅图10所示,本发明还提供一种只读快照的快照数据生成设备,包括收发器100,存储器101,以及处理器102,其中:
[0076]收发器100,用于接收数据修改指示,以及将该数据修改指示发送至处理器102 ;
[0077]存储器101,用于存储应用程序;
[0078]处理器102,用于运行存储器101中的应用程序,执行如下操作:
[0079]接收收发器100发送的数据修改指示后,当判定需要生成只读快照的快照数据时,获取各个节点的当前版本数据以及当前数据版本号;当拥有最新版本数据的节点数目满足冗余比时,根据所述拥有最新版本数据的各个节点的当前版本数据和当前数据版本号,生成只读快照的快照数据;其中,所述各个节点的当前版本数据为未根据所述数据修改指示对各个节点的数据进行修改之前的各个节点的数据,所述当前数据版本号为未根据所述数据修改指示对各个节点的数据进行修改之前的各个节点的数据版本号。
[0080]其中,上述处理器102,具体用于:获取当前时刻之前最后一次创建的只读快照,并检测在所述最后一次创建的只读快照之后,是否存在所述最后一次创建的只读快照的快照数据;若当前时刻存在所述最后一次创建的只读快照的快照数据,则判定不需要生成所述最后一次创建的只读快照的快照数据;若当前时刻不存在所述最后一次创建的只读快照的快照数据,则判定需要生成所述最后一次创建的只读快照的快照数据。
[0081]进一步的,上述处理器102,还用于:若存在任意一节点的当前版本数据不是最新版本数据,则根据与所述任意一节点处于同一数据分条的拥有最新版本数据的其他节点的当前版本数据以及当前版本数据号,对所述任意一节点的当前版本数据以及当前数据版本号进行修复;或者,根据本地保存的记录日志,对所述任意一节点的当前版本数据以及当前数据版本号进行修复。
[0082]进一步的,上述处理器102,还用于:生成所述只读快照的快照数据之后,接收各个节点发送的数据修改成功响应消息,当数据修改成功的节点数目满足冗余比时,基于所述数据修改指示中携带的修改数据生成新版本数据;其中,所述新版本数据包含各个节点的所述修改数据以及数据版本号;将所述只读快照的快照数据,以及所述新版本数据发送至收发器100,令收发器100将所述只读快照的快照数据,以及所述新版本数据进行事务提交。
[0083]进一步的,收发器100,还用于:接收处理器102发送的只读快照的快照数据,以及新版本数据后,将只读快照的快照数据,以及新版本数据进行事务提交。
[0084]进一步的,处理器102,还用于:从接收到的各个节点发送的数据修改失败响应消息中,获取数据修改失败的节点的节点标识;以及根据所述数据修改指示中携带的修改数据和接收到的各个节点发送的数据修改成功响应消息,获取数据修改成功的各个节点的修改后的数据;分别根据所述数据修改失败的每一个节点的节点标识对应的校验码以及与所述每一个节点处于同一数据分条的其他节点的修改后的数据,采用冗余校验算法对所述数据修改失败的每一个节点的数据进行修复;分别根据所述数据修改成功的所有节点的数据以及修复后的数据,生成新版本数据。
[0085]综上所述,本发明实施例中,接收数据修改指示后,当判定需要生成只读快照的快照数据时,获取各个节点的当前版本数据以及当前数据版本号;当拥有最新版本数据的节点数目满足冗余比时,分别根据该拥有最新版本数据的各个节点的当前版本数据和当前数据版本号,生成只读快照的快照数据。采用本发明技术方案,通过将当前时刻拥有最新版本数据的节点数目与冗余比进行比较,从而基于满足冗余比的各个节点的当前版本数据生成只读快照的快照数据,保证了只读快照的快照数据的准确性,避免了由于只读快照的快照数据错误而造成的错误叠加最终影响分布式存储文件系统可靠性的问题。
[0086]本领域内的技术人员应明白,本发明的实施例可提供为装置、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0087]本发明是参照根据本发明实施例的装置、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0088]这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0089]这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0090]尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
[0091]显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
【权利要求】
1.一种只读快照的快照数据生成方法,其特征在于,包括: 接收数据修改指示后,当判定需要生成只读快照的快照数据时,获取各个节点的当前版本数据以及当前数据版本号;其中,所述各个节点的当前版本数据为未根据所述数据修改指示对各个节点的数据进行修改之前的各个节点的数据,所述当前数据版本号为未根据所述数据修改指示对各个节点的数据进行修改之前的各个节点的数据版本号; 当拥有最新版本数据的节点数目满足冗余比时,根据所述拥有最新版本数据的各个节点的当前版本数据和当前数据版本号,生成只读快照的快照数据。
2.如权利要求1所述的方法,其特征在于,判定需要生成只读快照的快照数据,包括: 获取当前时刻之前最后一次创建的只读快照,并检测在所述最后一次创建的只读快照之后,是否存在所述最后一次创建的只读快照的快照数据; 若当前时刻存在所述最后一次创建的只读快照的快照数据,则判定不需要生成所述最后一次创建的只读快照的快照数据; 若当前时刻不存在所述最后一次创建的只读快照的快照数据,则判定需要生成所述最后一次创建的只读快照的快照数据。
3.如权利要求1或2所述的方法,其特征在于,生成只读快照的快照数据之前,进一步包括: 若存在任意一节点的当前版本数据不是最新版本数据,则根据与所述任意一节点处于同一数据分条的拥有最新版本数据的其他节点的当前版本数据以及当前版本数据号,对所述任意一节点的当前版本数据`以及当前数据版本号进行修复;或者,根据本地保存的记录日志,对所述任意一节点的当前版本数据以及当前数据版本号进行修复。
4.如权利要求3所述的方法,其特征在于,生成所述只读快照的快照数据之后,进一步包括: 接收各个节点发送的数据修改成功响应消息,当数据修改成功的节点数目满足冗余比时,基于所述数据修改指示中携带的修改数据生成新版本数据;其中,所述新版本数据包含各个节点的所述修改数据以及数据版本号; 将所述只读快照的快照数据,以及所述新版本数据进行事务提交。
5.如权利要求4所述的方法,其特征在于,基于所述数据修改指示中携带的修改数据生成新版本数据,具体包括: 从接收到的各个节点发送的数据修改失败响应消息中,获取数据修改失败的节点的节点标识;以及 根据所述数据修改指示中携带的修改数据和接收到的各个节点发送的数据修改成功响应消息,获取数据修改成功的各个节点的修改后的数据; 分别根据所述数据修改失败的每一个节点的节点标识对应的校验码以及与所述每一个节点处于同一数据分条的其他节点的修改后的数据,采用冗余校验算法对所述数据修改失败的每一个节点的数据进行修复; 分别根据所述数据修改成功的所有节点的数据以及修复后的数据,生成新版本数据。
6.一种只读快照的快照数据生成装置,其特征在于,包括: 判断单元,用于接收数据修改指示后,判断是否需要生成只读快照的快照数据,并将判断结果发送至获取单元;获取单元,用于接收判断单元发送的判断结果,且当判断结果为需要生成只读快照的快照数据时,获取各个节点的当前版本数据以及当前数据版本号,并将各个节点的当前版本数据以及当前数据版本号发送至生成单元;其中,所述各个节点的当前版本数据为未根据所述数据修改指示对各个节点的数据进行修改之前的各个节点的数据,所述当前数据版本号为未根据所述数据修改指示对各个节点的数据进行修改之前的各个节点的数据版本号; 生成单元,用于接收获取单元发送的各个节点的当前版本数据以及当前数据版本号,当拥有最新版本数据的节点数目满足冗余比时,根据所述拥有最新版本数据的各个节点的当前版本数据和当前数据版本号,生成只读快照的快照数据。
7.如权利要求6所述的装置,其特征在于,所述判断单元,具体用于: 获取当前时刻之前最后一次创建的只读快照,并检测在所述最后一次创建的只读快照之后,是否存在所述最后一次创建的只读快照的快照数据;若当前时刻存在所述最后一次创建的只读快照的快照数据,则判定不需要生成所述最后一次创建的只读快照的快照数据;若当前时刻不存在所述最后一次创建的只读快照的快照数据,则判定需要生成所述最后一次创建的只读快照的快照数据。
8.如权利要求6或7所述的装置,其特征在于,还包括修复单元,用于: 若存在任意一节点的当前版本数据不是最新版本数据,则根据与所述任意一节点处于同一数据分条的拥有最新版本数据的其他节点的当前版本数据以及当前版本数据号,对所述任意一节点的当前版本数据以及当前数据版本号进行修复;或者,根据本地保存的记录日志,对所述任意一节点的当前版本数据以及当前数据版本号进行修复。
9.如权利要求8所述的装置,其特征在于,还包括提交单元,用于: 生成所述只读快照的快照数据之后,接收各个节点发送的数据修改成功响应消息,当数据修改成功的节点数目满足冗余比时,基于所述数据修改指示中携带的修改数据生成新版本数据;其中,所述新版本数据包含各个节点的所述修改数据以及数据版本号;将所述只读快照的快照数据,以及所述新版本数据进行事务提交。
10.如权利要求9所述的装置,其特征在于,所述提交单元,具体用于: 从接收到的各个节点发送的数据修改失败响应消息中,获取数据修改失败的节点的节点标识;以及根据所述数据修改指示中携带的修改数据和接收到的各个节点发送的数据修改成功响应消息,获取数据修改成功的各个节点的修改后的数据;分别根据所述数据修改失败的每一个节点的节点标识对应的校验码以及与所述每一个节点处于同一数据分条的其他节点的修改后的数据,采用冗余校验算法对所述数据修改失败的每一个节点的数据进行修复;分别根据所述数据修改成功的所有节点的数据以及修复后的数据,生成新版本数据。
【文档编号】G06F11/14GK103631676SQ201310548175
【公开日】2014年3月12日 申请日期:2013年11月6日 优先权日:2013年11月6日
【发明者】王成利 申请人:华为技术有限公司