数据处理的方法和系统与流程

文档序号:16536377发布日期:2019-01-08 19:56阅读:176来源:国知局
数据处理的方法和系统与流程

本申请涉及存储技术领域,特别涉及一种数据处理的方法和系统。



背景技术:

存储系统包括前端存储灾备组和后端的存储池。为了实现灾备,每个存储灾备组中,除了主节点,还包括为主节点提供可靠性保障的至少一个备节点。主节点和备节点一般部署在不同的计算设备,甚至不同的机房中,当主节点发生故障时,需要进行存储灾备组的切换,将业务切换至该备节点上,存储系统通过该备节点执行数据读写等数据相关的操作。

将待写入数据写入存储系统时,待写入数据会首先被存储至主节点,再由主节点存储至存储池。同时,待写入数据的写入还需要在存储池中记录待写入数据的元数据和元数据日志。元数据为存储系统中存储的数据的索引信息,每条元数据的产生或变化由该条元数据对应的元数据日志记录,根据元数据日志可以恢复出对应的元数据。在待写入数据的写入过程中,该待写入数据的元数据和对应的元数据日志在主节点中生成后,同样需有由主节点存储至存储池。

由于元数据的存储比较复杂,在一次待写入数据的写入过程中,即主节点,将待写入数据及待写入数据的元数据对应的元数据日志存储至存储池。元数据的存储是批量进行的,也就是说,若干待写入数据写入存储系统后之后,才会批量地将所述若干待写入数据的元数据存储至存储系统。这就导致,当主节点发生故障时,主节点中的元数据可能尚未被存储至存储池。因此,当主节点发生故障,将存储系统的业务切换至备节点时,需要在备节点中恢复主节点尚未存储至存储池的元数据,再将尚未存储至存储池的元数据由备节点存储至存储池。具体地,备节点从存储池中读取若干条元数据日志,并根据若干条元数据日志中的每一条元数据日志依次恢复出尚未存储至存储池的元数据。这导致备节点无法快速完成元数据的恢复,因此导致向备节点切换业务的过程不够平滑,存储系统在切换过程中的不可用时间较长,极大影响了用户体验。



技术实现要素:

本申请提供了一种数据处理方法,利用该方法备节点能够快速恢复未存储至存储池中的元数据,提升存储系统故障后的切换速度。

一方面,本发明提供一种数据处理的方法,应用该方法的存储系统包括主节点、备节点和存储池。该方法包括:该备节点接收该主节点拷贝的元数据。主节点发生故障后,该备节点接收数据恢复指令,确定该主节点中的元数据未被拷贝至该备节点。该备节点从该存储池中获取第一元数据的第一元数据日志,该第一元数据未从该主节点拷贝至该备节点,根据该第一元数据日志恢复该第一元数据,将该第一元数据存储至该存储池。

由于备节点上已经存储有主节点拷贝的元数据,当主节点发生故障时,备节点恢复发生故障时尚未拷贝至备节点的元数据,即可将尚未存储至存储池的元数据由备节点存储至存储池,进而完成存储系统的业务由备节点向主节点的切换,不需要恢复所有未由主节点存储至存储池的元数据,缩短了元数据恢复的时间,使得业务切换至备节点的过程更加平滑,减少了数据切换对用户读写的影响。

结合第一方面,在第一方面的第一种实施方式中,该存储池中还存储有元数据状态,该元数据状态记录了该第一元数据是否被拷贝到该备节点,该第一元数据为该主节点最新生成的元数据。该确定该主节点中的元数据未全部被拷贝至该备节点,包括:从该存储池中读取该元数据状态,根据该元数据状态确定该第一元数据未被拷贝至该备节点。

通过存储池中存储元数据状态来确定备节点未接收该主节点拷贝的全部元数据,可以使得主节点发生故障时元数据状态不会丢失,同时主节点发生故障后,备节点读取元数据状态的速度较高。

结合第一方面,在第一方面的第二种实施方式中,该第一元数据日志还包括状态字段,该状态字段用于指示该主节点是否拷贝该第一元数据至该备节点。该确定该主节点中的元数据未全部被拷贝至该备节点,包括:从该存储池中读取该第一元数据日志,根据该状态字段确定该第一元数据未被拷贝至该备节点。

利用存储池中存储的元数据日志的状态字段来存储备节点未接收该主节点拷贝的全部元数据的状态,亦可使得主节点发生故障时元数据状态不会丢失,同时不占用额外的存储空间,节约存储池中的存储资源。

