该申请要求提交于2014年12月28日的美国临时专利申请62/097,077的权益,其公开内容通过引用并入本文。
技术领域
本发明总体上涉及数据存储,尤其是涉及用于数据存储系统中的故障恢复的方法和系统。
发明背景
在许多数据存储方案中,系统在不同存储设备或计算节点上保持数据卷的两个或更多个副本,以抵御故障。当数据卷由于故障而丢失或损坏时,系统可能会从现有副本创建卷的新副本,以保留原始的冗余级别。
发明概述
本文描述的本发明的实施例提供了一种用于数据存储的方法,包括向第一存储节点发送写入命令,用于将数据存储在第一存储节点上的数据卷中。响应于在第二存储节点上创建数据卷的副本的决定,(i)写入命令被发送到第一存储节点和第二存储节点,以及(ii)创建数据卷的快照并从第一存储节点发送到第二存储节点。基于快照和在第二存储节点处接收到的一个或多个写入命令,由第二存储节点创建数据卷的副本。
在一些实施例中,创建快照包含在快照中至少包含具有指定序列号的写入命令,并且创建数据卷的副本包含,在第二存储节点中,接收快照,并从接收到的快照以及序列号大于指定序列号的接收到的写入命令来创建数据卷的副本。
在一个实施例中,方法包含从第二存储节点向第一存储节点发送指定了指定序列号的快照请求,以及在第二存储节点中丢弃序列号小于或等于指定的序列号的任何接收到的写入命令。在另一个实施例中,方法包含在第一存储节点中检测(i)在快照被创建之后接收的且(ii)具有大于指定序列号的序列号的写入命令,并请求客户端节点重新发出带有新序列号的写入命令。
通常,创建数据卷的副本包含:从快照初始化第二存储节点中的副本,然后在初始化副本中执行一个或多个接收到的写入命令。
根据本发明的实施例,另外提供包含客户端节点和至少第一存储节点和第二存储节点的计算系统。客户端节点被配置为向第一存储节点发送写入命令,用于将数据存储在第一存储节点上的数据卷中。响应于在第二存储节点上创建数据卷的副本的决定,客户端节点被配置为向第一存储节点和第二存储节点发送写入命令,第一存储节点被配置为创建并向第二存储节点发送数据卷的快照,并且第二存储节点被配置为基于快照以及在第二存储节点处接收到的一个或多个写入命令,由第二存储节点创建数据卷的副本。
根据本发明的实施例,本发明还提供包含接口和处理器的存储节点。该接口被配置用于通过计算机网络与客户端节点和附加存储节点进行通信。处理器被配置为从客户端节点接收用于在数据卷中存储数据的、具有相应序列号的写入命令,从附加存储节点接收创建至少包括具有指定序列号的写入命令的、数据卷的快照的请求,并创建快照并将其发送到附加存储节点。
根据本发明的实施例,本发明还提供包含接口和处理器的存储节点。该接口被配置用于通过计算机网络与客户端节点和附加存储节点进行通信。处理器被配置为,响应于在存储节点上创建存储在附加存储节点上的数据卷的副本的决定,开始接收用于将数据存储在数据卷的副本中的写入命令,请求附加存储节点创建和发送数据卷的快照,并根据快照和一个或多个接收到的写入命令创建数据卷的副本。
从结合附图进行的本发明的实施例的以下详细描述,本发明将被更完全地理解,其中:
附图简述
图1为根据本发明的实施例示意性示出计算系统的方框图;
图2是根据本发明的实施例的示意性示出数据集的同步恢复的图;以及
图3为根据本发明的实施例示意性示出用于数据卷的同步恢复的方法的流程图。
实施例的详细描述
综述
在本文中描述的本发明的实施例提供用于恢复数据卷的改善的方法和系统。在一些实施例中,计算系统包括多个计算节点。在某个时间点,将从存储在源节点上的数据卷的现有副本在目标节点上创建数据卷的新副本。在恢复过程中,源节点继续接收从客户端节点到数据卷的新写入命令。
在一些公开的实施例中,一旦作出创建新副本的决定,客户端节点开始向源节点和目标节点发送每个写入命令。客户端节点发送附有相应序列号的写入命令。此外,目标节点请求源节点创建并发送数据卷的快照。在请求中,目标节点指定某个序列号X,并请求快照包含直到并包括此序列号的写入命令。
直到从源节点接收到快照,如果从客户端节点到达的写入命令的序列号小于或等于X,则丢弃该写入命令,并累积具有大于X的序列号的写入命令。在接收到来自源节点的快照之后,目标节点从(范围直到序列号X的写入命令的)快照加上本地累积的写入命令(从序列号X+1开始)创建数据卷的新副本。
上述恢复过程创建与现有副本相同的新副本,前提是写入命令在源节点处按顺序到达。如果写入命令可能无序到达,那么在源节点已经创建快照之后,序列号大于X的写入命令到达源节点是可能的。除非另有应对措施,否则这样的写入命令不会被包含在数据卷的新副本中,因为(i)它不包括在由源节点创建的快照中,并且(ii)它被目标节点丢弃。
在一些实施例中,系统使用称为“提升(promotion)”的附加机制来应对写入命令的可能的无序到达。在这些实施例中,在创建快照之后,源节点检查每个新到达的写入命令并验证其序列号是否确实大于X。在检测到在创建快照之后到达但具有大于X的序列号的写入命令,源节点将该写入命令发送回客户端节点,并请求客户端节点重新发出带有新序列号的写入命令。新发布的(“提升的”)写入命令被发送到目标节点,并被添加到新副本。
总而言之,本文描述的方法和系统是运行中的新副本,即不必停止接收对数据卷的写入命令。此外,所公开的技术不假定写入命令按顺序到达。
系统描述
图1为根据本发明的实施例示意性示出计算系统20的方框图。系统20可以包括例如数据中心、高性能计算(HPC)集群或任何其他合适类型的计算系统。
系统20包括各种各样的计算节点,为了简便,简称为“节点”。在图1的例子中,系统包括一个或多个客户端节点24和也称为存储节点的多个磁盘节点28。为了清楚起见,图1示出了单个客户端节点和三个磁盘节点。
然而,系统20的现实实现可以包括大量客户端节点和磁盘节点。在一些实施例中,给定的计算节点(或甚至所有计算节点)可以用作客户端节点和磁盘节点两者。客户端节点24和磁盘节点28通过计算机网络32(例如,局域网(LAN))彼此通信。
每个客户端节点24通常运行客户端应用,该客户端应用除了其他任务之外还发送用于持久存储的数据并从持久存储器检索数据。在本示例中,客户端节点24包括:网络接口,其用于通过网络32进行通信,例如网络接口控制器(NIC)36;以及处理器40,其用于运行客户端应用并执行客户端节点的各种其他处理任务。
每个磁盘节点28包括用于存储客户端节点24产生的数据的一个或多个存储设备52,例如固态硬盘(SSD)或硬盘驱动器(HDD)。在本示例中,磁盘节点28包括:网络接口,其用于通过网络32通信,诸如NIC 44;以及处理器48,用于管理存储设备52中的数据的存储并执行磁盘节点的各种其他处理任务。
通常,运行在客户端节点24上的应用将数据存储在磁盘节点28的存储设备52上存储的数据卷56中。每个客户端节点24通常通过发送写入命令来存储数据。每个写入命令指定数据以及要存储数据的数据卷。
在一些实施例中,每个数据卷跨越多个磁盘节点28复制以用于冗余。换句话说,系统20通常将每个数据卷的两个或多个副本存储在不同的磁盘节点上。当一副本丢失或损坏时,例如,由于磁盘节点或存储设备的故障,系统使用现有副本在功能磁盘节点上创建数据卷的另一个副本,以便保留预期的冗余级别。
在图1的例子中,系统20包括管理群集范围数据存储功能的群集管理单元60。单元60包括:接口,用于通过网络32与客户端节点和磁盘节点通信,例如NIC 64;以及处理器68,用于执行各种管理任务。在其他任务中,处理器68决定何时创建数据卷的新副本、以及在哪个磁盘节点上和从哪个现有副本创建新副本。处理器68相应地指挥各种客户端点和磁盘节点。然而,在替代实施例中,这样的管理功能可以由任何其他合适的实体来执行。其中单元60的功能分布在客户端节点的处理器40和/或磁盘节点的处理器48之间的分布式管理也是可能的。
图1所示的系统、客户端节点、磁盘节点和集群管理单元配置是纯粹为了概念清晰而选择的示例配置。在替代实施例中,能够使用任何其它合适的配置。可使用诸如在一个或多个特定用途集成电路(ASIC)或现场可编程门阵列(FPGA)的合适的硬件/固件中实施系统20的不同元件。可选择地,一些系统元件可在软件中实现或者使用硬件/固件和软件元件的组合来实现。
通常,处理器40、48和68包括通用处理器,通用处理器在软件中被编程以执行在本文中描述的功能。可经由网络以电子形式将软件下载到计算机,例如,或者软件可以可选地或附加地被提供和/或存储在非暂时性有形媒介上,诸如磁存储器、光学存储器或电子存储器。
同步的数据卷的运行中恢复
图2是根据本发明的实施例的示意性示出数据集的同步恢复的图。附图示出系统20的三个节点:客户端节点24、存储有数据卷的现有副本56A的源节点28A(磁盘节点28的一个)以及在其上创建数据卷的新副本56B的目标节点28B(磁盘节点28的另一个)。
在一些实施例中,一旦作出决定(例如,由管理单元60)创建新副本56B,则指示客户端节点24将寻址到数据卷的每个写入命令都发送到源节点28A和目标节点28B。客户端节点24将相应的序列号分配给写入命令,并用适当的序列号标记每个写入命令。
该图示出了从客户端节点24并行发送到源节点28A和目标节点28B的具有序列号#4369和#4371的两个示例写入命令(也称为输入-输出(IO)命令)。
此外,响应于创建新副本的决定,目标节点28B请求源节点28A创建并发送数据卷的快照。在请求中,目标节点28B指定某个序列号X,并请求快照包含直到并包括此序列号的写入命令。在本示例中,指定的序列号X为#4367。
直到从源节点28A接收到快照,如果从客户端节点24到达的写入命令的序列号小于或等于X,则目标节点28B丢弃该写入命令,并且累积具有大于X的序列号的写入命令。在从源节点28A接收到快照之后,目标节点28B从快照和本地累积的写入命令来创建数据卷的新副本56B。
只要写入命令按顺序到达,快照就包括直到序列号X的写入命令,并且目标节点28B累积的写入命令从序列号X+1开始。因此,即使写入命令继续到达并修改数据卷,目标节点28B具有用于构建与现有副本56A相同的新副本56B的完整信息。
另一方面,如果写入命令无序到达,则在源节点已经创建快照之后序列号大于X的写入命令到达源节点28A是可能的。这样的写入命令可能不包括在新副本56B中,因为(i)它不包括在快照中,并且(ii)它被目标节点28B丢弃。
在一些实施例中,系统20使用被称为“提升”写入命令的附加机制来克服该问题。在一个实施例中,在创建快照之后,源节点28A检查每个新到达的写入命令并验证其序列号是否大于X。
当检测到在创建快照之后到达但是具有大于X的序列号的写入命令时,源节点28A不确认写入命令。源节点将写入命令发送回客户端节点24,并请求客户端节点24重新发出具有新序列号的写入命令。作为响应,客户端节点24再次用新的序列号发出写入命令。新发布的(“提升的”)写入命令被发送到目标节点。由于新的序列号大于X,新发出的写入命令被添加到新副本。
在图2的例子中,在创建快照之后,具有IO#4366的写入命令到达源节点28A(回想X=#4367)。源节点指示客户端节点24A提升该写入命令。作为响应,客户端24A重新发出序列号为#4378的写入命令。由于新的序列号大于X,所以目标节点28B将新发出的写入命令添加到新副本56B。
因此,上述提升机制保证新副本56B保持与现有副本56A相同,尽管写入命令的无序到达。
图3为根据本发明的实施例示意性示出用于数据卷的同步恢复的方法的流程图。恢复方法以客户端节点在二重发送步骤80向源节点和目标节点发送IO命令开始。
在快照请求步骤84,目标节点请求源节点创建并发送包含IO#X的数据卷的快照。源节点创建快照并开始将其发送到目标节点。在选择性累积步骤88中,目标节点丢弃序列号≤X的写入命令,并累积序列号>X的写入命令。
在快照检查步骤92,目标节点检查整个快照是否已经从源节点到达。如果没有,则该方法循环回到上面的步骤88。一旦整个快照到达,目标节点在副本创建步骤96基于快照并基于累积的写入命令来创建数据卷的新副本。目标节点通常从快照初始化新副本,然后在初始化的副本中执行累积的写入命令。
并行地,在提升检查步骤100中,源节点检查在创建快照之后是否接收到具有序列号<X的写入命令。如果没有,则该方法循环回到上面的步骤88。在检测到序列号小于X的写入命令时,源节点在提升请求步骤104请求客客户端点“提升”写入命令,即重新发出具有新的序列号的写入命令。
图2和图3中描述的过程以示例的方式示出。在可选实施例中,可使用其他合适的恢复处理。例如,如果可以保证写入命令按顺序到达,则可以省略“提升”机制。
尽管这里描述的实施例主要涉及数据卷的恢复,但是本文描述的方法和系统也可以用于其他合适的存储应用中,例如对象存储和分布式文件系统。
因此,应理解上述实施例是通过实例引用的,本发明并不限于上文已具体示出和描述的内容。相反,本发明的范围包括上文所描述的各种特征以及本领域技术人员在阅读以上描述之后将想到的且未在现有技术中公开的其变型和修改的组合和子组合。通过引用结合在本专利申请中的文档被视为本申请的组成部分,除了在这些结合的文档中定义的任何术语与本说明书中明确地或隐含地作出的定义冲突时,仅应考虑本说明书中的定义。