具体实施方式
以下将参考附图详细说明本发明的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例,不必解释为优于或好于其它实施例。
另外,为了更好的说明本发明,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有这些具体细节,本发明同样可以实施。在另外一些实例中,对于大家熟知的方法、手段、元件和电路未作详细描述,以便于凸显本发明的主旨。
在描述本发明的具体实施例之前,先对所涉及的术语做如下定义:
EC组,如上所述为M个原始数据块和针对这M个原始数据块基于EC算法生成的N个校验数据块的集合,其中0<N<M;
存储集群系统,包括通过网络互联的多个数据存储节点;以及
分区(partition),为用于存储数据的虚拟容器,对应于某个数据存储节点上的一段存储空间,每个数据存储节点通常包含多个分区,并且每个分区具有唯一的例如整数形式的编号。
根据EC算法,属于同一EC组的S个条带数据各自存储于S个分区,并且这S个分区的编号连续。此外,出于数据安全性的考虑,这S个分区可分别存储在不同的数据存储节点上。
将以整数形式的分区编号为例详细介绍根据本发明的实施例如下,但本发明不限于此,并且本领域技术人员应能理解,能够进行连续编号的任意编号形式均适用于本发明。以下pt(i)表示编号为i的分区,其中i为整数。EC组(i)表示编号为i的分区所存储的条带数据所属的EC组、即分区pt(i)对应的EC组。以及,EC组(i~i+S)表示S+1个条带数据各自存储于分区pt(i)~pt(i+S)内,并且这S+1个条带数据属于同一EC组。
图1示出了根据本发明一实施例的一种发现并修复损坏数据的装置的结构框图。如图1所示,发现并修复损坏数据的装置100包括故障节点发现单元110、受损EC组确定单元120和损坏数据修复单元130。其中:
故障节点发现单元110与受损EC组确定单元120连接,用于根据存储集群系统中的各数据存储节点上报的表示各数据存储节点自身是否可用的状态信息查找存储集群系统中的故障数据存储节点,获取故障数据存储节点所包括的分区的编号,并将所获取到的编号作为故障分区的编号发送给受损EC组确定单元120。
受损EC组确定单元120与故障节点发现单元110以及损坏数据修复单元130连接,用于根据所接收到的故障分区的编号确定故障分区对应的受损EC组。
例如,由于用于存储属于同一EC组的条带数据的分区具有连续的编号,并且通常情况下属于同一EC组的条带数据不会同时被损坏,受损EC组确定单元120可基于如下思想来确定故障分区对应的受损EC组,即:对于某个故障分区,可以基于编号与该故障分区的编号最接近的非故障分区(以下称为最接近非故障分区)所存储的条带数据携带的EC组信息来确定该故障分区对应的受损EC组。具言之,对于某个故障分区,可通过读取其左侧最接近非故障分区和/或右侧最接近非故障分区所存储的条带数据携带的EC组信息、判断所读取到的EC组信息是否包括该故障分区的编号、并将包括该故障分区的编号的EC组信息表示的EC组确定作为受损EC组来确定该故障分区对应的受损EC组。其中,左侧最接近非故障分区是在编号减小方向上的最接近非故障分区,右侧最接近非故障分区是在编号增大方向上的最接近非故障分区。并且,如果从左侧最接近非故障分区和右侧最接近非故障分区所读取到的EC组信息均不包括该故障分区的编号,则认为出现了该故障分区对应的受损EC组的条带数据均被损坏的极端情况,从而超出了利用EC算法修复数据的范畴。
损坏数据修复单元130与受损EC组确定单元120连接,用于针对所确定的受损EC组,利用EC算法生成恢复数据,并将所生成的恢复数据存储到指定数据存储节点的相应分区上,以能够用所述指定数据存储节点替换所述故障数据存储节点。
通过在故障节点发现单元110查找到存储集群系统中的故障数据存储节点的情况下,受损EC组确定单元120直接基于故障数据存储节点的分区信息来确定待修复的条带数据所属的EC组,根据本发明上述实施例的发现并修复损坏数据的装置能够及时、有效地发现并修复损坏数据,从而提高了数据存储以及系统的可靠性。
图2示出了根据本发明另一实施例的一种发现并修复损坏数据的装置的结构框图。图2中与图1标号相同的组件具有相同的功能。图2所示的发现并修复损坏数据的装置200中的受损EC组确定单元120可包括故障分区编号接收模块121、最接近非故障分区查找模块122以及受损EC组确定模块123。
其中,故障分区编号接收模块121与故障节点发现单元110以及最接近非故障分区查找模块122连接,用于接收来自故障节点发现单元110的故障分区的编号,并将所接收到的故障分区的编号发送给最接近非故障分区查找模块122。
最接近非故障分区查找模块122与故障分区编号接收模块121以及受损EC组确定模块123连接,用于基于所接收到的故障分区的编号查找最接近非故障分区,并将所查找到的最接近非故障分区的编号发送给受损EC组确定模块123。
受损EC组确定模块123与最接近非故障分区查找模块122以及损坏数据修复单元130连接,用于将读取到的最接近非故障分区所存储的条带数据携带的EC组信息作为潜在受损EC组信息,判断潜在受损EC组信息是否包括故障分区的编号,并在判断为潜在受损EC组信息包括故障分区的编号的情况下将潜在受损EC组信息表示的EC组确定作为受损EC组,以使得损坏数据修复单元130可以基于该受损EC组通过EC算法来修复故障分区的损坏数据。
例如,根据本发明的一种实施方式,在pt(i)为故障分区的情况下,最接近非故障分区查找模块122可以通过依次判断分区pt(i-1)、pt(i-2)…是否为非故障分区来确定左侧最接近非故障分区pt(j),其中j<i。此外,j可进一步限定为大于i-Max,Max表示查找限值,以避免例如在对应于同一EC组的最左侧分区故障的情况下无意义地向左侧进行过多次的查找判断。用户可基于存储集群系统的资源占用率等因素自由设置查找限值Max。例如,在资源占用率较高的情况下,查找限值Max可设置为较小,例如10以下,以避免因查找最接近非故障分区而过多增大存储集群系统的负担。
在确定了左侧最接近非故障分区之后,受损EC组确定模块123可将读取到的左侧最接近非故障分区pt(j)所存储的条带数据携带的EC组信息作为潜在受损EC组信息,并判断潜在受损EC组信息是否包括故障分区pt(i)的编号。
在判断为潜在受损EC组信息包括故障分区pt(i)的编号的情况下,受损EC组确定模块123将潜在受损EC组信息表示的EC组确定作为受损EC组。
否则,需要由最接近非故障分区查找模块122继续查找右侧的最接近非故障分区。具言之,最接近非故障分区查找模块122可以通过依次判断分区pt(i+1)、pt(i+2)…是否为非故障分区来确定右侧最接近非故障分区pt(k),其中k>i。此外,k可进一步限定为小于i+Max,Max如上所述表示查找限值,以避免例如在对应于同一EC组的最右侧分区故障的情况下无意义地向右侧进行过多次的查找判断。
在确定了右侧最接近非故障分区之后,受损EC组确定模块123可将读取到的右侧最接近非故障分区pt(k)所存储的条带数据携带的EC组信息作为潜在受损EC组信息,并将潜在受损EC组信息表示的EC组确定作为受损EC组。
需要说明的是,尽管以先查找左侧最接近非故障分区为例解释了最接近非故障分区查找模块122和受损EC组确定模块123的操作如上,但本领域技术人员应能理解,显然也可先查找右侧最接近非故障分区。
此外,由于受损EC组确定单元120通过参考最接近非故障分区来确定故障分区所对应的EC组,根据本发明上述实施例的发现并修复损坏数据的装置能够准确、快速地确定受损EC组,进而能够及时修复故障分区的损坏数据。
图3示出了根据本发明另一实施例的一种发现并修复损坏数据的装置的结构框图。图3中与图2标号相同的组件具有相同的功能。图3所示的发现并修复损坏数据的装置300中的受损EC组确定单元120还可包括故障分区排序模块124。
如图3所示,故障分区排序模块124与故障分区编号接收模块121以及最接近非故障分区查找模块122连接,用于对所接收到的故障分区的编号按大小进行排序,以使得最接近非故障分区查找模块122可按编号大小顺序遍历所有的故障分区。
例如,根据本发明的一种实施方式,故障分区排序模块124可以将所有的故障分区按编号从小到大排序。然后,对于按编号从小到大排列的故障分区序列中的某个编号孤立的故障分区pt(i),最接近非故障分区查找模块122可将未包括在该故障分区序列中的分区pt(i-1)和分区pt(i+1)分别确定作为故障分区pt(i)的左侧最接近非故障分区和右侧最接近非故障分区。
在确定了左侧最接近非故障分区pt(i-1)和右侧最接近非故障分区pt(i+1)的基础上,受损EC组确定模块123可将读取到的左侧最接近非故障分区pt(i-1)所存储的条带数据携带的EC组信息作为左侧潜在受损EC组信息,并判断左侧潜在受损EC组信息是否包括故障分区pt(i)的编号。
在判断为左侧潜在受损EC组信息包括故障分区pt(i)的编号的情况下,受损EC组确定模块123将潜在受损EC组信息表示的EC组确定作为受损EC组。否则,受损EC组确定模块123可以将读取到的右侧最接近非故障分区pt(i+1)所存储的条带数据携带的EC组信息作为右侧潜在受损EC组信息,并将右侧潜在受损EC组信息表示的EC组确定作为受损EC组。
另一方面,对于按编号从小到大排列的故障分区序列中的n+1个编号连续的故障分区pt(i)~pt(i+n),最接近非故障分区查找模块122可将未包括在该故障分区序列中的分区pt(i-1)和分区pt(i+n+1)分别确定作为这n+1个故障分区pt(i)~pt(i+n)的左侧最接近非故障分区和右侧最接近非故障分区。
在确定了左侧最接近非故障分区pt(i-1)和右侧最接近非故障分区pt(i+n+1)的基础上,受损EC组确定模块123可将读取到的左侧最接近非故障分区pt(i-1)所存储的条带数据携带的EC组信息作为左侧潜在受损EC组信息、将读取到的右侧最接近非故障分区pt(i+n+1)所存储的条带数据携带的EC组信息作为右侧潜在受损EC组信息,并分别确定左侧潜在受损EC组信息是否包括故障分区pt(i)、pt(i+n)的编号以及右侧潜在受损EC组信息是否包括故障分区pt(i)、pt(i+n)的编号。
在左侧潜在受损EC组信息包括故障分区pt(i)以及pt(i+n)的编号的情况下,认为故障分区pt(i)~pt(i+n)对应于同一受损EC组,并且受损EC组确定模块123将左侧潜在受损EC组信息表示的EC组确定作为受损EC组。
在右侧潜在受损EC组信息包括故障分区pt(i)以及pt(i+n)的编号的情况下,认为故障分区pt(i)~pt(i+n)对应于同一受损EC组,并且受损EC组确定模块123将右侧潜在受损EC组信息表示的EC组确定作为受损EC组。
而左侧潜在受损EC组信息包括故障分区pt(i)的编号、右侧潜在受损EC组信息包括故障分区pt(i+n)的编号的情况下,认为故障分区pt(i)~pt(i+n)对应于两个不同的受损EC组,并且受损EC组确定模块123通过将左侧潜在受损EC组信息和右侧潜在受损EC组信息表示的EC组均确定作为受损EC组。
需要说明的是,尽管以故障分区排序模块124按编号从小到大对所有故障分区进行排序为例解释了最接近非故障分区查找模块122和受损EC组确定模块123的操作如上,但本领域技术人员应能理解,显然故障分区排序模块124也可按编号从大到小对所有故障分区进行排序。
通过故障分区排序模块124将所有的故障分区按编号大小进行排序,根据本发明上述实施例的发现并修复损坏数据的装置能够有序地遍历所有故障分区,这在一定程度上能够进一步提高最接近非故障分区的查找速度和准确度,进而能够进一步提高修复损坏数据的及时性。
图4示出了根据本发明另一实施例的一种发现并修复损坏数据的装置的结构框图。图4中与图1标号相同的组件具有相同的功能。图4所示的发现并修复损坏数据的装置400中的故障节点发现单元110可包括节点状态记录模块111、故障节点确定模块112以及分区编号获取模块113。
其中,节点状态记录模块111与故障节点确定模块112以及存储集群系统中的各数据存储节点连接,用于接收并记录各数据存储节点上报的表示各数据存储节点自身是否可用的状态信息。
故障节点确定模块112与节点状态记录模块111和分区编号获取模块113连接,用于根据节点状态记录模块111所记录的状态信息,将状态信息表示已持续预定时间不可用的数据存储节点确定作为故障数据存储节点。其中,所述预定时间可由用户根据对数据存储的安全性和/或系统的可靠性的实际需求灵活设置。例如,在安全性及可靠性要求高的情况下,所述预定时间应设置得较短,优选为若干秒、甚至若干毫秒。在安全性及可靠性要求不是很高的情况下,所述预定时间可设置得相对较长,例如为若干分钟。
分区编号获取模块113与故障节点确定模块112以及受损EC组确定单元120(可具体为受损EC组确定单元120中的故障分区编号接收模块121)连接,用于获取故障节点确定模块112所确定的故障数据存储节点所包括的分区的编号,并将所获取到的编号作为故障分区的编号发送至受损EC组确定单元120(可具体为受损EC组确定单元120中的故障分区编号接收模块121)。
通过由故障节点发现单元主动地基于存储集群系统中的各数据存储节点的状态来定位故障数据存储节点,根据本发明上述实施例的发现并修复损坏数据的装置能够及时地发现故障数据存储节点,从而进一步提高了数据存储以及系统的可靠性。
图5示出了根据本发明一实施例的一种发现并修复损坏数据的方法的流程图。如图5所示,发现并修复损坏数据的方法500包括:
步骤S510,根据存储集群系统中的各数据存储节点上报的表示各数据存储节点自身是否可用的状态信息查找存储集群系统中的故障数据存储节点,并获取故障数据存储节点所包括的分区的编号作为故障分区的编号;
步骤S520,根据所获取到的故障分区的编号确定故障分区所对应的受损EC组;
步骤S530,针对所确定的受损EC组,利用EC算法生成恢复数据,并将所生成的恢复数据存储到指定数据存储节点的相应分区上,以能够用所述指定数据存储节点替换所述故障数据存储节点;以及
步骤S540,判断所有故障分区是否均已处理,如果判断为是,则再次进入步骤S510以查找新的故障数据存储节点,如果判断为否,则再次进入步骤S520,以继续处理待修复损坏数据的故障分区。
在上述步骤S520中,由于用于存储属于同一EC组的条带数据的分区具有连续的编号,并且通常情况下属于同一EC组的条带数据不会同时被损坏,可基于如下思想来确定故障分区所对应的EC组,即:对于某个故障分区,可以基于编号与该故障分区的编号最接近的非故障分区(以下称为最接近非故障分区)所存储的条带数据携带的EC组信息来确定该故障分区对应的受损EC组。具言之,对于某个故障分区,可通过读取其左侧最接近非故障分区和/或右侧最接近非故障分区所存储的条带数据携带EC组信息、判断所读取到的EC组信息是否包括该故障分区的编号、并将包括该故障分区的编号的EC组信息表示的EC组确定作为受损EC组来确定该故障分区对应的受损EC组。其中,左侧最接近非故障分区是在编号减小方向上的最接近非故障分区,右侧最接近非故障分区是在编号增大方向上的最接近非故障分区。并且,如果从左侧最接近非故障分区和右侧最接近非故障分区所读取到的EC组信息均不包括该故障分区的编号,则认为出现了该故障分区对应的受损EC组的条带数据均被损坏的极端情况,从而超出了利用EC算法修复数据的范畴。
由于在查找到故障数据存储节点的情况下,直接基于故障数据存储节点的分区信息来确定待修复的条带数据所属的EC组,利用根据本发明上述实施例的发现并修复损坏数据的方法能够及时、有效地发现并修复损坏数据,进而能够有效提高数据存储及系统的可靠性。
图6示出了根据本发明另一实施例的一种发现并修复损坏数据的方法的流程图。图6中与图5标号相同的步骤具有相同的功能。在图6所示的发现并修复损坏数据的方法600中,图5所示的步骤S520可具体包括:
步骤S621,根据所获取到的故障分区的编号查找左侧最接近非故障分区;
步骤S622,将读取到的左侧最接近非故障分区所存储的条带数据携带的EC组信息作为潜在受损EC组信息;
步骤S623,判断潜在受损EC组信息是否包括故障分区的编号,在判断结果为是的情况下直接进入步骤S624,否则经由步骤S625、S626进入步骤S624;
步骤S624,将潜在受损EC组信息表示的EC组确定作为受损EC组,并随后进入步骤S530;
步骤S625,根据所获取到的故障分区的编号查找右侧最接近非故障分区;以及
步骤S626,将读取到的右侧最接近非故障分区所存储的条带数据携带的EC组信息作为潜在受损EC组信息,并随后进入步骤S624。
例如,根据本发明的一种实施方式,在pt(i)为故障分区的情况下,在步骤S621中,可以通过依次判断分区pt(i-1)、pt(i-2)…是否为非故障分区来确定左侧最接近非故障分区pt(j),其中j<i。此外,j可进一步限定为大于i-Max,Max表示查找限值,以避免例如在对应于同一EC组的最左侧分区故障的情况下无意义地向左侧进行过多次的查找判断。用户可基于存储集群系统的资源占用率等因素自由设置查找限值Max。例如,在资源占用率较高的情况下,查找限值Max可设置为较小,例如10以下,以避免因查找最接近非故障分区而过多增大存储集群系统的负担。
在确定了左侧最接近非故障分区之后,可通过步骤S622将读取到的左侧最接近非故障分区pt(j)所存储的条带数据携带的EC组信息作为潜在受损EC组信息,并通过步骤S623判断潜在受损EC组信息是否包括故障分区pt(i)的编号。
在步骤S623判断为是的情况下,直接进入步骤S624。在步骤S624中,将潜在受损EC组信息表示的EC组确定作为受损EC组。
另一方面,在步骤S623判断为否的情况下,进入步骤S625。在步骤S625中,可以通过依次判断分区pt(i+1)、pt(i+2)…是否为非故障分区来确定右侧最接近非故障分区pt(k),其中k>i。此外,k可进一步限定为小于i+Max,Max如上所述表示查找限值,以避免例如在对应于同一EC组的最右侧分区故障的情况下无意义地向右侧进行过多次的查找判断。
在确定了右侧最接近非故障分区之后,可通过步骤S626将读取到的右侧最接近非故障分区pt(k)所存储的条带数据携带的EC组信息作为潜在受损EC组信息,并随后通过步骤S624将该潜在受损EC组信息表示的EC组确定作为受损EC组。
需要说明的是,尽管以先查找左侧最接近非故障分区为例解释了确定受损EC组的具体流程如上,但本领域技术人员应能理解,显然也可先查找右侧最接近非故障分区。
此外,由于通过参考最接近非故障分区来确定故障分区所对应的EC组,利用根据本发明上述实施例的发现并修复损坏数据的方法能够准确、快速地确定受损EC组,进而能够及时修复故障分区的损坏数据。
图7示出了根据本发明另一实施例的一种发现并修复损坏数据的方法的流程图。图7中与图5标号相同的步骤具有相同的功能。在图7所示的发现并修复损坏数据的方法700中,可在图5所示的步骤S520之前还包括步骤S710。在步骤S710中,按编号大小对所有的故障分区进行排序,以生成按编号大小排列的故障分区序列。
此外,在图7所示的发现并修复损坏数据的方法700中,图5所示的步骤S520可具体包括:
步骤S721,对于故障分区序列中的编号无间断的n+1个故障分区pt(i)~pt(i+n),将未包括在该故障分区序列中的分区pt(i-1)和分区pt(i+n+1)分别确定作为这n+1个故障分区pt(i)~pt(i+n)的左侧最接近非故障分区和右侧最接近非故障分区,其中n为大于等于0的整数;
步骤S722,将读取到的左侧最接近非故障分区pt(i-1)所存储的条带数据携带的EC组信息作为左侧潜在受损EC组信息,并将读取到的右侧最接近非故障分区pt(i+n+1)所存储的条带数据携带的EC组信息作为右侧潜在受损EC组信息;以及
步骤S723,基于左侧潜在受损EC组信息是否包括故障分区pt(i)、pt(i+n)的编号以及右侧潜在受损EC组信息是否包括故障分区pt(i)、pt(i+n)的编号来确定受损EC组,并然后进入步骤S530。
对于上述步骤S723,根据本发明的一种实施方式,在左侧潜在受损EC组信息包括故障分区pt(i)以及pt(i+n)的编号的情况下,认为故障分区pt(i)~pt(i+n)对应于同一受损EC组,并将左侧潜在受损EC组信息表示的EC组确定作为受损EC组;在右侧潜在受损EC组信息包括故障分区pt(i)以及pt(i+n)的编号的情况下,也认为故障分区pt(i)~pt(i+n)对应于同一受损EC组,并将右侧潜在受损EC组信息表示的EC组确定作为受损EC组;以及,在左侧潜在受损EC组信息包括故障分区pt(i)的编号、右侧潜在受损EC组信息包括故障分区pt(i+n)的编号的情况下,认为故障分区pt(i)~pt(i+n)对应于两个不同的受损EC组,并且可将左侧潜在受损EC组信息以及右侧潜在受损EC组信息表示的EC组均确定作为受损EC组。
由于将所有的故障分区按编号大小进行排序,通过根据本发明上述实施例的发现并修复损坏数据的方法能够有序地遍历所有故障分区,这在一定程度上能够进一步提高最接近非故障分区的查找速度和准确度,进而能够进一步提高修复损坏数据的及时性。
图8示出了根据本发明另一实施例的一种发现并修复损坏数据的方法的流程图。图8中与图5标号相同的步骤具有相同的功能。在图8所示的发现并修复损坏数据的方法800中,图5所示的步骤S510可具体包括:
步骤S811,记录存储集群系统中的各数据存储节点上报的表示各数据存储节点自身是否可用的状态信息;
步骤S812,根据所记录的状态信息,将状态信息表示已持续预定时间不可用的数据存储节点确定作为故障数据存储节点;以及
步骤S813,获取故障数据存储节点所包括的分区的编号作为故障分区的编号。
其中,步骤S811中的状态信息记录可根据各数据存储节点的上报而实时进行。相应地,在步骤S540的判断结果为针对当前的故障数据存储节点所确定的所有故障分区均已处理的情况下,则将再次进入步骤S812以根据在步骤S811中实时更新的数据存储节点的状态信息来定位新的故障数据存储节点。
此外,步骤S812中的预定时间可由用户根据实际对数据存储的安全性、可靠性的要求高低灵活设置。例如,在安全性、可靠性要求高的情况下,该预定时间应设置得较短,优选为若干秒、甚至若干毫秒。然而,在安全性、可靠性要求不是很高的情况下,该预定时间可设置得相对较长,例如若干分钟。
通过主动地基于存储集群系统中的各数据存储节点的状态来定位故障数据存储节点,根据本发明上述实施例的发现并修复损坏数据的方法能够及时地发现故障数据存储节点,从而进一步提高了数据存储以及系统的可靠性。
图9示出了根据本发明再一实施例的一种发现并修复损坏数据的设备的结构框图。所述发现并修复损坏数据的设备900可以是具备计算能力的主机服务器、个人计算机PC、或者可携带的便携式计算机或终端等。本发明具体实施例并不对计算节点的具体实现做限定。
所述发现并修复损坏数据的设备900包括处理器(processor)910、通信接口(Communications Interface)920、存储器(memoryarray)930和总线940。其中,处理器910、通信接口920、以及存储器930通过总线940完成相互间的通信。
通信接口920用于与网元通信,其中网元包括例如虚拟机管理中心、共享存储等。
处理器910用于执行程序。处理器910可能是一个中央处理器CPU,或者是专用集成电路ASIC(Application SpecificIntegrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
存储器930用于存放文件。存储器930可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。存储器930也可以是存储器阵列。存储器930还可能被分块,并且所划分的块可按一定的规则组合成虚拟卷。
在一种可能的实施方式中,上述程序可为包括计算机操作指令的程序代码。该程序可用于:
根据存储集群系统中的各数据存储节点上报的表示各数据存储节点自身是否可用的状态信息查找存储集群系统中的故障数据存储节点,并获取故障数据存储节点所包括的分区的编号作为故障分区的编号;
根据所获取到的故障分区的编号确定故障分区所对应的受损EC组;
针对所确定的受损EC组,利用EC算法生成恢复数据,并将所生成的恢复数据存储到指定数据存储节点的相应分区上,以能够用所述指定数据存储节点替换所述故障数据存储节点;以及
判断所有故障分区是否均已处理,如果判断为是,则再次查找新的故障数据存储节点,如果判断为否,则再次根据所获取到的故障分区的编号确定故障分区所对应的受损EC组,以继续处理待修复损坏数据的故障分区。
对于上述程序,在一种可能的实施方式中,根据所获取到的故障分区的编号确定故障分区所对应的受损EC组包括:
根据所获取到的故障分区的编号查找左侧最接近非故障分区,其中左侧最接近非故障分区为在编号减小方向上的编号与所述故障分区的编号最接近的非故障分区;
将读取到的左侧最接近非故障分区所存储的条带数据携带的EC组信息作为潜在受损EC组信息;
判断潜在受损EC组信息是否包括故障分区的编号;
在判断结果为是的情况下将潜在受损EC组信息表示的EC组确定作为受损EC组;
否则,根据所获取到的故障分区的编号查找右侧最接近非故障分区,将读取到的右侧最接近非故障分区所存储的条带数据携带的EC组信息作为潜在受损EC组信息,并将潜在受损EC组信息表示的EC组确定作为受损EC组,其中右侧最接近非故障分区为在编号增大方向上的编号与所述故障分区的编号最接近的非故障分区。
对于上述程序,在一种可能的实施方式中,根据所获取到的故障分区的编号确定故障分区所对应的受损EC组包括:
根据所获取到的故障分区的编号查找右侧最接近非故障分区,其中右侧最接近非故障分区为在编号增大方向上的编号与所述故障分区的编号最接近的非故障分区;
将读取到的右侧最接近非故障分区所存储的条带数据携带的EC组信息作为潜在受损EC组信息;
判断潜在受损EC组信息是否包括故障分区的编号;
在判断结果为是的情况下将潜在受损EC组信息表示的EC组确定作为受损EC组;
否则,根据所获取到的故障分区的编号查找左侧最接近非故障分区,将读取到的左侧最接近非故障分区所存储的条带数据携带的EC组信息作为潜在受损EC组信息,并将潜在受损EC组信息表示的EC组确定作为受损EC组,其中左侧最接近非故障分区为在编号减小方向上的编号与所述故障分区的编号最接近的非故障分区。
对于上述程序,在一种可能的实施方式中,该程序还可用于:按编号大小对所有的故障分区进行排序,以生成按编号大小排列的故障分区序列,
根据所获取到的故障分区的编号确定故障分区所对应的受损EC组进一步包括:
对于所述故障分区序列中的编号无间断的n+1个故障分区pt(i)~pt(i+n),将未包括在该故障分区序列中的分区pt(i-1)和分区pt(i+n+1)分别确定作为这n+1个故障分区pt(i)~pt(i+n)的左侧最接近非故障分区和右侧最接近非故障分区,其中i为整数、n为大于等于0的整数;
将读取到的左侧最接近非故障分区pt(i-1)所存储的条带数据携带的EC组信息作为左侧潜在受损EC组信息,并将读取到的右侧最接近非故障分区pt(i+n+1)所存储的条带数据携带的EC组信息作为右侧潜在受损EC组信息;以及
基于左侧潜在受损EC组信息是否包括故障分区pt(i)、pt(i+n)的编号以及右侧潜在受损EC组信息是否包括故障分区pt(i)、pt(i+n)的编号来确定受损EC组。
对于上述程序,在一种可能的实施方式中,所述基于左侧潜在受损EC组信息是否包括故障分区pt(i)、pt(i+n)的编号以及右侧潜在受损EC组信息是否包括故障分区pt(i)、pt(i+n)的编号来确定受损EC组包括:
在左侧潜在受损EC组信息包括故障分区pt(i)和/或pt(i+n)的编号的情况下,将左侧潜在受损EC组信息表示的EC组确定作为受损EC组;以及
在右侧潜在受损EC组信息包括故障分区pt(i)和/或pt(i+n)的编号的情况下,将右侧潜在受损EC组信息表示的EC组确定作为受损EC组。
对于上述程序,在一种可能的实施方式中,根据存储集群系统中的各数据存储节点上报的表示各数据存储节点自身是否可用的状态信息查找存储集群系统中的故障数据存储节点,并获取故障数据存储节点所包括的分区的编号作为故障分区的编号包括:
记录存储集群系统中的各数据存储节点上报的表示各数据存储节点自身是否可用的状态信息;
根据所记录的状态信息,将状态信息表示已持续预定时间不可用的数据存储节点确定作为故障数据存储节点;以及
获取故障数据存储节点所包括的分区的编号作为故障分区的编号。
本领域普通技术人员可以意识到,本文所描述的实施例中的各示例性单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件形式来实现,取决于技术方案的特定应用和设计约束条件。专业技术人员可以针对特定的应用选择不同的方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
如果以计算机软件的形式来实现所述功能并作为独立的产品销售或使用时,则在一定程度上可认为本发明的技术方案的全部或部分(例如对现有技术做出贡献的部分)是以计算机软件产品的形式体现的。该计算机软件产品通常存储在计算机可读取的存储介质中,包括若干指令用以使得计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各实施例方法的全部或部分步骤。而前述的存储介质包括U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。