结合第一方面,在第一方面的第三种实施方式中,该备节点中存储有第二元数据的个数,该第二元数据已由该主节点拷贝至该备节点,该存储池中存储有多个第二元数据日志,每个第二元数据日志对应该主节点生成的一个元数据。该确定该主节点中的元数据未全部被拷贝至该备节点,包括:从该存储池中获取该第二元数据日志的个数,从该备节点中读取该第二元数据的个数,确定该第二元数据的个数与该第二元数据日志的个数不同。

利用备节点中的第二元数据的个数和存储池中第二元数据日志的个数来存储备节点未接收该主节点拷贝的全部元数据的状态,亦可使得主节点发生故障时元数据状态不会丢失,同时不占用额外的存储空间,节约存储池中的存储资源。

第二方面,本发明提供一种存储系统,该存储系统包括主节点、备节点和存储池。该主节点用于,将生成的元数据拷贝至该备节点;将生成的全部元数据对应的元数据日志存储至该存储池。该备节点用于,接收该主节点拷贝的元数据;接收数据恢复指令,确定该主节点中的元数据未全部被拷贝至该备节点;从该存储池中获取第一元数据的第一元数据日志,该第一元数据未从该主节点拷贝至该备节点;根据该第一元数据日志恢复该第一元数据,将该第一元数据存储至该存储池。

由于备节点上已经存储有主节点拷贝的元数据,当主节点发生故障时,备节点恢复发生故障时尚未拷贝至备节点的元数据,即可将尚未存储至存储池的元数据由备节点存储至存储池,进而完成存储系统的业务由备节点向主节点的切换,不需要恢复所有未由主节点存储至存储池的元数据,缩短了元数据恢复的时间,使得业务切换至备节点的过程更加平滑,减少了数据切换对用户读写的影响。

结合第二方面,在第二方面的第一种实施方式中,该存储池中还存储有元数据状态。该主节点还用于:对该元数据状态进行操作,该元数据状态记录了该主节点生成的最新的元数据是否被拷贝到该备节点,该元数据状态记录了该第一元数据是否被拷贝到该备节点,该第一元数据为该主节点最新生成的元数据。该备节点还用于:从该存储池中读取该元数据状态,根据该元数据状态确定该第一元数据未被拷贝至该备节点。

通过存储池中存储元数据状态来确定备节点未接收该主节点拷贝的全部元数据,可以使得主节点发生故障时元数据状态不会丢失,同时主节点发生故障后,备节点读取元数据状态的速度较高。

结合第二方面,在第二方面的第二种实施方式中,该第一元数据日志还包括状态字段,该状态字段用于指示该主节点是否拷贝该第一元数据至该备节点。该备节点还用于:从该存储池中读取该第一元数据日志,根据该状态字段确定该第一元数据未被拷贝至该备节点。

利用存储池中存储的元数据日志的状态字段来存储备节点未接收该主节点拷贝的全部元数据的状态,亦可使得主节点发生故障时元数据状态不会丢失,同时不占用额外的存储空间,节约存储池中的存储资源。

结合第二方面,在第二方面的第三种实施方式中,该备节点中存储有第二元数据的个数,该第二元数据已由该主节点拷贝至该备节点,该存储池中存储有多个第二元数据日志,每个第二元数据日志对应该主节点生成的一个元数据。该备节点还用于:从该存储池中获取该第二元数据日志的个数,从该备节点中读取该第二元数据的个数,确定该第二元数据的个数与该第二元数据日志的个数不同。

利用备节点中的第二元数据的个数和存储池中第二元数据日志的个数来存储备节点未接收该主节点拷贝的全部元数据的状态,亦可使得主节点发生故障时元数据状态不会丢失,同时不占用额外的存储空间,节约存储池中的存储资源。

第三方面,本发明提供一种存储系统,该存储系统包括存储池和至少一个计算设备,每个计算设备包括处理器和存储器;该至少一个计算设备的处理器,用于运行主节点、备节点,其中,该主节点、该备节点与该存储池具有通信连接。该主节点用于:将生成的元数据拷贝至该备节点;将该主节点生成的全部元数据对应的元数据日志存储至该存储池。该备节点用于:接收该主节点拷贝的元数据;接收数据恢复指令,确定该主节点中的元数据未全部被拷贝至该备节点;从该存储池中获取第一元数据的第一元数据日志,该第一元数据未从该主节点拷贝至该备节点;根据该第一元数据日志恢复该第一元数据,将该第一元数据存储至该存储池。

由于备节点上已经存储有主节点拷贝的元数据,当主节点发生故障时,备节点恢复发生故障时尚未拷贝至备节点的元数据,即可将尚未存储至存储池的元数据由备节点存储至存储池,进而完成存储系统的业务由备节点向主节点的切换,不需要恢复所有未由主节点存储至存储池的元数据,缩短了元数据恢复的时间,使得业务切换至备节点的过程更加平滑,减少了数据切换对用户读写的影响。

