在存储群集中的擦除编码和复制的制作方法_4

文档序号:8227550阅读:来源:国知局
果已经使用擦除编码并且SAN持有清单,则在步骤516中,SAN开始请求群集的段的过程,以便重新装配所请求的数字对象。使用清单的元数据,SAN知道所使用的擦除编码算法以及具体的擦除编码(例如5:7)。优选地,由于仅第一 K个数据段对于重新装配数字对象是必须的,所以SAN使用在清单的部分350中找到的独特标识符广播仅针对第一 K个数据段的请求。如果成功,则控制移动到步骤528。
[0062]然而,如果任何这些第一 K个数据段丢失(步骤520),则将广播针对任何所需的奇偶校验段的请求。例如,如果原始数据段中的两个丢失,则必须使用来自清单的独特标识符广播针对奇偶校验段中的两个的请求。如果找到了所需要的数量的奇偶校验段,则在步骤524中,使用合适的擦除编码算法以及找到的奇偶校验段重新生成丢失的数据段(或多个段)。在一个实施例中,丢失段的散列值将被计算并与原始值比较。或者,也可能通过将所生成的块作为输入与来自段I到(K-1)的块一起使用来生成块K并且将该块相对于原始的进行比较,以验证针对每个条的数据。虽然,如果不能找到K个段,则错误消息被返回到客户端应用。
[0063]假设K个段被找到或者被生成,则在步骤528中,SAN确定(使用清单)是否存在将获得的另一擦除集合。如果不是这样的话,则控制移动到步骤532。如果是这样的话,则控制移动到步骤516,并且SAN使用在针对清单的第二擦除集合的相应部分中找到的独特标识符,开始请求第二擦除集合的必需的段的过程。在步骤532和536中,SAN整理针对其已经取回的每个擦除集合数据和/或奇偶校验段,以便重新构建原始数据对象。例如,当在群集内的节点上找到必需的K个段时,SAN将数据从这些段读取到其存储器中,并应用适当的擦除编码算法以便在SAN上重新构建原始数据对象。优选地,随着对象的每个条被取回或重新构建,该数据经由HTTP被逐字节地馈送到客户端应用。如果存在多于一个的擦除集合,则SAN使用下一擦除集合来重新构建数字对象的下一部分,并且将下一擦除集合的字节反馈到客户端应用。替代地,SAN可在将对象发送回客户端之前,在其自己的存储器中装配整个对象。
[0064]从卷故障恢复图6是描述了存储群集如何从卷故障恢复的流程图。如上文提及的那样,存储群集包括任何数量的计算机节点,每个节点具有任何数量的硬盘或固态硬盘,其被称为卷。存储群集通常通过在不同的节点上存储对象的不同复制品(当复制被使用时)或通过在不同的节点上存储对象的各种数据和奇偶校验段(当擦除编码被使用时)来实现数据冗余。因此,如果节点的磁盘故障,则任何数量对象的多个复制品和段将丢失,因此降低整个存储群集的所谓数据冗余。进一步地,判断存储群集的质量不仅通过其可以承担多少卷的丢失,而且通过当卷故障时群集可以恢复丢失的数据的快速程度。相应地,图6呈现了一种技术,其当存在使用复制(复制品)和擦除编码(段)存储的对象的混合时,不仅可以处理故障的卷恢复,而且可以尽可能快的恢复丢失的段。如果整个节点故障,则对已经故障的节点上的每个卷执行以下技术。
[0065]在步骤604中,群集的节点注意到其磁盘中的一个已经故障。在一个实例中,一旦在正常业务过程中节点已经与卷通信,该节点就将希望周期性地从该卷得到消息。如果不是这样的话,则节点将向其所有的卷广播消息寻找丢失的卷。如果不存在响应,则该节点假设该卷已经故障。在另一实例中,由于维护、群集的移动等,存储群集可以被完全关闭。当群集被恢复时,可能卷将故障但是节点可能不会注意到,因为它之前没有从该卷得到消息。在这种情况下,节点的健康处理模块可以协助。健康处理模块周期性地检查在每个卷上的所有流的完整性;当其检测到特定流的卷提示(卷的独特标识符)时,它将寻找该卷。如果没有找到,则节点将再次假设该卷已经故障。用于检测卷已经故障的其他技术可以被使用。
[0066]接下来,在步骤608中,一旦已经获得了已经发生故障的卷的独特标识符,在群集内的每个节点就被导向以扫描其正在运转的所有的卷,以便标识包括针对丢失的卷的卷提示的流。优选地,已经标识其丢失的卷的节点向所有其他的节点发送广播消息(包括卷标识符)请求搜索具有针对丢失的卷的提示的流。此外,出于有效性,节点将并行执行搜索。在一个实施例中,每个卷已经记录在磁盘上的日志被扫描,并且每个流表示被分析以确定其包含的卷提示。因为表示擦除编码的对象的段的在日志中的每个流表示包括针对下一段的卷标识符,所以包括针对丢失的卷的卷标识符的任何这样的被标识的流也将指示在丢失的卷上的段。例如,如果图2的段222的流表示包含卷提示,该卷提示是针对丢失的卷的卷标识符,则这意味着段210在该卷上并且需要被重新生成。另外,在日志中被复制的流的表示将包括针对该流的所有复制品指示卷标识符的卷提示。针对每个流,所述日志通常包括指示该流是否表示被复制的对象或擦除编码的对象的类型信息。
[0067]在另一实施例中,这些卷提示可以被存储在段的系统元数据280(或者被复制的流的元数据)中。例如,段216的系统元数据包括指示在其处存储了段218的卷标识符的卷提示。每个节点可以可能扫描其卷寻找在磁盘上的每个流的系统元数据,但是该技术将是较慢的。然后可以从该系统元数据读取卷提示。再次,指示故障的卷的在特定段中的卷提示指示下一段丢失。当节点标识段丢失时,其可以通过查看先前的段的元数据280并取回针对所有同胞段的独特标识符来为丢失的段确定独特标识符。为了寻找针对重新生成丢失的段所必须的任何段,这些同胞段的独特标识符可以被使用。
[0068]—旦每个节点已经完成扫描其日志(或者其在磁盘上的流),每个节点就将具有曾经在故障的卷上的丢失流的列表。因为存储群集包括使用复制和擦除编码存储的对象,所以这些丢失的流中的某些代表被复制的对象,而这些流中的某些代表擦除编码的对象的丢失的段。
[0069]针对丢失的复制的流(如果有),在步骤612中,每个节点通过请求来自其他节点的复制流的竞价来复制丢失的流,并且然后将控制传送到所选择的节点。假设擦除编码的对象的至少一个段从给定节点丢失,则在步骤616中(使用在步骤608中获得的独特标识符)给定的节点请求其他节点针对哪个节点可以供应重新生成丢失的段所必需的K个段进行竞价。一旦获胜竞价被接收并且节点被标识可以供应所述K个段,给定的节点就请求针对重新生成和存储所述丢失的段的节点的竞价。
[0070]相应地,在步骤620中,给定的节点请求来自在群集内的节点的竞价用于特定节点重新生成丢失的段。一旦选择该节点,该节点就使用在步骤616中标识的K个段重新生成丢失的段。可以使用适当的擦除编码算法执行该重新生成。在一个实施例中,重新生成丢失的段消耗在来自K个段的条中的数据,而目标条被计算并写入,以便重新生成丢失的段。
[0071]在步骤624中,节点在其卷中的一个上存储段。如果存在被给定的节点标识的任何更多丢失的段,则控制移动到步骤616并且节点再次如先前描述的那样请求针对丢失的段的竞价。由于在步骤608中,在群集内的每个节点将扫描其卷,寻找丢失的段,所以每个节点也将并行地执行步骤612到628,假设每个节点已经标识了丢失的流。
[0072]擦除编码的段的重新定位
一旦段被写入到存储群集并且被提供以独特标识符,就可以像在群集中任何其他流一样管理它,包括复制的流。换言之,独立于在擦除集合中的其他段并且在没有被移动的段的可用性的任何损失的情况下,健康处理模块决定将段从一个卷移动到另一个,或者从一个节点移动到另一个。例如,如果段218被移动到不同的卷,则在段216中的卷提示将被更新以指示针对段218的新的卷。当段217被重新定位时,系统知道其所有的同胞段(以及它们的独特标识符),因为段218的元数据280包括按顺序的所有同胞段的独特标识符。上游段,段216,可以使用其独特标识符从群集内被取回,并且一旦针对段218新的卷标识符已知,该新的卷标识符就可以被写入到段216的元数据部分280中,作为针对段218新的位置的卷提示。替代地,在其日志中的段216的流表示可以被更新以包括新的卷标识符。
[0073]针对重新定位的段的卷提示的更新可以在重新定位发生时被执行或者可以在之后的时间处由健康处理模块执行。该更新的优势在于段可以在群集内被重新定位而不损失可用性,并且无需任何额外的控制计算机或者控制数据库以跟踪在群集内的段。
[0074]擦除编码的对象转换为复制,反之亦然
本发明的一个实施例能够将存储于群集内的数字对象从一种格式转换为另一种。例如,使用5:7擦除编码存储的对象可以被转换为6:10编码,擦除编码的对象可以被转换为使用复制存储,并且使用复制存储的对象可以被转换为使用擦除编码存储。是否将对象转换为不同的格式以及何时进行可以由对象元数据、存储群集默认设置或两者的组合来指不O
[0075]如上文所提及的那样,被提供以来自客户端应用的对象的用户元数据可以提供关于应当如何存储对象的信息,并且也可指示对象应当何时被转换为一种格式或另一种,如上文刚刚描述的那样。例如,用户元数据可以指示在具体的时间帧内或在特定的未来时间处,该对象应当被转换为不同的格式。或者,存储群集的设置或规则也可以指示对象应当在特定的时间或多个时间处被转换,具有某个大小的对象应当被周期性地或者在特定时间处转换,或者某个比例的对象应当被转换。群集可以甚至接受来自改变群集设置或指示针对在群集内的一个或多个对象转换应当如何以及何时发生的管理员的人工输入。特殊的转换模块可以被用于执行转换,或者这样的功能可以被并入群集的健康处理模块。
[0076]图7是描述了其中在存储群集中的对象可以从一种存储格式被转换为另一种的实施例的流程图。尽管该流程图处理单个对象,但是在群集内的任何数量的对象可以使用该技术被转换。针对在群集内的对象的独特标识符保持不变,使得客户端应用可以使用其被最初提供的相同的独特标识符取回该对象。针对具有随机数作为独特标识符的对象,在转换之后,该随机数保持针对对象的标识符。在客户端应用针对对象供应独特名称的情况下,群集可以使用该名称的散列值作为独特标识符,并且在转换之后该散列值保持标识符。
[0077]对象的“版本”的概念促进针对新的、被转换的对象保留原始的独特标识符。每个对象包括时间戳,其指示它何时被创建;当对象被转换时,它将具有与原始对象相同的独特标识符,并且新的对象被给予晚于原始对象的时间戳。以这种方式,两个独特标识符都可以在相同时间处存在于群集内,然而群集通过参考时间戳,知道哪个对象是当前的、有效的对象。具有比其“孪生子”早的时间戳的对象可以在任何时间处被删除,因为不需要它。
[0078]在步骤704中,针对对象(或针对任何数量的对象)的相关转换信息被存储于存储群集内。如上文所提及的那样,可以从客户端应
当前第4页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1