结合第三方面,在第三方面的第一种实施方式中,该存储池中还存储有元数据状态。该主节点还用于:对该元数据状态进行操作,该元数据状态记录了该主节点生成的最新的元数据是否被拷贝到该备节点,该元数据状态记录了该第一元数据是否被拷贝到该备节点,该备节点还用于;从该存储池中读取该元数据状态,根据该元数据状态确定该第一元数据未被拷贝至该备节点。

通过存储池中存储元数据状态来确定备节点未接收该主节点拷贝的全部元数据,可以使得主节点发生故障时元数据状态不会丢失,同时主节点发生故障后,备节点读取元数据状态的速度较高。

结合第三方面,在第三方面的第二种实施方式中,该第一元数据日志还包括状态字段,该状态字段用于指示该主节点是否拷贝该第一元数据至该备节点。该备节点还用于;从该存储池中读取该第一元数据日志,根据该状态字段确定该第一元数据未被拷贝至该备节点。

利用存储池中存储的元数据日志的状态字段来存储备节点未接收该主节点拷贝的全部元数据的状态,亦可使得主节点发生故障时元数据状态不会丢失,同时不占用额外的存储空间,节约存储池中的存储资源。

结合第三方面,在第三方面的第三种实施方式中,该备节点中存储有第二元数据的个数,该第二元数据已由该主节点拷贝至该备节点,该存储池中存储有多个第二元数据日志,每个第二元数据日志对应该主节点生成的一个元数据。该确定未接收该主节点拷贝的全部元数据,包括:从该存储池中获取该第二元数据日志的个数,从该备节点中读取该第二元数据的个数,确定该第二元数据的个数与该第二元数据日志的个数不同。

利用备节点中的第二元数据的个数和存储池中第二元数据日志的个数来存储备节点未接收该主节点拷贝的全部元数据的状态,亦可使得主节点发生故障时元数据状态不会丢失,同时不占用额外的存储空间,节约存储池中的存储资源。

第四方面,本发明提供一种计算机程序产品和非瞬态的可读存储介质,该计算机程序产品和该可读存储池分别包含计算机指令,处理器执行该计算机指令用于实现第一方面中的方法。

第五方面,本发明提供一种备节点,该备节点位于存储系统中,该存储系统还包括主节点和存储池。该备节点包括接收模块、确定模块和恢复模块。该接收模块用于接收该主节点拷贝的元数据。该确定模块用于接收数据恢复指令,确定该主节点中的元数据未全部被拷贝至该备节点。该恢复模块用于该控制模块确定该主节点中全部的元数据被拷贝至该备节点后,从该存储池中获取第一元数据的第一元数据日志,该第一元数据未从该主节点拷贝至该备节点,根据该第一元数据日志恢复该第一元数据,将该第一元数据存储至该存储池。

由于备节点上已经存储有主节点拷贝的元数据,当主节点发生故障时,备节点恢复发生故障时尚未拷贝至备节点的元数据,即可将尚未存储至存储池的元数据由备节点存储至存储池,进而完成存储系统的业务由备节点向主节点的切换,不需要恢复所有未由主节点存储至存储池的元数据,缩短了元数据恢复的时间,使得业务切换至备节点的过程更加平滑,减少了数据切换对用户读写的影响。

结合第五方面,在第五方面的第一种实施方式中,该存储池中还存储有元数据状态,该元数据状态记录了该第一元数据是否被拷贝到该备节点,该第一元数据为该主节点最新生成的元数据。该确定模块确定还用于:从该存储池中读取该元数据状态,根据该元数据状态确定该第一元数据未被拷贝至该备节点。

通过存储池中存储元数据状态来确定备节点未接收该主节点拷贝的全部元数据,可以使得主节点发生故障时元数据状态不会丢失,同时主节点发生故障后,备节点读取元数据状态的速度较高。

结合第五方面,在第五方面的第二种实施方式中,该第一元数据日志还包括状态字段,该状态字段用于指示该主节点是否拷贝该第一元数据至该备节点。该确定模块还用于:从该存储池中读取该第一元数据日志,根据该状态字段确定该第一元数据未被拷贝至该备节点。

利用存储池中存储的元数据日志的状态字段来存储备节点未接收该主节点拷贝的全部元数据的状态,亦可使得主节点发生故障时元数据状态不会丢失,同时不占用额外的存储空间,节约存储池中的存储资源。

结合第五方面,在第五方面的第三种实施方式中,该备节点中存储有第二元数据的个数,该第二元数据已由该主节点拷贝至该备节点,该存储池中存储有多个第二元数据日志,每个第二元数据日志对应该主节点生成的全部元数据。该确定模块还用于:从该存储池中获取该第二元数据日志的个数,从该备节点中读取该第二元数据的个数,确定该第二元数据的个数与该第二元数据日志的个数不同。

利用备节点中的第二元数据的个数和存储池中第二元数据日志的个数来存储备节点未接收该主节点拷贝的全部元数据的状态,亦可使得主节点发生故障时元数据状态不会丢失,同时不占用额外的存储空间,节约存储池中的存储资源。

第六方面,本发明还提供一种计算设备,该计算设备包括处理器和存储器,该处理器执行该存储器中的计算机指令以实现第五方面中的备节点。

附图说明

图1为本发明实施例提供的一种存储系统100的示意图;

图2为本发明实施例提供的数据处理的方法的流程示意图;

图3为本发明实施例提供的一种存储系统数据写入的方法的示意图;

图4为本发明实施例提供的一种备节点数据恢复的方法的示意图;

图5为本发明实施例提供的另一种存储系统数据写入的方法的示意图;

图6为本发明实施例提供的另一种备节点数据恢复的方法的示意图;

图7为本发明实施例提供的第三种存储系统数据写入的方法的示意图;

图8为本发明实施例提供的第三种备节点数据恢复的方法的示意图;

图9为本发明实施例提供的存储系统900的示意图。

具体实施方式

图1所示为存储系统100的示意图。存储系统100包括至少一个存储灾备组和存储池120。存储池120为存储系统100后端的持久性的大容量存储设备。每个存储灾备组包括主节点和至少一个备节点,为实现灾备,主节点和至少一个备节点一般部署在不同的计算设备上。以存储灾备组110为例说明存储系统100中的至少一个存储灾备组,至少一个存储灾备组的架构与存储灾备组110相同。存储灾备组110包括主节点130和备节点140。,主节点130包括有数据存储空间131、元数据存储空间132和元数据日志存储空间133;备节点140包括有元数据存储空间141。存储池120上具有与每个存储灾备组对应的存储空间,存储灾备组110对应存储空间150,存储空间150包括数据存储空间151和元数据日志存储空间152,分别用于存储自存储灾备组110的待写入数据、元数据和元数据日志。

如图1所示的存储系统100包括多个存储灾备组。存储系统100可以是分布式存储系统,多个存储灾备组可以是分布式的。同时,存储系统100也可以只包含一个存储灾备组110,此时,存储池120只包含存储灾备组110对应的存储空间150。本发明中实施例中的存储系统100,可以是包含一个存储灾备组的存储系统,也可以是包含多个存储灾备组的存储系统,也可以是主节点分布在不同计算设备上的分布式存储系统,本发明实施例对此不做限制。

本发明实施例提供一种数据处理的方法如图2所示,该方法用于主节点130数据写入及主节点130发生故障后业务切换至备节点140过程中的元数据恢复。

s201,备节点140接收主节点130拷贝的元数据。

在主节点130未发生故障时,待写入数据通过主节点130写入存储系统100。每次通过主节点130写入待写入数据的过程中,除了将待写入数据、该待写入数据的元数据对应的元数据日志分别存储至存储池120之外,还将该待写入数据的元数据拷贝至备节点140。

当主节点130和备节点140之间的内存布局相同,主节点130可以直接以内存镜像或称内容覆盖的形式快速将元数据拷贝至备节点140。

s202,主节点130发生故障后,备节点140接收数据恢复指令,确定主节点130中的元数据未全部被拷贝至备节点140。

主节点130中的元数据未全部被拷贝至备节点140,说明主节点130发生故障时,尚未把全部待写入数据的元数据拷贝至备节点,此时需要将尚未被拷贝的元数据恢复至备节点140。

若主节点130中的全部元数据被拷贝至备节点140,此时不需要将尚未被拷贝的元数据恢复至备节点140。

可选地,备节点140确定主节点130中的元数据未全部被拷贝至备节点140包括,根据存储池120中存储的元数据状态来判断主节点130中的元数据是否全部被拷贝至备节点140。具体如下。

由于主节点130的数据写入是串行的,即主节点130不会同时将两条待写入数据写入存储池120。主节点130发生故障前,最后一条通过主节点130写入存储池120的待写入数据为最新的数据,即主节点130将最新的数据写入存储池120到主节点130发生故障之间,没有其他数据通过主节点130写入存储池120。主节点130根据最新的数据生成的元数据为主节点130最新生成的元数据。显然,主节点130已将最新的数据写入存储池120之前生成的元数据备份至备节点140。若最新生成的元数据被拷贝至备节点140之后,主节点130发生故障,那么主节点130中的元数据全部被拷贝至备节点140,否则,最新生成的元数据未被拷贝至备节点140。因此主节点130发生故障时,最多有一条元数据未拷贝至备节点140。

最新的数据通过主节点130写入存储池120时,主节点130除了将最新生成的元数据拷贝至备节点140,还在存储池130中存储最新的数据的元数据状态,元数据状态记录了主节点130最新生成的元数据是否被拷贝至备节点140。

主节点130发生故障时,读取元数据状态,即可根据元数据状态判断主节点130最新生成的元数据是否被拷贝至备节点140,进而确定主节点130中的元数据未全部被拷贝至备节点140。

可选地,备节点140确定主节点130中的元数据未全部被拷贝至备节点140的方法还包括,根据存储池120中未被拷贝至备节点140的元数据对应的元数据日志来判断主节点130中的元数据是否全部被拷贝至备节点140。具体如下。

待写入数据通过主节点130写入存储池120时,主节点130除了将待写入数据的元数据拷贝至备节点140,还在拷贝元数据之后,将该元数据对应的元数据日志的状态字段设置为已拷贝。利用元数据日志中的状态字段来记录元数据是否被拷贝至备节点140。根据未被拷贝至备节点140的元数据对应的元数据日志的状态字段即可确定主节点130中的元数据未全部被拷贝至备节点140

如上所述,发生故障时,主节点130最新生成的元数据未被拷贝至备节点140,因此,主节点130发生故障后,查看最新生成的元数据对应的元数据日志即可得知主节点中的元数据是否全部被拷贝至备节点140。又由于元数据日志是顺序存储的,因此,查看存储池120中存储的主节点130的元数据日志中最新的一条即可。

可选地,备节点140确定主节点130中的元数据未全部被拷贝至备节点140的方法还包括,根据存储池120中主节点生成的元数据日志的个数来判断主节点130中的元数据未全部被拷贝至备节点140。具体如下。

备节点140中存储有由主节点130拷贝至备节点140的元数据个数,存储池120中存储有主节点130生成的全部元数据对应的元数据日志的个数。通过确定由主节点130拷贝至备节点140的元数据和主节点130生成的全部元数据对应的元数据日志的个数不同,则可以确定主节点130中的元数据未全部被拷贝至备节点140。

s203,备节点140从存储池120中获取未被拷贝至备节点140的元数据对应的元数据日志,根据该元数据日志恢复未拷贝至备节点140的元数据。

s204,备节点140将该未被拷贝至备节点140的元数据存储至该存储池。

基于不同的确定主节点130中的元数据未全部被拷贝至备节点140的实施方式,以下分别为不同的数据处理的具体实施方式。

图3所示为本发明实施例提供的一种数据处理的方法。图三所示的方法包括待写入数据写入存储系统100的方法。

s301,主节点130接收数据写入指令,将待写入数据写入数据存储空间131。

s302,主节点130生成待写入数据的元数据,并将待写入数据的元数据存储至元数据存储空间132。

s303,主节点130生成待写入数据的元数据对应的元数据日志,并将待写入数据的元数据对应的元数据日志存储至元数据日志存储空间133。

s304,主节点130将待写入数据及待写入数据的元数据对应的元数据日志存储至存储池120。当存储系统100为如图1所示的包含至少两个存储灾备组的存储系统,主节点130将待写入数据存储至存储池120中的数据存储空间151。本发明实施例对待写入数据及待写入数据的元数据对应的元数据日志存储至存储池120的先后顺序不作限制。

s304后,即元数据日志存储之后,即可返回写成功消息,此时用户认为待写入数据已成功写入。

s305,主节点130在存储池120中记录主节点130的元数据状态,将元数据状态记录为未拷贝。此时,待写入数据的元数据尚未由主节点130拷贝至备节点140。

元数据的未拷贝状态表示元数据尚未存储至备节点140。该未拷贝状态存储在存储池120上,这样,当主节点130发生故障时,通过查看存储灾备组120上的未拷贝状态,即可获知待写入数据的元数据是否存储至备节点140。

主节点元数据状态的存储位置可以在存储空间150中的任何位置,主节点元数据状态的存储空间可以独立于数据存储空间151、元数据存储空间152和元数据日志存储空间153,此外,主节点元数据状态也可以存储在数据存储空间151、元数据存储空间152和元数据日志存储空间153中的任一个,本发明实施例对此不做限制。

s306,主节点130将待写入数据的元数据拷贝至备节点140。

通过主节点130和备节点140之间的通信,主节点130可以将元数据拷贝至备节点140。由于元数据在元数据存储空间中不是顺序存储的,当主节点130和备节点140之间的内存布局相同,主节点130可以直接以内存镜像或称内容覆盖的形式快速将更新的元数据拷贝至备节点140。通过内存镜像的方式,在每次待写入数据写入存储系统100的过程中,将元数据拷贝至备节点140,缩短了主节点130发生故障后元数据恢复的时间,使得业务切换至备节点的过程更加平滑,减少了数据切换对用户读写的影响。

s307,将元数据存储至备节点140中的元数据存储空间142后,主节点130将存储池120中主节点元数据状态的未拷贝状态修改为已拷贝,完成待写入数据的一次写操作。

此时,待写入数据的元数据已拷贝至备节点140,通过存储池120中的主节点元数据状态,可确定主节点130中的元数据全部被拷贝至备节点140。该已拷贝状态存储在存储池120上,这样,当主节点130发生故障时,备节点140通过查看存储灾备组120上的已拷贝状态,即可获知待写入数据的元数据是否存储至备节点140。

由于备节点140上已经存储有主节点130拷贝的元数据,当主节点130发生故障时,备节点140恢复发生故障时尚未拷贝至备节点140的元数据,即可将尚未存储至存储池120的元数据由备节点140存储至存储池,进而完成存储系统100的业务由备节点140向主节点130的切换,不需要恢复所有未由主节点130存储至存储池120的元数据,缩短了元数据恢复的时间,使得业务切换至备节点140的过程更加平滑,减少了数据切换对用户读写的影响。

下面介绍基于s301-s307中的方法,主节点130发生故障后,备节点140恢复数据的方法,如图4所示。

s401,备节点140接收数据恢复指令。

s402,备节点140读取存储池120中的主节点元数据状态。

s403,备节点140确定主节点130中的元数据未全部被拷贝至备节点140。

若主节点130在返回写成功消息前,即s304前,发生故障,此时,待写入数据的元数据对应的元数据日志尚未存储至存储池120,元数据日志及元数据都丢失,待写入数据写入失败。主节点发生故障时,需重新发起一次待写入数据的写入。

若主节点130在返回写成功消息后,即s304后,发生故障,此时,主节点元数据状态已在s305或s307中更新,通过查看存储池120中的主节点元数据状态,可获知故障发生在待写入数据写入的哪一阶段。若存储池120中的主节点元数据状态为已拷贝,则说明待写入数据对应的元数据已经存储至备节点的元数据存储空间142。若存储池120中的主节点元数据状态为未拷贝,则确定主节点130中的元数据未全部被拷贝至备节点140。

s404,备节点140读取存储空间150中最新的元数据日志。

由于存储池120中的元数据日志是按照其对应的待写入数据的写入时间顺序排列的,存储空间150中最新的元数据日志即对应主节点130最新生成的元数据。备节点140读取元数据日志后,可根据元数据日志恢复出元数据。

s405,备节点140根据读取的元数据日志将元数据恢复至备节点140,具体地,备节点140根据最新的元数据日志将对应的未被拷贝至备节点140的元数据恢复至备节点140,元数据存储在备节点140中的元数据存储空间142。

s406,备节点140将恢复出的元数据存储至存储池120。当存储系统100为如图1所示的包含至少两个存储灾备组的存储系统,主节点130将元数据日志存储至存储池120中的存储空间150。

由于备节点140上已经存储有主节点130拷贝的元数据,当主节点130发生故障时,备节点140恢复发生故障时尚未拷贝至备节点140的元数据,即可将尚未存储至存储池120的元数据由备节点140存储至存储池,进而完成存储系统100的业务由备节点140向主节点130的切换,不需要恢复所有未由主节点130存储至存储池120的元数据,缩短了元数据恢复的时间,使得业务切换至备节点140的过程更加平滑,减少了数据切换对用户读写的影响。

图5所示为本发明实施例提供的另一种数据处理的方法。图5所示的方法包括数据写入存储系统100的方法。

s501,主节点130接收数据写入指令,将待写入数据写入数据存储空间131。

s502,主节点130生成待写入数据的元数据,并将待写入数据的元数据存储至元数据存储空间132。

s503,主节点130生成待写入数据的元数据对应的元数据日志a,并将元数据日志a存储至元数据日志存储空间133,与图3所示的方法不同,此时生成的元数据日志a,在其状态字段中记录未拷贝状态,指示待写入数据的元数据尚未被拷贝至备节点140。

s504,主节点130将待写入数据及元数据日志a存储至存储池120。当存储系统100为如图1所示的包含至少两个存储灾备组的存储系统,主节点130将待写入数据存储至存储池120中的数据存储空间151。本发明实施例对待写入数据及元数据日志a存储至存储池120的先后顺序不作限制。

此时,待写入数据的元数据尚未由主节点130拷贝至备节点140。

主节点元数据状态被存储至待写入数据300对应的元数据日志a的状态字段中。在元数据日志中存储主节点元数据状态,可以节约存储池120中的存储空间,同时,由于数据恢复时需要读取元数据日志,将主节点元数据状态存储至元数据日志可以进一步缩短备节点140恢复元数据310的时间。

s504后,即元数据日志存储之后,即可返回写成功消息,此时用户认为待写入数据已成功写入。

s505,主节点130将待写入数据的元数据拷贝至备节点140中的元数据存储空间142。

通过主节点130和备节点140之间的通信,主节点130可以将元数据拷贝至备节点140。由于元数据在元数据存储空间中不是顺序存储的,当主节点130和备节点140之间的内存布局相同,主节点130可以直接以内存镜像或称内容覆盖的形式快速将更新的元数据拷贝至备节点140。通过内存镜像的方式,在每次待写入数据写入存储系统100的过程中,将元数据拷贝至备节点140,缩短了主节点130发生故障后元数据恢复的时间,使得业务切换至备节点的过程更加平滑,减少了数据切换对用户读写的影响。

s506,主节点130生成待写入数据的元数据对应的元数据日志b,并将元数据日志b存储至存储池120。元数据日志b与元数据日志a的区别在于,元数据日志b的状态字段为已拷贝。此时,待写入数据的元数据已拷贝至备节点140,存储池120中最新的元数据日志为元数据日志b,通过元数据日志b的状态字段即可确定主节点130中的元数据全部被拷贝至备节点140。

下面介绍基于s501-s506中的方法,主节点130发生故障后,备节点140恢复数据的方法,如图6所示。

s601,备节点140接收数据恢复指令.

s602,备节点140读取存储池中的主节点130最新的元数据日志。

s603,根据最新的元数据日志,确定主节点130中的元数据未全部被拷贝至备节点140

若主节点130在返回写成功消息前,即s504前,发生故障,此时,待写入数据的元数据对应的元数据日志尚未拷贝至存储池120,元数据日志及元数据都丢失,待写入数据写入失败。主节点130发生故障时,需重新发起一次待写入数据的写入。

若主节点130在返回写成功消息后,即s504后,发生故障,此时,最新的元数据日志的状态字段已记录,通过查看存储池120中的最新的元数据日志的状态字段,即可获知故障发生在待写入数据写入的哪一阶段。若存储池120中的最新的元数据日志的状态字段为已拷贝,则说明最新的元数据日志是元数据日志b,待写入数据的元数据已经拷贝至备节点的元数据存储空间142。若存储池120中的主节点元数据状态为未拷贝,则说明最新的元数据日志是元数据日志a,确定主节点130中的元数据未全部被拷贝至备节点140。

s604,备节点140读取存储空间150中最新的元数据日志。

s605,备节点140根据最新的元数据日志,即元数据日志a将元数据恢复至备节点140,具体地,元数据可以存储在备节点140中的元数据存储空间142。

s606,备节点140将恢复出的元数据存储至存储池120。当存储系统100为如图1所示的包含至少两个存储灾备组的存储系统,主节点130将元数据日志存储至存储池120中的存储空间150。

由于备节点140上已经存储有主节点130拷贝的元数据,当主节点130发生故障时,备节点140恢复发生故障时尚未拷贝至备节点140的元数据,即可将尚未存储至存储池120的元数据由备节点140存储至存储池,进而完成存储系统100的业务由备节点140向主节点130的切换,不需要恢复所有未由主节点130存储至存储池120的元数据,缩短了元数据恢复的时间,使得业务切换至备节点140的过程更加平滑,减少了数据切换对用户读写的影响。

在元数据日志中记录主节点元数据状态,可以减少对存储池120中的其他存储区域的访问,进一步缩短业务切换至备节点140的时间,提高效率。

图7所示为本发明实施例提供的另一种数据处理的方法。图7所示的方法包括数据写入存储系统100的方法。

s701,主节点130接收数据写入指令,将待写入数据写入数据存储空间131。

s702,主节点130生成待写入数据的元数据,并将待写入数据的元数据存储至元数据存储空间132。

s703,主节点130生成待写入数据的元数据对应的元数据日志,并将待写入数据的元数据对应的元数据日志存储至元数据日志存储空间133。

s704,主节点130将待写入数据及待写入数据的元数据对应的元数据日志存储至存储池120。当存储系统100为如图1所示的包含至少两个存储灾备组的存储系统,主节点130将待写入数据存储至存储池120中的数据存储空间151。本发明实施例对待写入数据及待写入数据的元数据对应的元数据日志存储至存储池120的先后顺序不作限制。

s704后,即元数据日志存储之后,即可返回写成功消息,此时用户认为待写入数据已成功写入。

s705,主节点130将待写入数据的元数据拷贝至备节点140。

通过主节点130和备节点140之间的通信,主节点130可以将元数据拷贝至备节点140。由于元数据在元数据存储空间中不是顺序存储的,当主节点130和备节点140之间的内存布局相同,主节点130可以直接以内存镜像或称内容覆盖的形式快速将更新的元数据拷贝至备节点140。通过内存镜像的方式,在每次待写入数据写入存储系统100的过程中,将元数据拷贝至备节点140,缩短了主节点130发生故障后元数据恢复的时间,使得业务切换至备节点的过程更加平滑,减少了数据切换对用户读写的影响。

下面介绍基于s701-s705,主节点130发生故障后,备节点140恢复数据的过程,如图8所示。

s801,备节点140接收数据恢复指令。

s802,备节点140获取拷贝自主节点130的元数据的个数。

s803,备节点140获取存储池120中存储自主节点130的元数据日志的个数。

s804,备节点140确定拷贝自主节点130的元数据的个数与存储池120中存储自主节点130的元数据日志的个数不同。

若主节点130在返回写成功消息前,即s704前,发生故障,此时,待写入数据的元数据对应的元数据日志尚未拷贝至存储池120,元数据日志及元数据都丢失,待写入数据写入失败。主节点130发生故障时,需重新发起一次待写入数据的写入。

若主节点130在返回写成功消息后,即s704后,发生故障,通过获取备节点140中拷贝自主节点130的元数据的个数与存储池120中存储的存储自主节点130的元数据日志的个数,即可获知故障发生在待写入数据写入的哪一阶段。若备节点140中拷贝自主节点130的元数据与存储池120中存储的存储自主节点130的元数据日志的个数相同,则说明待写入数据对应的元数据已经拷贝至备节点的元数据存储空间142。若不同,则确定主节点130中的元数据未全部被拷贝至备节点140。

可选地,备节点140中,拷贝自主节点130的元数据的个数,可以通过遍历备节点140中的元数据得到。备节点140中也可以将元数据个数存储在备节点140上的存储空间:在s705中,主节点130将元数据拷贝至备节点140后,备节点140刷新其上存储空间中存储的元数据个数。

s805,备节点140读取存储空间150中最新的元数据日志。

由于存储池120中的元数据日志是按照其对应的待写入数据的写入时间顺序排列的,存储空间150中最新的元数据日志即对应主节点130最新生成的元数据。备节点140读取元数据日志后,可根据元数据日志恢复出元数据。

s806,备节点140根据元数据日志将元数据恢复至备节点140,具体地,具体地,备节点140根据最新的元数据日志将对应的未被拷贝至备节点140的元数据恢复至备节点140,元数据存储在备节点140中的元数据存储空间142。

s807,备节点140将恢复出的元数据存储至存储池120。当存储系统100为如图1所示的包含至少两个存储灾备组的存储系统,主节点130将元数据日志存储至存储池120中的存储空间150。

本发明实施例提供的数据写入的方法,充分利用了存储池一主多备的机制。使得当主节点130出现故障时,备节点140不需要恢复所有未存储至存储池120的元数据。

本发明还提供一种存储系统900如图9所示。存储系统900包括存储阵列910和至少一个计算设备,每个计算设备包括一个或多个处理器及一个或多个存储器,处理器和存储器之间可以通过总线连接。存储阵列910用于运行存储池120,所述一个或多个处理器用于运行前述存储系统100中的至少一个主节点和至少一个备节点。示例性地,图9中绘制出计算设备920和计算设备920上用于运行主节点130的处理器921、存储器922,还绘制出计算设备930和计算设备930上用于运行备节点140的处理器931、存储器932。

存储系统900中的处理器包括一个或者多个通用处理器,其中,通用处理器可以是能够处理电子指令的任何类型的设备,包括中央处理器(centralprocessingunit,cpu)、微处理器、微控制器、主处理器、控制器以及asic(applicationspecificintegratedcircuit,专用集成电路)等等。处理器执行各种类型的数字存储指令,例如存储在存储器95中的软件或者固件程序,它能使数据中心提供较宽的多种服务。例如,处理器能够执行程序或者处理数据,以执行本文讨论的方法的至少一部分。

存储系统900中的存储器可以包括易失性存储器(volatilememory),例如随机存取存储器(randomaccessmemory,ram);存储器也可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-onlymemory,rom)、快闪存储器(flashmemory)、硬盘(harddiskdrive,hdd)或固态硬盘(solid-statedrive,ssd)存储器还可以包括上述种类的存储器的组合。存储器中可以存储有服务程序,用于为数据中心提供服务。

在本发明所提供的几个实施例中,应该理解到,所公开的装置、方法,可以通过其它的方式实现。例如,以上所描述的装置实施例所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。

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