首页> 中国专利> 在存储系统的中介器服务之间进行切换

在存储系统的中介器服务之间进行切换

摘要

一种在同步复制数据的存储系统内切换中介器的存储系统,其中,中介器之间的切换包括:在多个存储系统中的一个或更多个存储系统之间确定第一中介器服务的可用性的变化,其中,多个存储系统中的一个或更多个存储系统被配置为请求来自第一中介器服务的中介;在多个存储系统之间并且响应于确定第一中介器服务的可用性的变化,通信第二中介器服务以响应于故障而使用;以及根据第一中介器服务的可用性的变化,从第一中介器服务切换至第二中介器服务。

著录项

  • 公开/公告号CN112470142A

    专利类型发明专利

  • 公开/公告日2021-03-09

    原文格式PDF

  • 申请/专利权人 净睿存储股份有限公司;

    申请/专利号CN201980048664.6

  • 申请日2019-05-20

  • 分类号G06F16/182(20060101);

  • 代理机构11277 北京林达刘知识产权代理事务所(普通合伙);

  • 代理人刘新宇

  • 地址 美国加利福尼亚州

  • 入库时间 2023-06-19 10:08:35

说明书

附图说明

图1A例示根据一些实现的数据存储的第一示例系统。

图1B例示根据一些实现的数据存储的第二示例系统。

图1C例示根据一些实现的数据存储的第三示例系统。

图1D例示根据一些实现的数据存储的第四示例系统。

图2A是根据一些实施例的具有多个存储节点以及耦合到各存储节点以提供网络附加存储的内部存储的存储集群的透视图。

图2B是示出根据一些实施例的耦合多个存储节点的互连交换机的框图。

图2C是示出根据一些实施例的存储节点的内容以及非易失性固态存储单元其中之一的内容的多级框图。

图2D示出根据一些实施例的使用一些先前图中的存储节点和存储单元的实施例的存储服务器环境。

图2E是示出根据一些实施例的控制平面、计算和存储平面以及与基础物理资源进行交互的权限的刀片硬件框图。

图2F描绘了根据一些实施例的存储集群的刀片中的弹性软件层。

图2G描绘了根据一些实施例的存储集群的刀片中的权限和存储资源。

图3A阐述了根据本发明的一些实施例的被耦合以与云服务提供商进行数据通信的存储系统的图。

图3B阐述了根据本发明的一些实施例的存储系统的图。

图4阐述了例示根据本发明的一些实施例的支持豆荚(pod)的多个存储系统的框图。

图5阐述了例示根据本发明的一些实施例的支持豆荚的多个存储系统的框图。

图6阐述了例示根据本发明的一些实施例的支持豆荚的多个存储系统的框图。

图7阐述了根据本发明的一些实施例的可被实现为可表示存储数据的逻辑卷或逻辑卷的一部分的元数据对象的结构化集合的元数据表示的图。

图8阐述了例示根据本发明的一些实施例的在存储系统之间进行中介的示例方法的流程图。

图9阐述了例示根据本发明的一些实施例的在同步复制数据的多个存储系统之间切换中介器的示例方法的流程图。

图10阐述了例示根据本发明的一些实施例的在同步复制数据的多个存储系统之间切换中介器的示例方法的流程图。

具体实施方式

参考以图1A开始的附图来描述根据本发明的实施例的用于在同步复制数据的存储系统内切换中介器的示例方法、设备和产品。图1A例示根据一些实现的数据存储的示例系统。系统100(这里也称为“存储系统”)包括为了例示而非限制的目的的多个元件。可以注意到,系统100可以包括在其它实现中以相同或不同的方式配置的相同、更多或更少的元件。

系统100包括多个计算装置164A~B。计算装置(这里也称为“客户端装置”)可以体现为例如数据中心的服务器、工作站、个人计算机或笔记本等。计算装置164A~B可被耦合以通过存储区域网(SAN)158或局域网(LAN)160来与一个或多个存储阵列102A~B进行数据通信。

SAN 158可以利用各种数据通信结构、装置和协议来实现。例如,SAN 158的结构可以包括光纤通道、以太网、无限带宽(InfiniBand)或串行附加的小型计算机系统接口(SAS)等。与SAN 158一起使用的数据通信协议可以包括高级技术附件(ATA)、光纤通道协议、小型计算机系统接口(SCSI)、因特网小型计算机系统接口(iSCSI)、超小型计算机系统接口(HyperSCSI)或跨结构的非易失性存储器标准(NVMe)等。可以注意到,为了例示而非限制,提供了SAN 158。可以在计算装置164A~B和存储阵列102A~B之间实现其它数据通信耦合。

LAN 160也可以利用各种结构、装置和协议来实现。例如,LAN 160的结构可以包括以太网(802.3)或无线(802.11)等。LAN 160中所使用的数据通信协议可以包括传输控制协议(TCP)、用户数据报协议(UDP)、因特网协议(IP)、超文本传送协议(HTTP)、无线接入协议(WAP)、手持装置传输协议(HDTP)、会话发起协议(SIP)或实时协议(RTP)等。

存储阵列102A~B可以为计算装置164A~B提供持久数据存储。在实现中,存储阵列102A可被包含在机箱(未示出)中,并且存储阵列102B可被包含在另一机箱(未示出)中。存储阵列102A和102B可以包括一个或多个存储阵列控制器110(这里也称为“控制器”)。存储阵列控制器110可被体现为包括计算机硬件、计算机软件或计算机硬件和软件的组合的自动化计算机械模块。在一些实现中,存储阵列控制器110可被配置为执行各种存储任务。存储任务可以包括将从计算装置164A~B接收到的数据写入存储阵列102A~B、从存储阵列102A~B擦除数据、从存储阵列102A~B中检索数据并将数据提供至计算装置164A~B、监视和报告磁盘利用率和性能、进行诸如独立驱动冗余阵列(RAID)或RAID类数据冗余操作等的冗余操作、压缩数据、以及加密数据等。

存储阵列控制器110可以以各种方式实现,包括作为现场可编程门阵列(FPGA)、可编程逻辑芯片(PLC)、专用集成电路(ASIC)、片上系统(SOC)、或包括诸如处理装置、中央处理单元、计算机存储器或各种适配器等的分立组件的任何计算装置。存储阵列控制器110可以例如包括被配置为支持经由SAN 158或LAN 160的通信的数据通信适配器。在一些实现中,存储阵列控制器110可以独立地耦合到LAN 160。在实现中,存储阵列控制器110可以包括I/O控制器等,该I/O控制器使存储阵列控制器110通过中平面(未示出)耦合至持久存储资源170A~B(这里也称为“存储资源”)以进行数据通信。持久存储资源170A~B主要包括任意数量的存储驱动器171A~F(这里也称为“存储装置”)和任意数量的非易失性随机存取存储器(NVRAM)装置(未示出)。

在一些实现中,持久存储资源170A~B的NVRAM装置可被配置为从存储阵列控制器110接收要存储在存储驱动器171A~F中的数据。在一些示例中,数据可以源自计算装置164A~B。在一些示例中,将数据写入NVRAM装置可以比直接将数据写入存储驱动器171A~F更快地执行。在实现中,存储阵列控制器110可被配置为利用NVRAM装置作为注定要写入存储驱动器171A~F的数据的快速可访问缓冲器。相对于存储阵列控制器110直接将数据写入存储驱动器171A~F的系统,使用NVRAM装置作为缓冲器的写入请求的延时可能得到改善。在一些实现中,NVRAM装置可以利用高带宽、低延时RAM的形式的计算机存储器来实现。NVRAM装置被称为“非易失性”,这是因为NVRAM装置可以接收或包括唯一电源,该唯一电源在NVRAM装置的主电力损耗后维持RAM的状态。这样的电源可以是电池或者一个或多个电容器等。响应于电力损耗,NVRAM装置可被配置为将RAM的内容写入诸如存储驱动器171A~F等的持久存储。

在实现中,存储驱动器171A~F可以指被配置为持久地记录数据的任何装置,其中“持久地”或“持久”是指装置在电力损耗后维持所记录数据的能力。在一些实现中,存储驱动器171A~F可以与非磁盘存储介质相对应。例如,存储驱动器171A~F可以是一个或多个固态驱动器(SSD)、基于闪存存储器的存储、任何类型的固态非易失性存储器、或任何其它类型的非机械存储装置。在其它实现中,存储驱动器171A~F可以包括诸如硬盘驱动器(HDD)等的机械或旋转硬盘。

在一些实现中,存储阵列控制器110可被配置用于从存储阵列102A~B中的存储驱动器171A~F卸下装置管理责任。例如,存储阵列控制器110可以管理控制信息,该控制信息可以描述存储驱动器171A~F中的一个或多个存储器区块的状态。控制信息可以例如指示特定存储器区块已故障并且不应再被写入,特定存储器区块包含存储阵列控制器110的启动代码、已在特定存储器区块上进行的编程-擦除(P/E)周期的次数、特定存储器区块中所存储的数据的年龄、以及特定存储器区块中所存储的数据的类型等。在一些实现中,控制信息可以与相关存储器区块一起存储为元数据。在其它实现中,存储驱动器171A~F的控制信息可以存储在存储驱动器171A~F的由存储阵列控制器110选择的一个或多个特定存储器区块中。所选择的存储器区块可被标记有用于指示所选择的存储器区块包含控制信息的标识符。存储阵列控制器110可以与存储驱动器171A~F相结合地利用该标识符,以快速识别包含控制信息的存储器区块。例如,存储控制器110可以发出命令以定位包含控制信息的存储器区块。可以注意到,控制信息可能如此大以使得控制信息的一部分可能存储在多个位置,控制信息可能例如为了冗余的目的而存储在多个位置,或者控制信息可能以其它方式跨存储驱动器171A~F中的多个存储器区块分布。

在实现中,存储阵列控制器110可以通过从存储阵列102A~B的存储驱动器171A~F中检索描述存储驱动器171A~F中一个或多个存储器区块的状态的控制信息,来从存储驱动器171A~F卸下装置管理责任。从存储驱动器171A~F中检索控制信息可以例如通过存储阵列控制器110查询存储驱动器171A~F以获得特定存储驱动器171A~F的控制信息的位置来执行。存储驱动器171A~F可被配置为执行使得存储驱动器171A~F能够识别控制信息的位置的指令。这些指令可以由与存储驱动器171A~F相关联或以其它方式位于存储驱动器171A~F上的控制器(未示出)执行,并且可以使存储驱动器171A~F扫描各存储器区块的部分以识别用于存储驱动器171A~F的控制信息的存储器区块。存储驱动器171A~F可以通过向存储阵列控制器110发送包括存储驱动器171A~F的控制信息的位置的响应消息来进行响应。响应于接收到响应消息,存储阵列控制器110可以发出读取与存储驱动器171A~F的控制信息的位置相关联的地址处所存储的数据的请求。

在其它实现中,存储阵列控制器110还可以通过响应于接收到控制信息而进行存储驱动器管理操作,来从存储驱动器171A~F卸下装置管理责任。存储驱动器管理操作可以例如包括通常由存储驱动器171A~F(例如,与特定存储驱动器171A~F相关联的控制器(未示出))进行的操作。存储驱动器管理操作可以例如包括确保数据不被写入存储驱动器171A~F内的故障存储器区块以及确保数据以实现足够的磨损平衡的方式写入存储驱动器171A~F内的存储器区块等。

在实现中,存储阵列102A~B可以实现两个或更多个存储阵列控制器110。例如,存储阵列102A可以包括存储阵列控制器110A和存储阵列控制器110B。在给定实例中,存储系统100的单个存储阵列控制器110(例如,存储阵列控制器110A)可被指定为具有主状况(这里也称为“主控制器”),并且其它存储阵列控制器110(例如,存储阵列控制器110A)可被指定为具有辅状况(这里也称为“辅控制器”)。主控制器可能具有特定权利,诸如改变持久存储资源170A~B中的数据(例如,将数据写入持久存储资源170A~B)的许可等。主控制器的至少一些权利可以取代辅控制器的权利。例如,当主控制器具有改变持久存储资源170A~B中的数据的许可的权利时,辅控制器可能不具有该权利。存储阵列控制器110的状况可以改变。例如,存储阵列控制器110A可被指定为具有辅状况,而存储阵列控制器110B可被指定为具有主状况。

在一些实现中,诸如存储阵列控制器110A等的主控制器可以用作一个或多个存储阵列102A~B的主控制器,并且诸如存储阵列控制器110B等的第二控制器可以用作一个或多个存储阵列102A~B的辅控制器,例如,存储阵列控制器110A可以是存储阵列102A和存储阵列102B的主控制器,并且存储阵列控制器110B可以是存储阵列102A和102B的辅控制器。在一些实现中,存储阵列控制器110C和110D(也称为“存储处理模块”)可以既不具有主状况,也不具有辅状况。被实现为存储处理模块的存储阵列控制器110C和110D可以用作主控制器和辅控制器(例如分别为存储阵列控制器110A和110B)与存储阵列102B之间的通信接口。例如,存储阵列102A的存储阵列控制器110A可以经由SAN 158向存储阵列102B发送写入请求。写入请求可以由存储阵列102B的存储阵列控制器110C和110D这两者接收到。存储阵列控制器110C和110D促进通信,例如,将写入请求发送到适当的存储驱动器171A~F。可以注意到,在一些实现中,存储处理模块可以用于增加由主控制器和辅控制器控制的存储驱动器的数量。

在实现中,存储阵列控制器110经由中平面(未示出)而通信耦合到一个或多个存储驱动器171A~F以及被包括作为存储阵列102A~B的一部分的一个或多个NVRAM装置(未示出)。存储阵列控制器110可以经由一个或多个数据通信链路而耦合到中平面,并且中平面可以经由一个或多个数据通信链路而耦合到存储驱动器171A~F和NVRAM装置。这里描述的数据通信链路由数据通信链路108A~D共同地例示,并且可以包括例如快速外围组件互连(PCIe)总线。

图1B例示根据一些实现的数据存储的示例系统。图1B所例示的存储阵列控制器101可以与针对图1A所描述的存储阵列控制器110类似。在一个示例中,存储阵列控制器101可以与存储阵列控制器110A或存储阵列控制器110B类似。存储阵列控制器101包括为了例示而非限制的目的的多个元件。可以注意到,存储阵列控制器101可以包括在其它实现中以相同或不同的方式配置的相同、更多或更少的元件。可以注意到,可以在下方包括图1A中的元件,以帮助例示存储阵列控制器101的特征。

存储阵列控制器101可以包括一个或多个处理装置104和随机存取存储器(RAM)111。处理装置104(或控制器101)表示诸如微处理器或中央处理单元等的一个或多个通用处理装置。更特别地,处理装置104(或控制器101)可以是复杂指令集计算(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、或用于实现其它指令集的处理器或用于实现指令集的组合的处理器。处理装置104(或控制器101)也可以是诸如专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或网络处理器等的一个或多个专用处理装置。

处理装置104可以经由数据通信链路106而连接到RAM 111,该数据通信链路106可被体现为诸如第四代双倍数据速率(DDR4)总线等的高速存储器总线。存储在RAM 111中的是操作系统112。在一些实现中,指令113存储在RAM 111中。指令113可以包括用于在直接映射闪存存储系统中进行操作的计算机程序指令。在一个实施例中,直接映射闪存存储系统是直接对闪存驱动器内的数据区块进行寻址而无需闪存驱动器的存储控制器所进行的地址转换的系统。

在实现中,存储阵列控制器101包括经由数据通信链路105A~C而耦合到处理装置104的一个或多个主机总线适配器103A~C。在实现中,主机总线适配器103A~C可以是将主机系统(例如,存储阵列控制器)连接到其它网络和存储阵列的计算机硬件。在一些示例中,主机总线适配器103A~C可以是用于使存储阵列控制器101能够连接至SAN的光纤通道适配器或用于使存储阵列控制器101能够连接至LAN的以太网适配器等。主机总线适配器103A~C可以经由诸如PCIe总线等的数据通信链路105A~C而耦合到处理装置104。

在实现中,存储阵列控制器101可以包括耦合到扩展器115的主机总线适配器114。扩展器115可以用于将主机系统附接到更多的存储驱动器。扩展器115可以例如是用于在主机总线适配器114被体现为SAS控制器的实现中使主机总线适配器114能够附接到存储驱动器的SAS扩展器。

在实现中,存储阵列控制器101可以包括经由数据通信链路109而耦合到处理装置104的交换机116。交换机116可以是可从一个端点创建多个端点、从而使得多个装置能够共享一个端点的计算机硬件装置。交换机116可以例如是耦合到PCIe总线(例如,数据通信链路109)并向中平面呈现多个PCIe连接点的PCIe交换机。

在实现中,存储阵列控制器101包括用于将存储阵列控制器101耦合到其它存储阵列控制器的数据通信链路107。在一些示例中,数据通信链路107可以是快速通道互连(QPI)互连。

使用传统闪存驱动器的传统存储系统可以实现跨作为传统存储系统的一部分的闪存驱动器的处理。例如,存储系统的高级处理可以发起和控制跨闪存驱动器的处理。然而,传统存储系统的闪存驱动器可以包括其自己的、也进行该处理的存储控制器。因此,对于传统存储系统,可以进行(例如由存储系统发起的)高级处理和(例如由存储系统的存储控制器发起的)低级处理这两者。

为了解决传统存储系统的各种缺陷,可以通过高级处理而非低级处理来进行操作。例如,闪存存储系统可以包括不包含用于提供处理的存储控制器的闪存驱动器。因此,闪存存储系统本身的操作系统可以发起和控制处理。这可以通过直接映射闪存存储系统来实现,该直接映射闪存存储系统直接对闪存驱动器内的数据区块进行寻址而无需闪存驱动器的存储控制器所进行的地址转换。

闪存存储系统的操作系统可以识别和维持跨闪存存储系统的多个闪存驱动器的分配单元的列表。分配单元可以是全部擦除区块或多个擦除区块。操作系统可以维持用于直接将地址映射到闪存存储系统的闪存驱动器的擦除区块的映射或地址范围。

直接映射到闪存驱动器的擦除区块可以用于重写数据和擦除数据。例如,可以对包括第一数据和第二数据的一个或多个分配单元进行操作,其中第一数据将被保持,而第二数据将不再被闪存存储系统使用。操作系统可以发起用以将第一数据写入其它分配单元内的新位置、擦除第二数据、并将分配单元标记为可用于后续数据的处理。因此,该处理可以仅由闪存存储系统的高级操作系统进行,而无需闪存驱动器的控制器进行附加的低级处理。

该处理仅由闪存存储系统的操作系统进行的优点包括提高闪存存储系统的闪存驱动器的可靠性,这是因为在该处理期间没有进行不必要或冗余的写入操作。这里的一个可能的新颖点是在闪存存储系统的操作系统处发起和控制该处理的概念。另外,该处理可以由操作系统跨多个闪存驱动器进行控制。这与由闪存驱动器的存储控制器进行处理形成对比。

存储系统可以包括共享一组驱动器的两个存储阵列控制器以用于故障转移目的,或者存储系统可以包括提供利用多个驱动器的存储服务的单个存储阵列控制器,或者存储系统可以包括各自具有一定数量的驱动器或一定量的闪存存储的存储阵列控制器的分布式网络,其中网络中的存储阵列控制器协作提供完整的存储服务,并在包括存储分配和垃圾收集的存储服务的各个方面进行协作。

图1C例示根据一些实现的数据存储的第三示例系统117。系统117(这里也称为“存储系统”)包括为了例示而非限制的目的的多个元件。可以注意到,系统117可以包括在其它实现中以相同或不同的方式配置的相同、更多或更少的元件。

在一个实施例中,系统117包括具有可单独寻址的快速写入存储的双外围组件互连(PCI)闪存存储装置118。系统117可以包括存储控制器119。在一个实施例中,存储控制器119可以是CPU、ASIC、FPGA或可实现根据本发明所需的控制结构的任何其它电路。在一个实施例中,系统117包括可操作地耦合到存储装置控制器119的各个通道的闪存存储器装置(例如,包括闪存存储器装置120a~n)。闪存存储器装置120a~n可以作为闪存页、擦除区块和/或足以允许存储装置控制器119对闪存的各方面进行编程和检索的控制元素的可寻址集合而呈现给控制器119。在一个实施例中,存储装置控制器119可以对闪存存储器装置120a~n进行操作,该操作包括存储和检索页的数据内容、布置和擦除任何区块、跟踪与闪存存储器页、擦除区块和单元的使用和重复使用相关的统计、跟踪和预测闪存存储器内的错误代码和故障、控制与对闪存单元的内容进行编程和检索相关联的电压电平,等等。

在一个实施例中,系统117可以包括用以存储可单独寻址的快速写入数据的RAM121。在一个实施例中,RAM 121可以是一个或多个单独的分立装置。在另一实施例中,RAM121可以集成到存储装置控制器119或多个存储装置控制器中。RAM 121也可以用于其它目的,诸如存储装置控制器119中的处理装置(例如,CPU)的暂时性程序存储器等。

在一个实施例中,系统117可以包括诸如可充电电池或电容器等的存储能量装置122。存储能量装置122可以存储足够的能量来为存储装置控制器119、一定量的RAM(例如,RAM 121)和一定量的闪存存储器(例如,闪存存储器120a~120n)供电足以将RAM的内容写入闪存存储器的时间。在一个实施例中,如果存储装置控制器119检测到外部电力的损耗,则存储装置控制器可以将RAM的内容写入闪存存储器。

在一个实施例中,系统117包括两个数据通信链路123a、123b。在一个实施例中,数据通信链路123a、123b可以是PCI接口。在另一实施例中,数据通信链路123a、123b可以基于其它通信标准(例如,超传输(HyperTransport)、无限带宽等)。数据通信链路123a、123b可以基于非易失性存储器标准(NVMe)或跨结构的NVMe(NVMf)规范,该规范允许从存储系统117中的其它组件到存储装置控制器119的外部连接。应当注意,为了方便起见,这里可以将数据通信链路可互换地称为PCI总线。

系统117还可以包括外部电源(未示出),该外部电源可被设置在数据通信链路123a、123b其中之一或这两者上,或者可被单独地设置。可选实施例包括专用于存储RAM121的内容的单独的闪存存储器(未示出)。存储装置控制器119可以呈现PCI总线上的逻辑装置,该逻辑装置可以包括可寻址的快速写入逻辑装置、或者可被呈现为PCI存储器或持久存储的存储装置118的逻辑地址空间的不同部分。在一个实施例中,用以存储到装置中的操作旨在存储到RAM 121中。在电力故障时,存储装置控制器119可以将与可寻址的快速写入逻辑存储相关联的存储内容写入闪存存储器(例如,闪存存储器120a~n)以供长期持久存储。

在一个实施例中,逻辑装置可以包括闪存存储器装置120a~n的部分或全部内容的某种呈现,其中该呈现允许包括存储装置118的存储系统(例如,存储系统117)通过PCI总线从存储装置外部的存储系统组件直接对闪存存储器页进行寻址以及直接对擦除区块进行重新编程。该呈现还可以允许一个或多个外部组件控制和检索闪存存储器的其它方面,包括以下各项中的部分或全部:跟踪与跨所有闪存存储器装置的闪存存储器页、擦除区块和单元的使用和重复使用相关的统计;跟踪并预测闪存存储器装置内以及跨闪存存储器装置的错误代码和故障;控制与对闪存单元的内容进行编程和检索相关联的电压电平;等等。

在一个实施例中,存储能量装置122可足以确保完成针对闪存存储器装置120a~120n的正在进行的操作,存储能量装置122可以向存储装置控制器119和相关闪存存储器装置(例如,120a~n)供电以用于这些操作以及用于将快速写入RAM存储到闪存存储器。存储能量装置122可以用于存储闪存存储器装置120a~n和/或存储装置控制器119所保存和跟踪的累积统计和其它参数。针对这里所述的操作中的部分或全部操作,可以使用单独的电容器或存储能量装置(诸如闪存存储器装置附近或本身内嵌的较小电容器等)。

各种方案可以用于跟踪和优化存储能量组件的寿命,诸如随时间调整电压电平、对存储能量装置122进行部分放电以测量相应的放电特性等。如果可用能量随时间减少,则可寻址的快速写入存储的有效可用容量可能减少,以确保其能够基于当前可用的存储能量被安全地写入。

图1D例示根据一些实现的数据存储的第三示例系统124。在一个实施例中,系统124包括存储控制器125a、125b。在一个实施例中,存储控制器125a、125b可操作地分别耦合到双PCI存储装置119a、119b和119c、119d。存储控制器125a、125b可以可操作地(例如,经由存储网络130)耦合到一定数量的主机计算机127a~n。

在一个实施例中,两个存储控制器(例如,125a和125b)提供存储服务,诸如SCS区块存储阵列、文件服务器、对象服务器、数据库或数据分析服务等。存储控制器125a、125b可以通过一定数量的网络接口(例如,126a~d)向存储系统124外部的主机计算机127a~n提供服务。存储控制器125a、125b可以完全在存储系统124内提供集成服务或应用,从而形成融合存储和计算系统。存储控制器125a、125b可以利用存储装置119内或跨存储装置119的快速写入存储器来记录正在进行的操作,以确保在电力故障、存储控制器移除、存储控制器或存储系统关闭或者存储系统124内的一个或多个软件或硬件组件的某种故障时操作不会丢失。

在一个实施例中,控制器125a、125b作为一个或另一PCI总线128a、128b的PCI主控进行操作。在另一实施例中,128a和128b可以基于其它通信标准(例如,超传输、无限带宽等)。其它存储系统实施例可以使存储控制器125a、125b作为PCI总线128a、128b这两者的多主控进行操作。可选地,PCI/NVMe/NVMf交换基础设施或结构可以连接多个存储控制器。一些存储系统实施例可以允许存储装置彼此直接通信,而不是仅与存储控制器进行通信。在一个实施例中,存储装置控制器119a可以在存储控制器125a的指示下操作,以根据已存储在RAM(例如,图1C的RAM 121)中的数据合成并传送要存储到闪存存储器装置中的数据。例如,可以在存储控制器已经判断为跨存储系统完全提交了操作之后、或者在装置上的快速写入存储器达到了特定使用容量时、或者在特定时间量之后传送RAM内容的重新计算版本,以确保提高数据的安全性或释放可寻址的快速写入容量以供重复使用。该机制可以例如用于避免通过总线(例如,128a、128b)从存储控制器125a、125b进行第二次传送。在一个实施例中,重新计算可以包括压缩数据、附加索引或其它元数据、将多个数据段组合在一起、进行擦除码计算等。

在一个实施例中,在存储控制器125a、125b的指示下,存储装置控制器119a、119b可以可操作地在不涉及存储控制器125a、125b的情况下根据RAM(例如,图1C的RAM 121)中所存储的数据来计算数据并将数据传送到其它存储装置。该操作可以用于在一个控制器125a中将所存储的数据镜像到另一控制器125b,或者其可以用于将压缩、数据聚合和/或擦除编码计算和传送卸载到存储装置,以减少存储控制器或到PCI总线128a、128b的存储控制器接口129a、129b上的负载。

存储装置控制器119可以包括用于实现高可用性原语以供双PCI存储装置118外部的存储系统的其它部分使用的机制。例如,可以提供保留或排除原语,使得在提供高可用性存储服务的具有两个存储控制器的存储系统中,一个存储控制器可以防止另一存储控制器访问或继续访问存储装置。该机制可以例如在一个控制器检测到另一控制器运行不正常或两个存储控制器之间的互连本身可能运行不正常的情况下使用。

在一个实施例中,与具有可单独寻址的快速写入存储的双PCI直接映射存储装置一起使用的存储系统包括将擦除区块或擦除区块组作为用于存储代表存储服务的数据、或用于存储与存储服务相关联的元数据(例如,索引、日志等)、或用于适当地管理存储系统本身的分配单元进行管理的系统。可以在数据到达时或者在存储系统要将数据保持长时间间隔(例如,所定义的时间阈值以上)时写入闪存页,这种闪存页的大小可能是几千字节。为了更快地提交数据,或者为了减少写入闪存存储器装置的次数,存储控制器可以首先将数据写入一个或多个存储装置上的可单独寻址的快速写入存储中。

在一个实施例中,存储控制器125a、125b可以根据存储装置的年龄和预期剩余寿命或者基于其它统计来发起存储装置(例如,118)内和跨存储装置(例如,118)的擦除区块的使用。存储控制器125a、125b可以根据不再需要的页在存储装置之间发起垃圾收集和数据迁移,并管理闪存页和擦除区块寿命以及管理整个系统性能。

在一个实施例中,存储系统124可以利用镜像和/或擦除编码方案作为将数据存储到可寻址的快速写入存储的部分和/或作为将数据写入与擦除区块相关联的分配单元的部分。擦除码可以跨存储装置、以及在擦除区块或分配单元内、或者在单个存储装置上的闪存存储器装置内以及跨单个存储装置上的闪存存储器装置使用,以提供针对单个或多个存储装置故障的冗余或进行保护以防止由闪存存储器操作或闪存存储器单元的劣化导致的闪存存储器页的内部损坏。不同级别的镜像和擦除编码可用于从单独或组合发生的多种类型的故障中恢复。

参考图2A~G所描绘的实施例例示存储集群,该存储集群存储用户数据,诸如源自一个或多个用户或客户端系统或存储集群外部的其它源的用户数据。存储集群使用擦除编码和元数据的冗余副本跨容纳在机箱内的存储节点或者跨多个机箱分布用户数据。擦除编码是指数据保护或重建的方法,其中数据跨诸如磁盘、存储节点或地理位置等的一组不同位置存储。闪存存储器是可以与实施例集成的一种类型的固态存储器,但实施例可以扩展到其它类型的固态存储器或包括非固态存储器的其它存储介质。存储位置的控制和工作负载跨集群对等系统中的存储位置分布。诸如不同存储节点之间的中介通信、检测存储节点何时变得不可用以及平衡跨不同存储节点的I/O(输入和输出)等的任务都在分布式的基础上被处理。在一些实施例中,数据在支持数据恢复的数据片段或条带中跨多个存储节点布局或分布。数据的所有权可以与输入模式和输出模式无关地在集群内重新指派。以下更详细地描述的这种架构允许集群中的存储节点故障,而系统保持可操作,这是因为数据可以从其它存储节点重建并因此保持可用于输入和输出操作。在各种实施例中,存储节点可被称为集群节点、刀片或服务器。

存储集群可被包含在机箱(即,容纳一个或多个存储节点的箱体)内。用以向各存储节点供电的机构(诸如配电总线)以及使存储节点之间能够通信的通信机构(诸如通信总线)可以被包括在机箱内。根据一些实施例,存储集群可以在一个位置中作为独立系统运行。在一个实施例中,机箱包含可以独立地启用或禁用的配电总线和通信总线两者的至少两个实例。内部通信总线可以是以太网总线,然而,诸如PCIe和无限带宽等的其它技术同样是合适的。机箱提供用于能够直接地或通过交换机在多个机箱之间以及与客户端系统进行通信的外部通信总线的端口。外部通信可以使用诸如以太网、无限带宽、光纤通道等的技术。在一些实施例中,外部通信总线使用不同的通信总线技术来进行机箱间和客户端通信。如果交换机部署在机箱内或机箱之间,则交换机可以用作多个协议或技术之间的转换。当多个机箱被连接以定义存储集群时,存储集群可以通过客户端使用专有接口或标准接口(诸如网络文件系统(NFS)、通用互联网文件系统(CIFS)、小型计算机系统接口(SCSI)或超文本传送协议(HTTP)等)来访问。来自客户端协议的转换可以发生在交换机、机箱外部通信总线处或各存储节点内。在一些实施例中,多个机箱可以通过聚合器交换机彼此耦合或连接。部分和/或全部耦合或连接的机箱可被指定为存储集群。如以上所讨论的,各机箱可以具有多个刀片,各刀片具有介质访问控制(MAC)地址,但是在一些实施例中,存储集群被呈现给外部网络为具有单个集群IP地址和单个MAC地址。

各存储节点可以是一个或多个存储服务器,并且各存储服务器连接到一个或多个非易失性固态存储器单元,该一个或多个非易失性固态存储器单元可被称为存储单元或存储装置。一个实施例包括在各存储节点中以及在一个至八个非易失性固态存储器单元之间的单个存储服务器,然而该示例并不意味着限制。存储服务器可以包括处理器、DRAM和用于内部通信总线的接口以及用于各电源总线的配电。在一些实施例中,在存储节点内,接口和存储单元共享通信总线(例如,PCI Express)。非易失性固态存储器单元可以通过存储节点通信总线直接访问内部通信总线接口,或者请求存储节点访问总线接口。非易失性固态存储器单元包含嵌入式CPU、固态存储控制器和一定量的固态大容量存储,例如在一些实施例中为2~32太字节(TB)之间等。在非易失性固态存储器单元中包括诸如DRAM等的嵌入式易失性存储介质和能量储备设备。在一些实施例中,能量储备设备是电容器、超级电容器或电池,其使得能够在电力损耗的情况下将DRAM内容的子集传送到稳定的存储介质。在一些实施例中,非易失性固态存储器单元用存储类存储器(诸如替代DRAM并且使电力保持设备能够减小的相变或磁阻随机存取存储器(MRAM)等)构建。

存储节点和非易失性固态存储的许多特征中的一个是在存储集群中主动地重建数据的能力。存储节点和非易失性固态存储可以确定存储集群中的存储节点或非易失性固态存储何时不可达,而不管是否存在读取涉及该存储节点或非易失性固态存储的数据的尝试。然后,存储节点和非易失性固态存储协作以在至少部分新的位置中恢复和重建数据。这构成主动重建,因为系统无需等待直到从采用存储集群的客户端系统发起的读取访问需要该数据为止而重建该数据。以下讨论了存储存储器及其操作的这些和进一步的细节。

图2A是根据一些实施例的具有多个存储节点150以及耦合到各存储节点以提供网络附加存储或存储区域网络的内部固态存储器的存储集群161的透视图。网络附加存储、存储区域网络或存储集群或其它存储存储器可以包括一个或多个存储集群161,各存储集群161具有一个或多个存储节点150,其处于物理组件和由此提供的存储存储器的量这两者的灵活的和可重新配置的布置中。存储集群161被设计以装配在机架中,并且一个或多个机架可以根据存储存储器的需要来设置和填充。存储集群161具有机箱138,该机箱138具有多个槽142。应当理解,机箱138可被称为外壳、箱体或机架单元。在一个实施例中,机箱138具有十四个槽142,但容易设想到槽的其它数量。例如,一些实施例具有四个槽、八个槽、十六个槽、三十二个槽或其它合适数量的槽。在一些实施例中,各槽142可以容纳一个存储节点150。机箱138包括可用于将机箱138安装在机架上的翼片(flap)148。风扇144提供用于冷却存储节点150及其组件的空气循环,但是可以使用其它冷却组件,或者可以设想不具有冷却组件的实施例。交换机结构146将机箱138内的存储节点150耦合在一起并耦合到网络以用于与存储器通信。在这里描绘的实施例中,为了例示性目的,交换机结构146和风扇144左侧的槽142被示出为由存储节点150占据,而交换机结构146和风扇144右侧的槽142是空的并且可用于插入存储节点150。该配置是一个示例,并且在各种另外的布置中一个或多个存储节点150可以占据槽142。在一些实施例中,存储节点布置不需要是连续的或相邻的。存储节点150是可热插拔的,这意味着可以在不停止或关闭系统的情况下将存储节点150插入到机箱138中的槽142中或从槽142中移除。在相对于槽142插入或移除存储节点150时,系统自动重新配置以识别并适应改变。在一些实施例中,重新配置包括恢复冗余和/或重新平衡数据或负载。

各存储节点150可以具有多个组件。在这里所示的实施例中,存储节点150包括由CPU 156即处理器、耦合到CPU 156的存储器154以及耦合到CPU 156的非易失性固态存储152填充的印刷电路板159,但是在进一步的实施例中可以使用其它安装件和/或组件。存储器154具有由CPU 156执行的指令和/或由CPU 156操作的数据。如以下进一步说明的,非易失性固态存储152包括闪存,或者在进一步的实施例中包括其它类型的固态存储器。

参考图2A,如上所述,存储集群161是可扩展的,这意味着容易添加具有非统一存储大小的存储容量。在一些实施例中,一个或多个存储节点150可以插入到各机箱中或从各机箱移除并且存储集群自行配置。插入式存储节点150,无论是交付时安装在机箱中的还是后来添加的,都可以具有不同的大小。例如,在一个实施例中,存储节点150可以具有4TB的任何倍数,例如,8TB、12TB、16TB、32TB等。在进一步的实施例中,存储节点150可以具有其它存储量或容量的任何倍数。各存储节点150的存储容量被广播,并且影响如何对数据进行条带化的决定。为了最大的存储效率,受到在机箱内多达一个或多达两个非易失性固态存储单元152或存储节点150的损失的情况下的连续运行的预定要求,实施例可以在条带中尽可能广泛地自行配置。

图2B是示出耦合多个存储节点150的通信互连171A~F和配电总线172的框图。参考回图2A,在一些实施例中,通信互连171A~F可以包括在交换机结构146中或与交换机结构146一起实现。在一些实施例中,在多个存储集群161占据机架的情况下,通信互连171A~F可以包括在机架交换机的顶部或与机架交换机的顶部一起实现。如图2B所例示,存储集群161被封闭在单个机箱138内。外部端口176通过通信互连171A~F耦合到存储节点150,而外部端口174直接耦合到存储节点。外部电源端口178耦合到配电总线172。存储节点150可以包括如参考图2A所述的非易失性固态存储152的变化量和不同容量。另外,一个或多个存储节点150可以是如图2B所例示的仅计算存储节点。权限168在非易失性固态存储152上实现,例如作为存储在存储器中的列表或其它数据结构。在一些实施例中,权限被存储在非易失性固态存储152内,并且由在非易失性固态存储152的控制器或其它处理器上执行的软件支持。在进一步的实施例中,权限168在存储节点150上实现,例如作为存储在存储器154中的列表或其它数据结构并由在存储节点150的CPU 156上执行的软件支持。在一些实施例中,权限168控制数据如何存储在非易失性固态存储152中以及存储在非易失性固态存储152的何处。该控制有助于确定哪种类型的擦除编码方案被应用于数据以及哪些存储节点150具有数据的哪些部分。各权限168可被指派给非易失性固态存储152。在各种实施例中,各权限可以控制由文件系统、由存储节点150或由非易失性固态存储152指派给数据的索引节点号、段号或其它数据标识符的范围。

在一些实施例中,每条数据和每条元数据在系统中具有冗余。另外,每条数据和每条元数据具有所有者,这可以被称为权限。如果该权限例如由于存储节点的故障而不可达,则存在用于如何找到该数据或该元数据的继承计划。在各种实施例中,存在权限168的冗余副本。在一些实施例中,权限168具有与存储节点150和非易失性固态存储152的关系。覆盖数据段号或数据的其它标识符的范围的各权限168可被指派给特定的非易失性固态存储152。在一些实施例中,用于所有此类范围的权限168分布在存储集群的非易失性固态存储152上。各存储节点150具有提供对该存储节点150的一个或多个非易失性固态存储152的访问的网络端口。在一些实施例中,数据可以存储在与段号相关联的段中,并且该段号是针对RAID(独立磁盘冗余阵列)条带的配置的一种间接性(indirection)。因此,权限168的指派和使用建立了对数据的间接性。根据一些实施例,间接性可被称为在这种情况下经由权限168间接引用数据的能力。段识别可以包含数据的一组非易失性固态存储152和该组非易失性固态存储152中的本地标识符。在一些实施例中,本地标识符是装置中的偏移,并且可以由多个段顺序地重复使用。在其它实施例中,本地标识符对于特定的段是唯一的,且从不重复使用。非易失性固态存储152中的偏移被应用于定位数据以写入非易失性固态存储152或从非易失性固态存储152读取(以RAID条带的形式)。跨非易失性固态存储152的多个单元条带化数据,该非易失性固态存储152可以包括或不同于具有用于特定数据段的权限168的非易失性固态存储152。

在存在特定数据段被定位在何处的改变的情况下,例如在数据移动或数据重建期间,应当在具有该权限168的非易失性固态存储152或存储节点150处查阅针对该数据段的权限168。为了定位特定的数据,实施例计算数据段的散列值或应用索引节点号或数据段号。该操作的输出指向具有用于该特定数据的权限168的非易失性固态存储152。在一些实施例中,针对进行该操作,存在两级。第一级将例如段号、索引节点号或目录号等的实体标识符(ID)映射到权限标识符。该映射可以包括诸如散列或位掩码等的计算。第二级是将权限标识符映射到特定的非易失性固态存储152,其可以通过显式映射来完成。该操作是可重复的,使得在进行计算时,计算的结果可重复地且可靠地指向具有该权限168的特定非易失性固态存储152。该操作可以包括一组可达的存储节点作为输入。如果该组可达的非易失性固态存储单元改变,则最佳组改变。在一些实施例中,持续保持的值是当前指派(其总是为真),并且所计算出的值是集群将尝试重新配置的目标指派。该计算可以用于在存在可达并且构成相同的集群的一组非易失性固态存储152的情况下为权限确定最佳的非易失性固态存储152。该计算还确定一组有序的对等非易失性固态存储152,该对等非易失性固态存储152还将记录对非易失性固态存储映射的权限,使得即使所指派的非易失性固态存储不可达,也可以确定权限。在一些实施例中如果特定权限168不可用,则可以查阅副本或替代权限168。

参考图2A和2B,存储节点150上的CPU 156的许多任务中的两个任务是分解写入数据以及重组读取数据。在系统已判断为要写入数据的情况下,用于该数据的权限168按照如上定位。在已经确定数据的段ID的情况下,将写入请求转发到当前被确定为从段所确定的权限168的主机的非易失性固态存储152。然后,驻留有非易失性固态存储152和相应的权限168的存储节点150的主机CPU 156对数据进行分解或分片,并将数据发送到各种非易失性固态存储152。所发送的数据根据擦除编码方案被写为数据条带。在一些实施例中,请求拉取数据,并且在其它实施例中,推送数据。相反,当读取数据时,包含数据的段ID的权限168按照如上定位。驻留有非易失性固态存储152和相应的权限168的存储节点150的主机CPU156请求来自由权限指向的非易失性固态存储和相应存储节点的数据。在一些实施例中,该数据作为数据条带从闪存存储读取。然后,存储节点150的主机CPU 156重组读取的数据,根据适当的擦除编码方案校正任何错误(如果存在的话),并且将重组数据转发到网络。在进一步的实施例中,这些任务中的部分或全部可以在非易失性固态存储152中处理。在一些实施例中,段主机通过从存储中请求页、然后将数据发送到进行原始请求的存储节点,来请求将数据发送到存储节点150。

在一些系统中,例如在UNIX型文件系统中,使用索引式节点或索引节点来处理数据,其中索引式节点或索引节点指定表示文件系统中的对象的数据结构。对象可以例如是文件或目录。元数据可以伴随该对象,作为诸如许可数据和创建时间戳等的属性以及其它属性。段号可被指派给文件系统中的此类对象的全部或一部分。在其它系统中,使用在其它位置指派的段号来处理数据段。为了讨论的目的,分布单元是实体,并且实体可以是文件、目录或段。也就是说,实体是由存储系统存储的数据或元数据的单元。实体被分组为称为权限的组。各权限具有权限所有者,其是具有对权限中的实体进行更新的专有权的存储节点。换句话说,存储节点包含权限,并且该权限继而包含实体。

根据一些实施例,段是数据的逻辑容器。段是介质地址空间和物理闪存位置之间的地址空间,即数据段号在该地址空间中。段也可以包含元数据,其使得数据冗余能够被恢复(重写到不同的闪存位置或装置),而无需涉及高级软件。在一个实施例中,段的内部格式包含客户端数据和介质映射以确定该数据的位置。在适用的情况下,通过将段分解成多个数据和奇偶校验分片(shard)来保护各数据段,例如,防止存储器故障和其它故障。根据擦除编码方案,该数据和奇偶校验分片跨耦合到主机CPU 156(参见图2E和2G)的非易失性固态存储152分布,即条带化。在一些实施例中,术语段的使用是指容器及其在段的地址空间中的位置。根据一些实施例,术语条带的使用是指与段相同的一组分片,并且包括分片如何与冗余或奇偶校验信息一起分布。

跨整个存储系统发生一系列地址空间变换。在顶部是链接到索引节点的目录条目(文件名)。索引节点指向逻辑地存储数据的介质地址空间。介质地址可以通过一系列间接介质进行映射以分散大文件的负载,或者实现如去重复或快照等的数据服务。介质地址可以通过一系列间接介质进行映射以分散大文件的负载,或者实现如去重复或快照等的数据服务。然后,段地址被转换为物理闪存位置。根据一些实施例,物理闪存位置具有由系统中的闪存量界定的地址范围。介质地址和段地址是逻辑容器,并且在一些实施例中使用128位或更大的标识符以致实际上是无限的,其中重复使用的可能性被计算为比系统的预期寿命更长。在一些实施例中,以分层方式分配来自逻辑容器的地址。最初,各非易失性固态存储单元152可被指派一定范围的地址空间。在该指派的范围内,非易失性固态存储152能够分配地址而无需与其它非易失性固态存储152同步。

数据和元数据由针对不同工作负载模式和存储装置优化的一组基础存储布局来存储。这些布局包含多个冗余方案、压缩格式和索引算法。这些布局中的一些布局存储与权限和权限主控有关的信息,而其它布局存储文件元数据和文件数据。该冗余方案包括容许单个存储装置(诸如NAND闪存芯片等)内的损坏位的错误校正码、容许多个存储节点的故障的擦除码、以及容许数据中心或区域故障的复制方案。在一些实施例中,在单个存储单元内使用低密度奇偶校验(LDPC)码。在一些实施例中,在存储集群内使用里德-所罗门(Reed-Solomon)编码,并且在存储网格内使用镜像。元数据可以使用有序日志结构的索引(诸如日志结构的合并树等)来存储,而大数据不可以存储在日志结构的布局中。

为了维持跨实体的多个副本的一致性,存储节点通过计算隐式地商定两个事物:(1)包含实体的权限,以及(2)包含权限的存储节点。实体到权限的指派可以通过将实体伪随机地指派给权限、通过基于外部产生的密钥将实体划分成范围、或者通过将单个实体放置到各权限中来完成。伪随机方案的示例是线性散列和复制下可扩展散列(RUSH)散列族,后者包括受控的复制下可扩展散列(CRUSH)。在一些实施例中,伪随机指派仅用于向节点指派权限,这是因为该组节点可以改变。该组权限不能改变,因此在这些实施例中可以应用任何主观功能。一些放置方案自动在存储节点上放置权限,而其它放置方案依赖于权限到存储节点的显式映射。在一些实施例中,利用伪随机方案以从各权限映射到一组候选权限所有者。与CRUSH相关的伪随机数据分布函数可以向存储节点指派权限,并创建指派了权限的列表。各存储节点具有伪随机数据分布函数的副本,并且可以得到用于分布以及随后查找或定位权限的相同计算。在一些实施例中,伪随机方案各自需要可达的一组存储节点作为输入,以推断出相同的目标节点。一旦实体已被放置在权限中,该实体就可以被存储在物理装置上,使得预期的故障将不会造成非预期的数据丢失。在一些实施例中,重新平衡算法尝试将权限内的所有实体的副本存储在相同布局中并在同一组机器上。

预期故障的示例包括装置故障、被盗机器、数据中心火灾以及诸如核事件或地质事件等的区域灾害。不同的故障造成不同级别的可接受数据丢失。在一些实施例中,被盗存储节点既不影响系统的安全性也不影响系统的可靠性,而根据系统配置,区域事件可能造成无数据丢失、几秒或几分钟的丢失更新或甚至完全数据丢失。

在实施例中,用于存储冗余的数据的放置独立于用于数据一致性的权限的放置。在一些实施例中,包含权限的存储节点不包含任何持久存储。作为替代,存储节点连接到不包含权限的非易失性固态存储单元。存储节点和非易失性固态存储单元之间的通信互连包含多种通信技术,并且具有非统一的性能和容错特性。在一些实施例中,如上所述,非易失性固态存储单元经由PCI Express连接到存储节点,存储节点使用以太网背板在单个机箱内连接在一起,并且机箱连接在一起以形成存储集群。在一些实施例中,存储集群使用以太网或光纤通道连接到客户端。如果多个存储集群被配置到存储网格中,则使用因特网或其它长距离网络链路(诸如不穿过因特网的“城域规模”链路或私人链路等)来连接多个存储集群。

权限所有者具有修改实体、将实体从一个非易失性固态存储单元迁移到另一非易失性固态存储单元、以及添加和移除实体的副本的专有权。这允许维持基础数据的冗余。当权限所有者故障、将要停用或过载时,权限被转移到新的存储节点。瞬时故障使得确保所有非故障机器在新的权限位置上达成一致是有意义的。由瞬时故障引起的不确定可以通过诸如Paxos、热-温故障转移方案等的共识协议自动地、经由通过远程系统管理员或通过本地硬件管理员的人工干预(诸如通过将故障机器从集群中物理地移除或按压故障机器上的按钮等)来实现。在一些实施例中,使用共识协议,并且故障转移是自动的。根据一些实施例,如果太多的故障或复制事件在太短的时间段内发生,则系统进入自保护模式,并且停止复制和数据移动活动,直到管理员干预为止。

随着权限在存储节点之间转移并且权限所有者在其权限中更新实体,系统在存储节点和非易失性固态存储单元之间传送消息。关于持久消息,具有不同目的的消息具有不同类型。根据消息的类型,系统维持不同的排序和持久性保证。随着持久消息正被处理,该消息以多个持久性和非持久性存储硬件技术被临时地存储。在一些实施例中,消息被存储在RAM、NVRAM中和NAND闪存装置上,并且使用各种协议以有效地使用各存储介质。延时敏感的客户端请求可以保持在复制的NVRAM中,然后保持在NAND中,而后台重新平衡操作直接保持到NAND。

持久消息在被发送之前被持久地存储。这允许系统继续服务于客户端请求,尽管存在故障和组件替换。虽然许多硬件组件包含对系统管理员、制造商、硬件供应链和持续监视质量控制基础设施可见的唯一标识符,但是运行在基础设施地址顶部上的应用使地址虚拟化。不管组件故障和替换,这些虚拟化地址在存储系统的整个生命周期内不会改变。这允许存储系统的各组件随时间被替换,而不需要重新配置或中断客户端请求处理,即,系统支持非中断升级。

在一些实施例中,虚拟化地址以足够的冗余被存储。连续监视系统将硬件和软件状态以及硬件标识符相关联。这允许检测和预测由于故障组件和制造细节引起的故障。在一些实施例中,监视系统还通过从关键路径移除组件,实现在故障发生之前从受影响的装置主动转移权限和实体。

图2C是示出存储节点150的内容和存储节点150的非易失性固态存储152的内容的多级框图。在一些实施例中,数据通过网络接口控制器(NIC)202相对于存储节点150进行通信。如以上所讨论的,各存储节点150具有CPU 156以及一个或多个非易失性固态存储152。在图2C中向下移动一级,各非易失性固态存储152具有相对快速的非易失性固态存储器,诸如非易失性随机存取存储器(NVRAM)204和闪存存储器206等。在一些实施例中,NVRAM 204可以是不需要编程/擦除周期的组件(DRAM、MRAM、PCM),并且可以是能够支持比从该存储器读取频繁得多地被写入的存储器。在图2C中向下移动另一级,NVRAM 204在一个实施例中被实现为由能量储备218备份的诸如动态随机存取存储器(DRAM)216等的高速易失性存储器。能量储备218提供充足的电力以在电力故障的情况下保持对DRAM 216供电足够长时间以用于将内容传送到闪存存储器206。在一些实施例中,能量储备218是电容器、超级电容器、电池或其它装置,其供给足以在电力损耗的情况下使得DRAM 216的内容能够传送到稳定的存储介质的合适能量供应。闪存存储器206被实现为多个闪存晶圆222,其可被称为闪存晶圆222的封装或闪存晶圆222的阵列。应当理解,闪存晶圆222可以通过以下任意多个方式封装:每个封装一个晶圆、每个封装多个晶圆(即多芯片封装)、以混合封装、作为印刷电路板或其它基板上的裸晶圆、作为封装晶圆等。在所示的实施例中,非易失性固态存储152具有控制器212或其它处理器以及耦合到控制器212的输入输出(I/O)端口210。I/O端口210耦合到闪存存储节点150的CPU 156和/或网络接口控制器202。闪存输入输出(I/O)端口220耦合到闪存晶圆222,并且直接存储器存取单元(DMA)214耦合到控制器212、DRAM 216和闪存晶圆222。在所示的实施例中,在可编程逻辑装置(PLD)208(例如现场可编程门阵列(FPGA))上实现I/O端口210、控制器212、DMA单元214和闪存I/O端口220。在该实施例中,各闪存晶圆222具有被组织为十六kB(千字节)页224的页、以及能够相对于闪存晶圆222写入或读取数据的寄存器226。在进一步的实施例中,代替闪存晶圆222内所例示的闪存存储器或者作为闪存晶圆222内所例示的闪存存储器的附加而使用其它类型的固态存储器。

在这里公开的各种实施例中,存储集群161一般可以与存储阵列形成对比。存储节点150是创建存储集群161的集合的一部分。各存储节点150拥有提供数据所需的数据切片和计算。多个存储节点150进行协作以存储和检索数据。如一般在存储阵列中使用的存储存储器或存储装置较少涉及数据的处理和操纵。存储阵列中的存储存储器或存储装置接收用于读取、写入或擦除数据的命令。存储阵列中的存储存储器或存储装置不知道其所嵌入的更大系统、或者数据意味着什么。存储阵列中的存储存储器或存储装置可以包括各种类型的存储存储器,诸如RAM、固态驱动器、硬盘驱动器等。这里描述的存储单元152具有同时活动且服务于多个目的的多个接口。在一些实施例中,存储节点150的一些功能被转移到存储单元152中,从而将存储单元152转换为存储单元152和存储节点150的组合。将(相对于存储数据的)计算置于存储单元152中使这种计算更接近于数据本身。各个系统实施例包括具有不同能力的存储节点层的分层结构。相比之下,在存储阵列中,控制器拥有并知道与控制器在搁架或存储装置中所管理的所有数据有关的一切。在存储集群161中,如这里所述,多个存储单元152和/或存储节点150中的多个控制器以各种方式协作(例如,用于擦除编码、数据分片、元数据通信和冗余、存储容量扩展或收缩以及数据恢复等)。

图2D示出存储服务器环境,该存储服务器环境使用图2A~C的存储节点150和存储单元152的实施例。在该版本中,各存储单元152在机箱138(参见图2A)中的PCIe(外围组件互连Express)板上具有诸如控制器212(参见图2C)、FPGA(现场可编程门阵列)等的处理器、闪存存储器206和NVRAM 204(即超级电容器支持的DRAM 216,参见图2B和2C)。存储单元152可被实现为包含存储的单个板,并且可以是机箱内的最大容许故障域。在一些实施例中,多达两个存储单元152可能故障,并且装置将继续无数据丢失。

在一些实施例中,基于应用用途将物理存储分割为命名区域。NVRAM 204是存储单元152的DRAM 216中的连续的保留存储器区块,并由NAND闪存支持。NVRAM 204在逻辑上被分割为多个存储器区域,其中两个存储器区域被写入为假脱机(例如,spool_region)。NVRAM 204假脱机内的空间由各权限168独立管理。各装置向各权限168提供一定量的存储空间。该权限168进一步管理该空间内的生命周期和分配。假脱机的示例包括分布式事务或概念。当存储单元152的主电源故障时,板载超级电容器提供短持续时间的电源保持。在该保持间隔期间,NVRAM 204的内容被刷新到闪存存储器206。在下一次接通电源时,从闪存存储器206恢复NVRAM 204的内容。

关于存储单元控制器,逻辑“控制器”的责任跨包含权限168的各刀片分布。逻辑控制的这种分布在图2D中示出为主机控制器242、中间层控制器244和存储单元控制器246。控制平面和存储平面的管理是独立处理的,但是部件可以物理地共同位于同一刀片上。各权限168有效地用作独立的控制器。各权限168提供其自己的数据和元数据结构、其自己的后台工作者,并维持其自己的生命周期。

图2E是刀片252硬件框图,其示出在图2D的存储服务器环境中使用图2A~C的存储节点150和存储单元152的实施例的控制平面254、计算和存储平面256、258以及与基础物理资源进行交互的权限168。控制平面254被分区为多个权限168,该多个权限168可以使用计算平面256中的计算资源以在任何刀片252上运行。存储平面258被分区为一组装置,其各自提供对闪存206和NVRAM 204资源的访问。

在图2E的计算和存储平面256、258中,权限168与基础物理资源(即,装置)进行交互。从权限168的角度来看,其资源在所有物理装置上条带化。从装置的角度来看,其向所有权限168提供资源,与权限恰好在何处运行无关。各权限168已被分配了或一直被分配有存储单元152中的存储存储器的一个或多个分区260,例如闪存存储器206和NVRAM 204中的分区260。各权限168使用属于它的这些分配分区260来写入或读取用户数据。权限可以与系统的不同量的物理存储相关联。例如,一个权限168与一个或多个其它权限168相比,可以具有一个或多个存储单元152中的更大数量的分区260或更大大小的分区260。

图2F描绘了根据一些实施例的存储集群的刀片252中的弹性软件层。在弹性结构中,弹性软件是对称的,即,各刀片的计算模块270运行图2F所描绘的三个相同的处理层。存储管理器274对存储在本地存储单元152NVRAM 204和闪存206中的数据和元数据执行来自其它刀片252的读取和写入请求。权限168通过向存储单元152上驻留有相应数据或元数据的刀片252发出必要的读取和写入来完成客户端请求。端点272解析从交换机结构146监控软件接收到的客户端连接请求,将客户端连接请求转发给负责完成的权限168,并将权限168的响应转发给客户端。对称的三层结构使得存储系统具有高度的并发性。在这些实施例中,弹性有效且可靠地向外扩展。另外,弹性实现了一种独特的向外扩展技术,该技术使得无论客户端访问模式如何都能跨所有资源均匀地平衡工作,并通过消除对通常利用传统分布式锁定发生的刀片间协调的大量需求来最大限度地实现并发性。

仍然参考图2F,运行在刀片252的计算模块270中的权限168进行完成客户端请求所需的内部操作。弹性的一个特征是权限168是无状态的,即它们将活动数据和元数据缓存在其自己的刀片252的DRAM中以供快速访问,但权限将每个更新存储在其三个单独刀片252上的NVRAM 204分区中,直到更新被写入闪存206为止。在一些实施例中,对NVRAM 204的所有存储系统写入都是对三个单独刀片252上的分区进行三次。利用三重镜像NVRAM 204以及受奇偶校验和Reed-Solomon RAID校验和保护的持久存储,存储系统可以在不丢失数据、元数据或对两者中任一者的访问的情况下幸存于两个刀片252的并发故障。

由于权限168是无状态的,因此其可以在刀片252之间迁移。各权限168具有唯一的标识符。在一些实施例中,NVRAM 204和闪存206分区与权限168的标识符相关联,而不是与它们运行于的刀片252相关联。因此,当权限168迁移时,该权限168继续从其新位置管理同一存储分区。当新刀片252安装在存储集群的实施例中时,系统通过以下方式来自动重新平衡负载:对新刀片252的存储进行分区以供系统的权限168使用,将所选择的权限168迁移到新刀片252,在新刀片252上启动端点272,并将这些端点272包括在交换机结构146的客户端连接分布算法中。

迁移的权限168从它们的新位置将它们的NVRAM 204分区的内容保持在闪存206上,处理来自其它权限168的读取和写入请求,并完成端点272针对其的客户端请求。类似地,如果刀片252故障或被移除,则系统将其权限168重新分布在系统的剩余刀片252之中。重新分布的权限168继续从其新位置进行其原始功能。

图2G描绘了根据一些实施例的存储集群的刀片252中的权限168和存储资源。各权限168专门负责各刀片252上的闪存206和NVRAM 204的分区。权限168独立于其它权限168管理其分区的内容和完整性。权限168对传入数据进行压缩,并将其暂时保存在其NVRAM 204分区中,然后合并、RAID保护,并将数据保持在其闪存206分区中的存储段中。随着权限168将数据写入闪存206,存储管理器274进行必要的闪存转换,以优化写入性能并最大限度地延长介质寿命。在后台,权限168进行“垃圾收集”或通过重写数据来回收被客户端淘汰的数据所占据的空间。应当理解,由于权限168的分区是不相连的,因此无需分布式锁定来执行客户端和写入或进行后台功能。

这里描述的实施例可以利用各种软件、通信和/或网络协议。另外,可以调整硬件和/或软件的配置,以适应各种协议。例如,本实施例可以利用活动目录(ActiveDirectory),该活动目录是用于在WINDOWSTM环境中提供认证、目录、策略和其它服务的基于数据库的系统。在这些实施例中,LDAP(轻量级目录访问协议)是用于查询和修改诸如活动目录等的目录服务提供商中的项的一个示例应用协议。在一些实施例中,网络锁管理器(NLM)被用作与网络文件系统(NFS)协作工作以提供系统V风格的咨询文件和通过网络的记录锁定的设施。服务器消息区块(SMB)协议(其一种版本也被称为通用因特网文件系统(CIFS))可以与这里讨论的存储系统集成。SMP作为通常用于提供对文件、打印机和串行端口的共享访问以及网络上的节点之间的各种通信的应用层网络协议进行操作。SMB还提供了经认证的处理间通信机制。AMAZONTM S3(简单存储服务)是由Amazon Web服务(AmazonWeb Service)提供的web服务,并且这里描述的系统可以通过web服务接口(REST(表述性状态转移)、SOAP(简单对象访问协议)和BitTorrent)与Amazon S3进行接合。RESTful API(应用编程接口)分解事务以创建一系列小模块。各模块处理事务的特定基础部分。这些实施例所提供的控制或许可(尤其是针对对象数据)可以包括访问控制列表(ACL)的使用。ACL是附加到对象的许可的列表,并且ACL指定哪些用户或系统处理被授予对对象的访问以及针对给定对象允许哪些操作。系统可以利用因特网协议第6版(IPv6)以及IPv4作为用于为网络上的计算机提供识别和定位系统并跨因特网路由业务的通信协议。网络化系统之间的分组路由可以包括等价多路径路由(ECMP),该ECMP是一种路由策略,其中向单个目的地转发的下一跳分组可以发生在路由度量计算中并列第一的多个“最佳路径”上。多路径路由可以与大多数路由协议结合使用,因为它是限于单个路由器的每跳决策。软件可以支持多租户,该多租户是软件应用的单个实例服务多个客户的架构。各客户可被称为租户。在一些实施例中,租户可被赋予用以定制应用的一些部分的能力,但不能定制应用的代码。这些实施例可以维护审计日志。审计日志是记录计算系统中的事件的文档。除了记载访问哪些资源之外,审计日志条目通常还包括目的地地址和源地址、时间戳以及符合各种规定的用户登录信息。这些实施例可以支持各种密钥管理策略,诸如加密密钥轮换等。另外,系统可以支持动态根密码或一些动态变化的密码。

图3A阐述了根据本发明的一些实施例的被耦合以与云服务提供商302进行数据通信的存储系统306的图。尽管描绘得不太详细,但图3A所描绘的存储系统306可以与以上参考图1A~1D和图2A~2G所述的存储系统类似。在一些实施例中,图3A所描绘的存储系统306可被体现为包括不平衡的有源/主动控制器的存储系统、包括平衡的有源/主动控制器的存储系统、包括利用各控制器的少于所有的资源以使得各控制器具有可用于支持故障转移的储备资源的有源/主动控制器的存储系统、包括完全有源/主动控制器的存储系统、包括数据集隔离的控制器的存储系统、包括具有前端控制器和后端集成存储控制器的双层架构的存储系统、包括双控制器阵列的向外扩展集群的存储系统、以及这些实施例的组合。

在图3A所描绘的示例中,存储系统306经由数据通信链路304耦合到云服务提供商302。数据通信链路304可被体现为专用数据通信链路、通过使用诸如广域网(WAN)或局域网(LAN)等的一个或多个数据通信网络而提供的数据通信路径、或者能够在存储系统306和云服务提供商302之间传输数字信息的某个其它机构。这种数据通信链路304可以是完全有线的、完全无线的、或者有线和无线数据通信路径的某种聚合。在这样的示例中,可以使用一个或多个数据通信协议经由数据通信链路304在存储系统306和云服务提供商302之间交换数字信息。例如,可以使用手持装置传送协议(HDTP)、超文本传送协议(HTTP)、因特网协议(IP)、实时传送协议(RTP)、传输控制协议(TCP)、用户数据报协议(UDP)、无线应用协议(WAP)或其它协议经由数据通信链路304在存储系统306和云服务提供商302之间交换数字信息。

图3A所描绘的云服务提供商302可例如被体现为经由数据通信链路304通过共享计算资源而向云服务提供商302的用户提供服务的系统和计算环境。云服务提供商302可以按需提供对诸如计算机网络、服务器、存储器、应用和服务等的可配置计算资源的共享池的访问。可配置资源的共享池可以在最少的管理努力下快速地提供并释放给云服务提供商302的用户。一般地,云服务提供商302的用户不知道云服务提供商302为了提供服务而利用的确切计算资源。尽管在许多情况下,这种云服务提供商302可以经由因特网访问,但本领域读者将认识到,提取共享资源的使用以通过任何数据通信链路向用户提供服务的任何系统可被视为云服务提供商302。

在图3A所描绘的示例中,云服务提供商302可被配置为通过实现各种服务模型来向存储系统306和存储系统306的用户提供各种服务。例如,云服务提供商302可被配置为通过实现基础设施即服务(IaaS)服务模型来向存储系统306和存储系统306的用户提供服务,其中云服务提供商302向订户提供诸如虚拟机和其它资源等的计算基础设施作为服务。另外,云服务提供商302可被配置为通过实现平台即服务(PaaS)服务模型来向存储系统306和存储系统306的用户提供服务,其中云服务提供商302向应用开发者提供开发环境。这种开发环境可以例如包括操作系统、编程语言执行环境、数据库、web服务器或可被应用开发者利用以在云平台上开发和运行软件解决方案的其它组件。此外,云服务提供商302可被配置为通过实现软件即服务(SaaS)服务模型来向存储系统306和存储系统306的用户提供服务,其中云服务提供商302向存储系统306和存储系统306的用户提供应用软件、数据库以及用于运行应用的平台,从而为存储系统306和存储系统306的用户提供按需软件并消除在本地计算机上安装和运行应用的需要,这可以简化应用的维护和支持。云服务提供商302还可被配置为通过实现认证即服务(AaaS)服务模型来向存储系统306和存储系统306的用户提供服务,其中云服务提供商302提供可用于保护对应用、数据源或其它资源的访问的认证服务。云服务提供商302还可被配置为通过实现存储作为服务模型来向存储系统306和存储系统306的用户提供服务,其中云服务提供商302提供对其存储基础设施的访问以供存储系统306和存储系统306的用户使用。读者将理解,云服务提供商302可被配置为通过实现附加的服务模型来向存储系统306和存储系统306的用户提供附加服务,因为上述的服务模型仅仅是为了说明性目的而被包括的,并且绝不表示云服务提供商302可提供的服务的限制,也不表示关于云服务提供商302可能实施的服务模型的限制。

在图3A所描绘的示例中,云服务提供商302可例如被体现为私有云、公共云或私有云和公共云的组合。在云服务提供商302被体现为私有云的实施例中,云服务提供商302可以专用于向单个组织提供服务,而不是向多个组织提供服务。在云服务提供商302被体现为公共云的实施例中,云服务提供商302可以向多个组织提供服务。公共云和私有云部署模型可能有所不同,并可能伴随着各种优点和缺点。例如,由于公共云部署涉及跨不同组织共享计算基础设施,因此这种部署对于具有安全问题、任务关键型工作负载和正常运行时间需求等的组织可能不是理想的。虽然私有云部署可以解决这些问题中的一些,但是私有云部署可能需要内部工作人员管理私有云。在另外的可选实施例中,云服务提供商302可被体现为以混合云部署的私有云服务和公共云服务的混合。

尽管在图3A中没有明确描绘,但读者将理解,可能需要附加的硬件组件和附加的软件组件来促进向存储系统306和存储系统306的用户递送云服务。例如,存储系统306可以耦合到(或甚至包括)云存储网关。这种云存储网关可例如被体现为与存储系统306一起位于本地的基于硬件或基于软件的应用。这种云存储网关可以作为在存储阵列306上执行的本地应用与存储阵列306所利用的远程的、基于云的存储之间的桥进行操作。通过使用云存储网关,组织可以将主要的iSCSI或NAS移动到云服务提供商302,从而使组织能够节省其内部存储系统的空间。这种云存储网关可被配置为模拟磁盘阵列、基于区块的装置、文件服务器、或者可将SCSI命令、文件服务器命令或其它适当的命令转换为促进与云服务提供商302的通信的REST空间协议的其它存储系统。

为了使存储系统306和存储系统306的用户能够利用云服务提供商302所提供的服务,可以进行云迁移处理,在该处理期间,将来自组织的本地系统(或甚至来自另一云环境)的数据、应用或其它元素移动至云服务提供商302。为了成功地将数据、应用或其它元素迁移到云服务提供商302的环境,可以利用诸如云迁移工具等的中间件来桥接云服务提供商302的环境与组织环境之间的间隙。这种云迁移工具还可被配置为解决与将大量数据迁移到云服务提供商302相关联的潜在的高网络成本和长传送时间,以及解决与通过数据通信网络将敏感数据迁移到云服务提供商302相关联的安全问题。为了进一步使存储系统306和存储系统306的用户能够利用云服务提供商302所提供的服务,还可以使用云编排器(orchestrator)来布置和协调自动化任务,以寻求创建合并处理或工作流。这种云编排器可以进行诸如配置各种组件(无论这些组件是云组件还是内部组件)以及管理这些组件之间的互连等的任务。云编排器可以简化组件间通信和连接,以确保正确地配置和维护链路。

在图3A所描绘的示例中并且如上文简要描述的,云服务提供商302可被配置为通过使用SaaS服务模型来向存储系统306和存储系统306的用户提供服务,其中在SaaS服务模型中云服务提供商302向存储系统306和存储系统306的用户提供应用软件、数据库以及用于运行应用的平台,从而为存储系统306和存储系统306的用户提供按需软件并消除在本地计算机上安装和运行应用的需要,这可以简化应用的维护和支持。根据本发明的各种实施例,这些应用可以采取多种形式。例如,云服务提供商302可被配置为向存储系统306和存储系统306的用户提供对数据分析应用的访问。这种数据分析应用可例如被配置为接收由存储系统306回拨的遥测数据。这种遥测数据可以描述存储系统306的各种操作特性,并且可被分析以例如确定存储系统306的健康状态、识别在存储系统306上执行的工作负载、预测存储系统306何时将耗尽各种资源、建议配置改变、硬件或软件升级、工作流迁移或可能改进存储系统306运行的其它动作。

云服务提供商302还可被配置为向存储系统306和存储系统306的用户提供对虚拟化计算环境的访问。这种虚拟化计算环境可例如被体现为虚拟机或其它虚拟化计算机硬件平台、虚拟存储装置和虚拟化计算机网络资源等。这种虚拟化环境的示例可以包括为了模拟实际计算机而创建的虚拟机、将逻辑桌面与物理机分开的虚拟化桌面环境、允许统一访问不同类型的具体文件系统的虚拟化文件系统以及许多其它环境。

为了进一步说明,图3B阐述了根据本发明的一些实施例的存储系统306的图。尽管描绘得不太详细,但图3B所描绘的存储系统306可以与以上参考图1A~1D和图2A~2G所述的存储系统类似,因为该存储系统可以包括上述的许多组件。

图3B所描绘的存储系统306可以包括存储资源308,该存储资源308可以以多种形式体现。例如,在一些实施例中,存储资源308可以包括纳米RAM或利用沉积在基板上的碳纳米管的其它形式的非易失性随机存取存储器。在一些实施例中,存储资源308与可堆叠交叉网格数据访问阵列相结合的可以包括3D交叉点非易失性存储器,其中位存储是基于体电阻的变化。在一些实施例中,存储资源308可以包括闪存存储器,其包括单级单元(SLC)NAND闪存、多级单元(MLC)NAND闪存、三级单元(TLC)NAND闪存和四级单元(QLC)NAND闪存等。在一些实施例中,存储资源308可以包括通过使用磁存储元件存储数据的非易失性磁阻式随机存取存储器(MRAM),其包括自旋转移扭矩(STT)MRAM。在一些实施例中,示例存储资源308可以包括非易失性相变存储器(PCM),其可以具有在单个单元中容纳多个位的能力,因为单元可以实现多个不同的中间状态。在一些实施例中,存储资源308可以包括允许存储和检索光子量子信息的量子存储器。在一些实施例中,示例存储资源308可以包括电阻式随机存取存储器(ReRAM),其中通过改变跨介电固态材料的电阻来存储数据。在一些实施例中,存储资源308可以包括存储类存储器(SCM),其中,固态非易失性存储器可以使用亚微影图案成形(sub-lithographic patterning)技术、每单元多个位和多个装置层等的某种组合以高密度制造。读者将理解,上述的存储系统可以利用其它形式的计算机存储器和存储装置,包括DRAM、SRAM、EEPROM、通用存储器和许多其它存储器。图3B所描绘的存储资源308可以以各种形状因子体现,包括但不限于双列直插式存储器模块(DIMM)、非易失性双列直插式存储器模块(NVDIMM)、M.2和U.2等。

图3B所描绘的示例存储系统306可以实现各种存储架构。例如,根据本发明的一些实施例的存储系统可以利用区块存储,其中数据存储在区块中,并且各区块基本上用作单独的硬盘驱动器。根据本发明的一些实施例的存储系统可以利用对象存储,其中数据作为对象被管理。各对象可以包括数据本身、可变量的元数据以及全局唯一标识符,其中对象存储可以在多个级(例如,装置级、系统级、接口级)处实现。根据本发明的一些实施例的存储系统利用文件存储,其中数据存储在分层结构中。这类数据可以保存在文件和文件夹中,并以相同格式呈现给存储该数据的系统和检索该数据的系统这两者。

图3B所描绘的示例存储系统306可被体现为存储系统,其中可以通过使用向上扩展模型来添加附加的存储资源,可以通过使用向外扩展模型来添加附加的存储资源,或者通过它们的某种组合来添加附加的存储资源。在向上扩展模型中,可以通过添加附加存储装置来添加附加存储。然而,在向外扩展模型中,可以将附加存储节点添加到存储节点的集群,其中这类存储节点可以包括附加处理资源和附加网络资源等。

图3B所描绘的存储系统306还包括通信资源310,该通信资源310可能有助于促进存储系统306内的组件之间的数据通信以及存储系统306与存储系统306之外的计算装置之间的数据通信。通信资源310可被配置为利用各种不同的协议和数据通信结构,以促进存储系统内的组件之间的数据通信以及存储系统与存储系统之外的计算装置之间的数据通信。例如,通信资源310可以包括诸如FC结构和FC协议等的光纤通道(FC)技术,这些技术可以跨FC网络传输SCSI命令。通信资源310还可以包括跨以太网的FC(FCoE)技术,通过这些技术,封装并跨以太网传输FC帧。通信资源310还可以包括无限带宽(IB)技术,其中利用交换机结构拓扑来促进信道适配器之间的传输。通信资源310还可以包括NVM Express(NVMe)技术和跨结构的NVMe(NVMeoF)技术,通过这些技术,可以访问经由PCI Express(PCIe)总线附加的非易失性存储介质。通信资源310还可以包括:用于利用串行附加SCSI(SAS)来访问存储系统306内的存储资源308的机制、用于将存储系统306内的存储资源308连接至存储系统306内的主机总线适配器的串行ATA(SATA)总线接口、用以提供对存储系统306内的存储资源308的区块级访问的因特网小型计算机系统接口(iSCSI)技术、以及可以有助于促进存储系统306内的组件之间的数据通信以及存储系统306与存储系统306之外的计算装置之间的数据通信的其它通信资源。

图3B所描绘的存储系统306还包括处理资源312,该处理资源312可以有助于执行计算机程序指令以及进行存储系统306内的其它计算任务。处理资源312可以包括为了某一特定目的而定制的一个或多个专用集成电路(ASIC)以及一个或多个中央处理单元(CPU)。处理资源312还可以包括一个或多个数字信号处理器(DSP)、一个或多个现场可编程门阵列(FPGA)、一个或多个片上系统(SoC)或其它形式的处理资源312。存储系统306可以利用存储资源312来进行各种任务,包括但不限于支持以下将更详细描述的软件资源314的执行。

图3B所描绘的存储系统306还包括软件资源314,该软件资源314在由存储系统306内的处理资源312执行时可以进行各种任务。软件资源314可以例如包括一个或多个计算机程序指令模块,该一个或多个计算机程序指令模块在由存储系统306内的处理资源312执行时有助于执行各种数据保护技术以保持存储系统内所存储的数据的完整性。读者将理解,这种数据保护技术可以例如通过在存储系统内的计算机硬件上执行的系统软件、通过云服务提供商或以其它方式执行。这种数据保护技术可以例如包括使不再主动使用的数据移动到单独的存储装置或单独的存储系统以供长期保留的数据存档技术、存储系统中所存储的数据可被拷贝和存储在不同的位置以避免在存储系统的设备故障或某种其它形式的灾难的情况下发生数据丢失的数据备份技术、存储系统中所存储的数据被复制到另一存储系统以使得可以经由多个存储系统访问数据的数据复制技术、在不同时间点捕获存储系统内的数据的状态的数据快照技术、可创建数据和数据库的重复副本的数据和数据库克隆技术、以及其它数据保护技术。通过使用这种数据保护技术,可以满足业务连续性和灾难恢复目标,因为存储系统的故障可能不会导致存储系统中所存储的数据的丢失。

软件资源314还可以包括有助于实现软件定义存储(SDS)的软件。在这样的示例中,软件资源314可以包括一个或多个计算机程序指令模块,该一个或多个计算机程序指令模块在被执行时有助于基于策略地提供和管理独立于基础硬件的数据存储。这样的软件资源314可以有助于实现存储虚拟化,以将存储硬件与管理存储硬件的软件分开。

软件资源314还可以包括有助于促进和优化I/O操作的软件,其中I/O操作针对存储系统306中的存储资源308。例如,软件资源314可以包括进行诸如数据压缩和数据去重复等的各种数据减少技术的软件模块。软件资源314可以包括智能地将I/O操作分组在一起以促进更好地使用基础存储资源308的软件模块、进行数据迁移操作以从存储系统内进行迁移的软件模块、以及进行其它功能的软件模块。这种软件资源314可被体现为一个或多个软件容器或以许多其它方式体现。

读者将理解,图3B所描绘的各种组件可被分组为一个或多个优化的计算封装,作为融合基础设施。这种融合基础设施可以包括计算机、存储和网络资源的池,这些池可以由多个应用共享并使用策略驱动的处理以集体方式进行管理。这种融合基础设施可以最大限度地减少存储系统306内的各组件之间的兼容性问题,同时还减少与建立和操作存储系统306相关联的各种成本。这种融合基础设施可以利用融合基础设施参考架构、利用单独的设备、利用软件驱动的超融合方法(例如,超融合基础设施)或以其它方式实现。

读者将理解,图3B所描绘的存储系统306可以有助于支持各种类型的软件应用。例如,存储系统306可以通过向如下的应用提供存储资源而有助于支持这些应用:人工智能(AI)应用、数据库应用、DevOps项目、电子设计自动化工具、事件驱动的软件应用、高性能计算应用、模拟应用、高速数据捕获和分析应用、机器学习应用、介质生产应用、介质服务应用、图片存档和通信系统(PACS)应用、软件开发应用、虚拟现实应用、增强现实应用和许多其它类型的应用。

上述的存储系统可以操作以支持各种应用。鉴于存储系统包括计算资源、存储资源和各种其它资源,存储系统可能非常适合支持资源密集型的应用,诸如AI应用等。这样的AI应用可以使装置能够感知其环境并采取使在某个目标上取得成功的可能性最大化的动作。这些AI应用的示例可以包括IBM Watson、Microsoft Oxford、Google DeepMind和BaiduMinwa等。上述的存储系统也可以很适合于支持资源密集型的其它类型的应用,诸如机器学习应用等。机器学习应用可以进行各种类型的数据分析,以使分析模型构建自动化。使用迭代地从数据中进行学习的算法,机器学习应用可以使计算机能够在没有显式编程的情况下实现学习。

除已经描述的资源外,上述的存储系统还可以包括图形处理单元(GPU),有时也称为视觉处理单元(VPU)。这种GPU可被体现为专门的电子电路,该电子电路快速地操纵和改变存储器以加速创建旨在输出到显式装置的帧缓冲器中的图像。这种GPU可被包括在作为上述的存储系统的一部分(包括作为存储系统的许多可单独扩展的组件其中之一)的任何计算装置中,其中这种存储系统的可单独扩展的组件的其它示例可以包括存储组件、存储器组件、计算组件(例如,CPU、FPGA、ASIC)、网络组件和软件组件等。除了GPU之外,上述的存储系统还可以包括用于神经网络处理的各个方面的神经网络处理器(NNP)。这种NNP可以作为GPU的替代(或附加)而使用,并且还可独立地可扩展。

如上所述,这里描述的存储系统可被配置为支持人工智能应用、机器学习应用、大数据分析应用以及许多其它类型的应用。这类应用的快速增长是由三种技术驱动的:深度学习(DL)、GPU处理器和大数据。深度学习是利用人类大脑激励的大规模并行神经网络的计算模型。代替专家手工制作的软件,深度学习模型通过从大量的示例中进行学习来编写其自己的软件。GPU是具有数千个核的现代处理器,其非常适合运行松散地表示人类大脑的并行性质的算法。

深度神经网络的发展引发了一波新的算法和工具,让数据科学家利用人工智能(AI)来挖掘其数据。利用改进的算法、更大的数据集和各种框架(包括用于跨一系列任务的机器学习的开源软件库),数据科学家正在处理例如自主驾驶车辆和自然语言处理等的新用例。然而,训练深度神经网络需要高质量输入数据和大量计算这两者。GPU是能够同时对大量数据进行操作的大规模并行处理器。当组合成多GPU集群时,可能需要高吞吐量流水线来将输入数据从存储馈送到计算引擎。深度学习不仅仅是构建和训练模型。还存在为了数据科学团队成功所需的规模、迭代和实验而必须设计的整个数据流水线。

数据是现代AI和深度学习算法的核心。在可以开始训练之前,必须解决的一个问题围绕收集对于训练准确的AI模型而言至关重要的标记数据。可能需要全规模AI部署来连续地收集、清理、转换、标记和存储大量数据。添加附加的高质量数据点直接转化为更准确的模型和更好的洞察力。数据样本可以经历一系列处理步骤,包括但不限于:1)将来自外部源的数据摄取到训练系统中并以原始形式存储该数据;2)清理数据并以便于训练的格式转换数据,包括将数据样本链接到适当的标签;3)探索参数和模型,用较小的数据集进行快速测试,并且进行迭代以收敛于最有希望进入生产集群的模型;4)执行训练阶段以选择随机批次的输入数据(包括新样本和老样本这两者),并将这些输入数据馈送到生产GPU服务器进行计算,以更新模型参数;以及5)评价,包括使用训练中未使用的数据的保留部分以评价针对保留数据的模型准确度。该生命周期可以适用于任何类型的并行化机器学习,而不仅仅是神经网络或深度学习。例如,标准机器学习框架可以依赖于CPU而不是GPU,但数据摄取和训练工作流可能相同。读者将理解,单个共享存储数据中心在整个生命周期中创建了协调点,而无需摄取、预处理和训练级之间的额外数据副本。所摄取的数据很少仅用于一个目的,并且共享存储赋予了训练多个不同模型或对数据应用传统分析的灵活性。

读者将理解,AI数据流水线中的各级可以具有来自数据中心(例如,存储系统或存储系统的集合)的不同要求。向外扩展存储系统必须为所有方式的访问类型和模式(从小的元数据量级到大的文件、从随机访问模式到顺序访问模式、以及从低并发性到高并发性)提供不妥协的性能。上述的存储系统可以用作理想的AI数据中心,因为这些系统可以服务于非结构化工作负载。在第一级中,理想情况下,数据被摄取并存储到后续级将使用的同一数据中心,以避免过度的数据拷贝。接着的两个步骤可以在可选地包括GPU的标准计算服务器上完成,然后在第四级和最后级中,在强大的GPU加速服务器上运行完整的训练生产作业。通常,在对同一数据集进行操作的实验流水线旁边存在生产流水线。此外,GPU加速服务器可以独立地用于不同的模型,或者结合在一起以训练一个更大的模型,甚至跨越多个系统以进行分布式训练。如果共享存储层较慢,则必须将数据拷贝到各阶段的本地存储,从而导致浪费时间将数据分级到不同的服务器中。AI训练流水线的理想数据中心提供了与服务器节点上本地存储的数据类似的性能,同时还具有简单性以及用以使得所有流水线级并发操作的性能。

数据科学家致力于通过如下的各种方法来提高训练模型的实用性:更多的数据、更好的数据、更聪明的训练和更深度的模型。在许多情况下,数据科学家团队将共享相同的数据集,并且并行工作以产生新的和改进的训练模型。通常,数据科学家团队在这些阶段内将并发地致力于同一共享数据集。数据处理、实验和全规模训练的多个并发工作负载对存储层上的多个访问模式的需求进行分层。换句话说,存储不能仅仅满足大文件读取,而必须应对大小文件读取和写入的混合。最后,随着多个数据科学家探索数据集和模型,将数据以其本机格式进行存储以针对各用户提供以唯一方式转换、清理和使用数据的灵活性可能是至关重要的。上述的存储系统可以为数据集提供自然共享存储主页,其具有数据保护冗余(例如,通过使用RAID6)以及作为多个开发者和多个实验的共同访问点所必需的性能。使用上述的存储系统可以避免小心地拷贝数据的子集以用于本地工作的需要,从而节省工程和GPU加速服务器使用时间这两者。随着原始数据集和期望变换不断更新和改变,这些副本的负担不断增长。

读者将理解,深度学习的成功激增的根本原因是具有较大的数据集大小的模型的持续改进。相比之下,例如Logistic回归等的经典机器学习算法将准确度的提高停止在较小的数据集大小。正因如此,计算资源和存储资源的分离也可以允许各层的单独扩展,从而避免一起管理这两者所固有的许多复杂性。随着数据集大小增长或考虑到新数据集,向外扩展存储系统必须能够容易地扩展。类似地,如果需要更多的并发训练,可以增加附加的GPU或其它计算资源,而不必担心它们的内部存储。此外,由于存储系统所提供的随机读取带宽、存储系统随机高速率读取小文件(50KB)的能力(意味着不需要额外的努力来聚合单个数据点以生成更大、存储友好的文件)、存储系统随着数据集的增长或吞吐量要求的增长而扩展容量和性能的能力、存储系统支持文件或对象的能力、存储系统针对大文件或小文件调整性能的能力(即,无需用户提供文件系统)、存储系统即使在生产模型训练期间也支持硬件和软件的非中断升级的能力以及许多其它原因,因此上述的存储系统可以更容易地构建、操作和增长AI系统。

存储层的小文件性能可能是至关重要的,因为许多类型的输入(包括文本、音频或图像)将本机地存储为小文件。如果存储层不能很好地处理小文件,则需要额外的步骤来预处理样本并将其分组到更大的文件中。在旋转磁盘上构建的依赖于作为缓存层的SSD的存储可能不能满足所需的性能。由于利用随机输入批次的训练产生更准确的模型,因此整个数据集必须能够以完整的性能访问。SSD缓存器仅为数据的小子集提供高性能,并且在隐藏旋转驱动器的延时方面将无效。

读者将理解,上述的存储系统可被配置为支持(除某些类型的数据之外的)区块链(blockchain)的存储。这种区块链可被体现为记录(称为区块)的不断增长的列表,这些记录被链接并使用加密进行保护。区块链中的各区块可以包含作为到前一区块的链接的哈希指针、时间戳和事务数据等。区块链可被设计为抵抗数据的修改,并且可以用作开放的分布式分类账,该分类账可以高效地且以可验证和永久的方式记录两方之间的事务。这使得区块链可能适合记录事件、医疗记录和其它记录管理活动(诸如身份管理和事务处理等)。

读者将进一步理解,在一些实施例中,上述的存储系统可以与其它资源配对以支持上述应用。例如,一个基础设施可以包括采用服务器和工作站形式的初级计算,该服务器和工作站专门用于图形处理单元(GPGPU)上的通用计算,以加速互连到计算引擎中的深度学习应用,从而训练深度神经网络的参数。各系统可以具有以太网外部连接、无限带宽外部连接、某种其它形式的外部连接或其某种组合。在这样的示例中,GPU可以针对单个大型训练进行分组,或者独立地使用以训练多个模型。基础设施还可以包括存储系统(诸如上述的存储系统),以例如提供可以经由诸如NFS和S3等的高性能协议来访问数据的向外扩展全闪存文件或对象存储。基础设施还可以例如包括冗余的架顶式以太网交换机,其经由MLAG端口通道中的端口而连接到存储和计算以实现冗余。基础设施还可以包括采用白盒服务器的形式(可选地利用GPU)的附加计算,以进行数据摄取、预处理和模型调试。读者将理解,还有可能有更多的基础设施。

读者将理解,上述的系统相对于可能例如包括服务器节点中所部署的分布式直接附加存储(DDAS)解决方案的其它系统,可能更适合于上述的应用。这样的DDAS解决方案可被构建用于处理大的、较少的顺序访问,但是可能较不能处理小的随机访问。读者将进一步理解,上述的存储系统可用于为上述的应用提供平台,该平台比利用基于云的资源更优选,因为存储系统可以包括在更安全、更多地进行本地和内部管理、在特征集和性能方面更稳健的现场或内部基础设施中,或者该平台比利用基于云的资源作为平台的一部分以支持上述应用更优选。例如,在诸如IBM的Watson等的平台上构建的服务可能要求企业向其它机构分发诸如金融事务信息或可识别患者记录等的个人用户信息。正因如此,出于各种技术原因和各种业务原因,基于云提供AI即服务与诸如上述的存储系统等的存储系统所支持的内部管理和提供的AI即服务相比可能较不期望。

读者将理解,上述的存储系统可以单独地或与其它计算机械相协调地被配置为支持其它AI相关工具。例如,存储系统可以利用使得更容易传送以不同AI框架写入的模型的例如ONXX或其它开放式神经网络交换格式等的工具。同样,存储系统也可被配置为支持允许开发者对深度学习模型进行原型开发、构建和训练的例如Amazon的Gluon等的工具。

读者将进一步理解,上述的存储系统也可被部署为边缘解决方案。这种边缘解决方案可以通过在靠近数据源的网络边缘进行数据处理来适当地优化云计算系统。边缘计算可以将应用、数据和计算能力(即,服务)从集中点推离至网络的逻辑末端。通过使用诸如上述的存储系统等的边缘解决方案,可以使用这种存储系统所提供的计算资源来进行计算任务,可以使用存储系统的存储资源来存储数据,并且可以通过使用存储系统的各种资源(包括网络资源)来访问基于云的服务。通过对边缘解决方案进行计算任务、存储与边缘解决方案有关的数据以及通常利用边缘解决方案,可以避免消耗昂贵的基于云的资源,并且事实上,相对于对基于云的资源的较大依赖性,性能可以得到改善。

虽然许多任务可能受益于边缘解决方案的利用,但一些特定用途可能特别适合部署在这样的环境中。例如,例如无人机、自主汽车和机器人等的装置可能需要极快的处理,事实上,如此快的处理使得将数据向上发送到云环境并返回来接收数据处理支持可能简直是太慢了。同样,通过使用广泛的数据生成传感器生成大量信息的例如机车和燃气轮机等的机器可以受益于边缘解决方案的快速数据处理能力。作为附加示例,一些IoT装置(诸如连接的摄像机等)可能不适合利用基于云的资源,因为仅由于所涉及的纯数据量,将数据发送到云可能不切实际(不仅是从隐私角度、安全角度或财务角度来看)。正因如此,真正与数据处理、存储或通信有关的许多任务可能更适合于包括边缘解决方案(诸如上述的存储系统等)的平台。

考虑仓库、分布中心或类似位置中的库存管理的具体示例。大型库存、仓储、装运、订单履行、制造或其它操作具有库存货架上的大量库存以及产生大数据的流水(firehose)的高分辨率数字照相机。所有这些数据可被输入到图像处理系统中,该图像处理系统可以将数据量减少到小数据的流水。所有的小数据可以存储在内部存储中。在设施边缘的内部存储可以耦合至云,例如进行外部报告、实时控制和云存储。可以利用图像处理的结果来进行库存管理,使得库存可以在货架上进行跟踪并且补充、移动、装运、修改新的产品,或删除停产/废弃的产品等。以上场景是上述的可配置处理和存储系统的实施例的主要候选。适合图像处理的仅计算刀片和卸载刀片可能与关于卸载FPGA或卸载定制刀片的深度学习的组合可以从所有数字照相机接收大数据的流水,并产生小数据的流水。然后,所有小数据可以由存储节点存储,存储节点与无论何种类型的存储刀片的组合最佳地处理数据流的存储单元一起操作。这是存储和功能加速以及集成的示例。取决于与云的外部通信需求以及云中的外部处理,并且取决于网络连接和云资源的可靠性,系统可按突发性工作负载和可变传导性可靠性被调整大小以用于存储和计算管理。另外,取决于其它库存管理方面,系统可被配置用于混合边缘/云环境中的调度和资源管理。

上述的存储系统也可以进行优化,以用于大数据分析。大数据分析一般可被描述为检查大型和多种数据集以发现可以帮助组织进行更明智的业务决策的隐藏模式、未知相关性、市场趋势、客户偏好以及其它有用信息的处理。大数据分析应用使数据科学家、预测建模人员、统计员和其它分析专业人员能够分析增长的结构化交易数据量、传统商业智能(BI)和分析程序通常尚未开发的其它形式的附加数据。作为该处理的一部分,半结构化和非结构化数据(诸如因特网点击流数据、web服务器日志、社交媒体内容、来自客户电子邮件和调查答复的文本、移动电话呼叫详细记录、IoT传感器数据和其它数据等)可被转换为结构化形式。大数据分析是高级分析的一种形式,其涉及利用诸如预测模型、统计算法和基于高性能分析系统的假设分析等的元素的复杂应用。

上述的存储系统还可以支持(包括实现为系统接口)响应于人类语言而进行任务的应用。例如,存储系统可以支持执行智能个人助理应用,诸如Amazon的Alexa、AppleSiri、Google Voice、Samsung Bixby、Microsoft Cortana等。虽然上一句中所描述的示例利用语音作为输入,但上述的存储系统也可以支持聊天机器人、交谈机器人、饶舌虫、或被配置为经由听觉或文本方法进行对话的人工对话实体或其它应用。同样,存储系统实际上可以执行这种应用,以使用户(诸如系统管理员等)能够经由语音来与存储系统进行交互。尽管在根据本发明的实施例中,这种应用可以用作各种系统管理操作的接口,但这种应用一般能够进行语音交互、音乐播放、制作待办事项列表、设置警报、流媒体播客、播放有声读物以及提供天气、交通和其它实时信息(诸如新闻等)。

上述的存储系统还可以实现AI平台,以实现自驱动存储的愿景。这种AI平台可被配置为通过收集和分析大量存储系统遥测数据点来提供全球预测智能,以实现轻松的管理、分析和支持。事实上,这种存储系统可以能够预测容量和性能这两者,以及产生与工作负载部署、交互和优化有关的智能建议。这种AI平台可被配置为对照问题指纹图谱库扫描所有传入的存储系统遥测数据以在事件影响客户环境之前实时地预测和解决事件,并捕获用于预测性能负载的数百个性能相关变量。

为了进一步说明,图4阐述了例示根据本发明的一些实施例的支持豆荚的多个存储系统(402、404、406)的框图。尽管描绘得不太详细,但图4所描绘的存储系统(402、404、406)可以与以上参考图1A~1D、图2A~2G、图3A~3B或其任何组合所述的存储系统类似。事实上,图4所描绘的存储系统(402、404、406)可以包括与上述的存储系统相比相同、更少或附加的组件。

在图4所描绘的示例中,存储系统(402、404、406)各自被描绘为具有至少一个计算机处理器(408、410、412)、计算机存储器(414、416、418)和计算机存储(420、422、424)。尽管在一些实施例中,计算机存储器(414、416、418)和计算机存储(420、422、424)可以是相同硬件装置的一部分,但在其它实施例中,计算机存储器(414、416、418)和计算机存储(420、422、424)可以是不同硬件装置的一部分。在该特定示例中,计算机存储器(414、416、418)和计算机存储(420、422、424)之间的区别可能是,计算机存储器(414、416、418)物理上接近计算机处理器(408、410、412)并且可以存储计算机处理器(408、410、412)所执行的计算机程序指令,而计算机存储(420、422、424)被体现为用于存储用户数据和描述用户数据的元数据等的非易失性存储。参考上图1A中的示例,例如,特定存储系统(402、404、406)的计算机处理器(408、410、412)和计算机存储器(414、416、418)可以驻留在控制器(110A~110D)中的一个或多个内,而附加存储装置(171A~171F)可以用作特定存储系统(402、404、406)内的计算机存储(420、422、424)。

在图4所描绘的示例中,根据本发明的一些实施例,所描绘的存储系统(402、404、406)可以附加到一个或多个豆荚(430、432)。图4所描绘的豆荚(430、432)各自可以包括数据集(426、428)。例如,三个存储系统(402、404、406)已附加至的第一豆荚(430)包括第一数据集(426),而两个存储系统(404、406)已附加至的第二豆荚(432)包括第二数据集(428)。在这样的示例中,当特定存储系统附加到豆荚时,豆荚的数据集被拷贝到特定存储系统,然后随着数据集被修改而保持最新。存储系统可以从豆荚中移除,从而导致数据集不再在移除的存储系统上保持最新。在图4所描绘的示例中,对于豆荚而言活动的任何存储系统(它是非故障豆荚的最新的、操作的、非故障的构件)可以接收和处理用于修改或读取豆荚的数据集的请求。

在图4所描绘的示例中,各豆荚(430、432)还可以包括一组被管理对象和管理操作、以及用以修改或读取与特定豆荚(430、432)相关联的数据集(426、428)的一组访问操作。在这样的示例中,管理操作可以通过任何存储系统等效地修改或查询被管理对象。同样,用以读取或修改数据集的访问操作可以通过任何存储系统等效地操作。在这样的示例中,虽然各存储系统将数据集的单独副本存储为被存储并广告以供该存储系统使用的数据集的适当子集,但在后续的管理对象查询豆荚或后续访问操作读取数据集中反映了通过任何存储系统进行和完成的用以修改被管理对象或数据集的操作。

读者将理解,与仅集群同步复制数据集相比,豆荚可以实现更多能力。例如,豆荚可用于实现租户,由此数据集以某种方式安全地彼此分离。豆荚还可用于实现虚拟阵列或虚拟存储系统,其中各豆荚以单独地址被呈现为网络(例如,存储区域网络或因特网协议网络)上的唯一存储实体。在实现虚拟存储系统的多存储系统豆荚的情况下,与豆荚相关联的所有物理存储系统可以以某种方式将其自身呈现为相同存储系统(例如,就好像多个物理存储系统与单个存储系统的多个网络端口没有区别)。

读者将理解,豆荚也可以是表示卷、文件系统、对象/分析存储、快照和其它管理实体的集合的管理单元,其中对任何一个存储系统进行管理改变(例如,名称改变、属性改变、管理豆荚的数据集的某个部分的导出或许可)自动反映到与豆荚相关联的所有活动存储系统。另外,豆荚还可以是数据收集和数据分析单元,其中性能和容量度量以跨豆荚的所有活动存储系统聚合或针对各豆荚分别呼吁数据收集和分析的方式呈现,或者可能针对各豆荚呈现各附加存储系统对传入内容和性能的贡献。

豆荚成员资格的一个模型可被定义为存储系统的列表以及该列表的子集,其中存储系统被认为针对豆荚同步。如果存储系统至少位于对于与豆荚相关联的数据集的最后写入副本具有相同空闲内容的恢复内,则该存储系统可被认为针对豆荚同步。空闲内容是在已完成任何正在进行的修改而无需处理新修改之后的内容。有时这被称为“崩溃可恢复”一致性。豆荚的恢复执行用于调解对豆荚中的同步存储系统应用并发更新的差异的处理。恢复可以在已针对豆荚的各个成员请求、但是没有以信号形式向任何请求者通知为已成功完成的并发修改完成时解决存储系统之间的任何不一致。作为豆荚成员列出、但未被列出为针对豆荚同步的存储系统可被描述为从豆荚“分离”。作为豆荚成员列出、针对豆荚同步、并且当前可用于主动服务于豆荚的数据的存储系统对豆荚来说是“在线的”。

豆荚的各存储系统成员可以具有其自己的成员资格副本,包括其上次知道的哪些存储系统是同步的、以及其上次知道的哪些存储系统包括整个豆荚成员集。为了对于豆荚来说是在线的,存储系统必须认为其自己对于豆荚来说是同步的,并且必须与其认为对于豆荚来说同步的所有其它存储系统进行通信。如果存储系统不能确定其是同步的并且正在与同步的所有其它存储系统进行通信,则存储系统必须停止处理豆荚的新传入请求(或者必须以错误或异常完成请求),直到存储系统可以确定其是同步的并且正在与同步的所有其它存储系统进行通信为止。第一存储系统可以得出第二配对存储系统应分离这一结论,这将允许第一存储系统继续,因为现在该第一存储系统与列表中现有的所有存储系统同步。但是,必须防止第二存储系统可选地得出第一存储系统应分离并且第二存储系统继续操作这一结论。这将导致“分裂脑”的状况,该状况可能导致不可调解的数据集、数据集损坏、或应用损坏等危险。

当存储系统正在正常运行然后注意到丢失通信时、当存储系统当前正从某种先前故障中恢复时、当存储系统正在从暂时的功率损耗或恢复通信中断中重启或重新开始时、当存储系统正在无论由于什么原因将操作从一个存储系统控制器集切换到另一存储系统控制器集时、或者在这些或其它种类的事件的任何组合期间或之后,可能发生需要确定如何在不与配对存储系统通信的情况下继续的情形。事实上,每当与豆荚相关联的存储系统不能与所有已知的非分离成员进行通信时,存储系统可以短暂地等待直到可以建立通信为止、离线并继续等待,或者存储系统可以通过某种方式判断为分离非通信存储系统是安全的,而不存在由于非通信存储系统得出另一观点导致分裂脑的风险,然后继续。如果安全分离可以足够快地进行,则存储系统可以对于豆荚来说保持在线,只需稍稍延迟,并且不会导致可向保持在线的存储系统发出请求的应用的应用中断。

这种情形的一个示例是存储系统可能知道其已过时的情况。这例如可能在第一存储系统被首次添加到已与一个或多个存储系统相关联的豆荚时或者在第一存储系统再连接到另一存储系统并发现该另一存储系统已将第一存储系统标记为已分离时发生。在这种情况下,第一存储系统只需等待,直到它连接到对于豆荚来说同步的某个其它存储系统集为止。

该模型需要在一定程度上考虑如何将存储系统添加到豆荚或同步的豆荚成员列表或者从豆荚或同步的豆荚成员列表移除。由于各存储系统将具有其自己的列表副本,并且由于两个独立的存储系统不能完全同时更新其本地副本,并且由于本地副本在重启时或在各种故障场景中都是可用的,因此必须小心确保瞬时不一致不会引起问题。例如,如果一个存储系统对于豆荚来说是同步的、并且添加了第二存储系统,然后如果第二存储系统被更新以首先将这两个存储系统列出为同步的,然后如果这两个存储系统存在故障并再启动,则第二存储系统可能启动并等待连接到第一存储系统,而第一存储系统可能不知道它应当或可以等待第二存储系统。如果第二存储系统通过分离第一存储系统的处理来对无法与第一存储系统连接进行响应,则其可能成功地完成第一存储系统不知道的处理,从而导致分裂脑。正因如此,可能有必要确保存储系统不会不恰当地不同意存储系统在不通信的情况下是否可以选择进行分离处理。

用以确保存储系统不会不恰当地不同意存储系统在不通信的情况下是否可以选择进行分离处理的一种方式是确保在向豆荚的同步成员列表添加新存储系统时,新存储系统首先存储为其是分离成员(也许它是作为同步成员添加的)。然后,现有的同步存储系统可以本地存储为新存储系统是同步豆荚成员,然后新存储系统本地存储该事实。如果在新存储系统存储其同步状况之前存在重启或网络中断的集合,则原始存储系统可能由于不通信而使新存储系统分离,但新存储系统将等待。从豆荚中移除通信存储系统可能需要这种变化的反向版本:首先,正被移除的存储系统存储为其不再同步,然后存储系统将保持存储为正被移除的存储系统不再同步,然后所有存储系统从其豆荚成员资格列表中删除正被移除的存储系统。根据实现,可能不需要中间的持久化分离状态。成员资格列表的本地副本中是否需要谨慎可能取决于用于相互监视或用于验证其成员资格的模型存储系统用途。如果针对两个使用共识模型,或者如果使用外部系统(或外部分布式或集群系统)来存储和验证豆荚成员资格,则本地存储的成员资格列表中的不一致可能无关紧要。

在通信故障或豆荚中的一个或多个存储系统故障时,或者在存储系统启动(或故障转移到辅控制器)并且无法与豆荚的配对存储系统通信时、并且一个或多个存储系统是时候决定分离一个或多个配对存储系统,必须采用某种算法或机制来决定这样做是安全的,并完成分离。解决分离的一个手段是针对成员资格使用多数(或群体(quorum))模型。在三个存储系统的情况下,只要两个正在通信,它们就可以同意分离没有正在通信的第三存储系统,但是第三存储系统不能通过自身选择分离另外两个存储系统。当存储系统通信不一致时,可能产生混淆。例如,存储系统A可能正与存储系统B而不是C进行通信,而存储系统B可能正与A和C这两者进行通信。因此,A和B可以分离C,或者B和C可以分离A,但可能需要豆荚成员之间的更多通信来解决这个问题。

在添加和移除存储系统时,需要注意群体成员资格模型。例如,如果添加了第四存储系统,则此时存储系统中的“多数”为3。从三个存储系统(针对多数需要两个存储系统)转变为包括第四存储系统(针对多数需要三个存储系统)的豆荚可能需要与先前描述的模型类似的某物,以将存储系统小心地添加到同步列表。例如,第四存储系统可能以附加状态开始,但尚未附加,其中该第四存储系统将不会引起对群体的投票。一旦处于该状态,原始的三个豆荚成员各自可被更新为意识到第四个成员以及对三个存储系统多数分离第四个的新要求。从豆荚中移除存储系统可能同样会在更新其它豆荚成员之前将该存储系统移至本地存储的“分离”状态。对此的变型方案是使用诸如PAXOS或RAFT等的分布式共识机制来实现任何成员资格变化或处理分离请求。

管理成员资格转变的另一手段是使用存储系统本身之外的外部系统来处理豆荚成员资格。为了变成对于豆荚来说是在线的,存储系统必须首先与外部豆荚成员资格系统联系,以验证它对于豆荚来说是同步。然后对于豆荚来说在线的任何存储系统都应保持与豆荚成员资格系统的通信,并在丢失通信的情况下应等待或离线。可以使用诸如OracleRAC、Linux HA、VERITAS集群服务器或IBM的HACMP等的多种集群工具将外部豆荚成员资格管理器实现为高度可用的集群。外部豆荚成员资格管理器也可以使用诸如Etcd或Zookeeper等的分布式配置工具或者诸如Amazon的DynamoDB等的可靠分布式数据库。

在图4所描绘的示例中,根据本发明的一些实施例,所描绘的存储系统(402、404、406)可以接收读取数据集(426、428)的一部分的请求,并在本地处理读取数据集的一部分的请求。读者将理解,尽管由于数据集(426、428)应当跨豆荚中的所有存储系统(402、404、406)保持一致,因此对数据集(426、428)进行修改(例如,写入操作)的请求要求在豆荚中的存储系统(402、404、406)之间进行协调,但是对读取数据集(426、428)的一部分的请求进行响应无需在存储系统(402、404、406)之间进行类似协调。正因如此,接收读取请求的特定存储系统可以通过读取存储在存储系统的存储装置内的数据集(426、428)的一部分来在本地服务于读取请求,而无需与豆荚中的其它存储系统进行同步通信。一个存储系统所接收到的对于被复制集群中的被复制数据集的读取请求预期在绝大多数情况下(至少在被正在集群内运行的存储系统接收到时,其中该集群名义上也正在运行)避免任何通信。这种读取通常只需通过从集群数据集的本地副本中读取来进行处理,而无需与集群中的其它存储系统进一步交互。

读者将理解,存储系统可以采取步骤来确保读取一致性,使得无论哪个存储系统处理读取请求,读取请求都将返回相同的结果。例如,由集群中的任何一组存储系统接收的任何一组更新所产生的集群数据集内容应跨集群保持一致,至少在更新空闲(所有先前修改操作已被指示为完成,并且没有以任何方式接收到和处理新的更新请求)的任何时间。更具体地,跨一组存储系统的集群数据集的实例只能因尚未完成的更新而有所不同。这意味着,例如,在卷块范围内重叠的任何两个写入请求、或者写入请求与重叠快照、比较写入或虚拟块范围副本的任意组合必须在数据集的所有副本上产生一致的结果。两个操作不应产生就像它们在被复制集群中的一个存储系统上以一个顺序发生并在另一存储系统上以不同的顺序发生一样的结果。

此外,可以使读取请求时间顺序一致。例如,如果一个读取请求在被复制集群上接收到并完成,并且该读取请求后跟着由被复制集群接收到的针对重叠地址范围的另一读取请求,并且该一个或这两个读取以任何方式在时间和卷地址范围上与被复制集群所接收到的修改请求重叠(无论读取或修改中的任一个是由被复制集群中的相同存储系统还是不同存储系统接收),则如果第一读取反映了更新的结果,第二读取也应反映该更新的结果,而不是可以返回更新前的数据。如果第一读取未反映更新,则第二读取可以反映更新,或可以不反映更新。这确保在两个读取请求之间,数据段的“时间”不能向后滚动。

在图4所描绘的示例中,所描绘的存储系统(402、404、406)也可以检测到与一个或多个其它存储系统的数据通信的中断,并判断特定存储系统是否应保持在豆荚中。由于各种原因,可能发生与一个或多个其它存储系统的数据通信的中断。例如,与一个或多个其它存储系统的数据通信的中断可能是因为存储系统其中之一发生故障、因为网络互连发生故障、或者由于某一其它原因而发生。同步复制集群的重要方面是确保任何故障处理不会导致不可恢复的不一致或响应中的任何不一致。例如,如果两个存储系统之间的网络发生故障,则存储系统中的至多一个存储系统可以继续处理针对豆荚的新传入I/O请求。并且如果一个存储系统继续处理,则另一存储系统无法处理要完成的任何新请求(包括读取请求)。

在图4所描绘的示例中,所描绘的存储系统(402、404、406)还可以响应于检测到与一个或多个其它存储系统的数据通信的中断来判断特定存储系统是否应保持在豆荚中。如上所述,为了作为豆荚的一部分而“在线”,存储系统必须认为其自己对于豆荚来说是同步的,并且必须与其认为对于豆荚来说同步的所有其它存储系统进行通信。如果存储系统不能确定其是同步的并且正在与同步的所有其它存储系统进行通信,则存储系统可以停止处理新传入的访问数据集(426、428)的请求。正因如此,存储系统可以例如通过判断其是否可以与其认为对于豆荚来说同步的所有其它存储系统进行通信(例如,经由一个或多个测试消息)、通过判断其认为对于豆荚来说同步的所有其它存储系统也认为该存储系统附加至豆荚、通过特定存储系统必须确认为其可以与认为对于豆荚来说同步的所有其它存储系统进行通信并且认为对于豆荚来说同步的所有其它存储系统也认为该存储系统附加至豆荚的两个步骤的组合、或者通过一些其它机制,来判断特定存储系统是否应作为豆荚的一部分而保持在线。

在图4所描绘的示例中,所描绘的存储系统(402、404、406)还可以响应于判断为特定存储系统应保持在豆荚中而使特定存储系统上的数据集可被访问以用于管理和数据集操作。存储系统可以例如通过接受访问存储系统上所存储的数据集(426、428)的版本的请求并处理这些请求、通过接受并处理主机或经授权管理员所发出的与数据集(426、428)相关联的管理操作、通过接受并处理一个其它存储系统所发出的与数据集(426、428)相关联的管理操作、或以某种其它方式,来使特定存储系统上的数据集(426、428)可被访问以用于管理和数据集操作。

然而,在图4所描绘的示例中,所描绘的存储系统(402、404、406)可以响应于判断为特定存储系统不应保持在豆荚中而使特定存储系统上的数据集不可被访问以用于管理和数据集操作。存储系统可以例如通过拒绝访问存储系统所存储的数据集(426、428)的版本的请求、通过拒绝主机或其它经授权管理员所发出的与数据集(426、428)相关联的管理操作、通过拒绝豆荚中的一个其它存储系统所发出的与数据集(426、428)相关联的管理操作、或以某种其它方式,来使特定存储系统上的数据集(426、428)不可被访问以用于管理和数据集操作。

在图4所描绘的示例中,所描绘的存储系统(402、404、406)还可以检测到与一个或多个其它存储系统的数据通信的中断已被修复,并使特定存储系统上的数据集可被访问以用于管理和数据集操作。存储系统可以例如通过从一个或多个其它存储系统接收消息来检测到与一个或多个其它存储系统的数据通信的中断已被修复。响应于检测到与一个或多个其它存储系统的数据通信的中断已被修复,一旦先前分离的存储系统与保持附加至豆荚的存储系统重新同步,存储系统就可以使特定存储系统上的数据集(426、428)可被访问以用于管理和数据集操作。

在图4所描绘的示例中,所描绘的存储系统(402、404、406)也可以从豆荚离线,使得特定存储系统不再允许管理和数据集操作。由于各种原因,所描绘的存储系统(402、404、406)可能从豆荚离线,使得特定存储系统不再允许管理和数据集操作。例如,所描绘的存储系统(402、404、406)也可能由于存储系统本身的某些故障、由于存储系统上正在发生更新或其它维护、由于通信故障或出于许多其它原因而离线。在这样的示例中,所描绘的存储系统(402、404、406)随后可以更新特定存储系统上的数据集以将所有更新包括到数据集,因为特定存储系统曾经相对于豆荚离线并再度在线,使得特定存储系统允许管理和数据集操作,如以下包括的重新同步部分中更详细地描述。

在图4所描绘的示例中,所描绘的存储系统(402、404、406)还可以识别用于异步接收数据集的目标存储系统,其中目标存储系统不是数据集被同步复制的多个存储系统其中之一。这种目标存储系统可以例如表示备份存储系统以及利用同步复制数据集的某种存储系统等。事实上,可以利用同步复制以将数据集的副本分配得更接近某些服务器机架,以获得更好的本地读取性能。一种这样的情况是较小架顶存储系统对称地复制到较大存储系统,该较大存储系统位于数据中心或园区的中央,并且其中这些较大存储系统被更仔细地管理以获得可靠性、或连接到外部网络以用于异步复制或备份服务。

在图4所描绘的示例中,所描绘的存储系统(402、404、406)还可以识别数据集中没有正被任何其它存储系统异步复制到目标存储系统的一部分,并将数据集中的没有正被任何其它存储系统异步复制到目标存储系统的一部分异步地复制到目标存储系统,其中,两个或更多个存储系统共同将整个数据集复制到目标存储系统。以这种方式,与异步复制特定数据集相关联的工作可以在豆荚的成员之间进行拆分,使得豆荚中的各存储系统仅负责异步地将数据集的子集复制到目标存储系统。

在图4所描绘的示例中,所描绘的存储系统(402、404、406)也可以从豆荚分离,使得从豆荚分离的特定存储系统不再包括在数据集同步复制的存储系统集中。例如,如果图4中的存储系统(404)从图4所示的豆荚(430)分离,则豆荚(430)将仅包括存储系统(402,406)作为将同步复制豆荚(430)中所包括的数据集(426)的存储系统。在这样的示例中,从豆荚中分离存储系统还可以包括从自豆荚分离的特定存储系统中移除数据集。继续图4中的存储系统(404)从图4所示的豆荚(430)分离的示例,豆荚(430)中所包括的数据集(426)可以从存储系统(404)中删除或以其它方式移除。

读者将理解,可进一步支持的豆荚模型可以实现多个唯一管理能力。另外,豆荚模型本身引入了可通过实现来解决的一些问题。例如,当(诸如由于互连失败并且豆荚的另一存储系统在中介中胜出而)存储系统对于豆荚来说离线、但以其它方式正在运行时,可能仍然期望或需要访问离线存储系统上的离线豆荚的数据集。一种解决方案可能只是在某个分离模式下启用豆荚并允许访问数据集。然而,该解决方案可能是危险的,并且当存储系统重新获得通信时,该解决方案可能导致豆荚的元数据和数据更加难以调解。此外,可能仍然存在单独的路径以供主机访问离线存储系统以及仍然在线的存储系统。在这种情况下,主机可以向两个存储系统发出I/O,即使它们不再保持同步,这是因为主机看到目标端口报告具有相同标识符的卷并且主机I/O驱动器假设主机看到通往相同卷的其它路径。这可能导致相当严重的数据损坏,因为发布到这两个存储系统的读取和写入不再一致,即使主机假设它们一致。作为这种情况的变形,在集群应用(诸如共享存储集群数据库)中,在一个主机上运行的集群应用可能正在读取或写入一个存储系统,并且在另一主机上运行的同一集群应用可能正在读取或写入“分离”存储系统,但是集群应用的两个实例基于它们各自看到的数据集对于已完成的写入完全一致的假定而彼此间正在进行通信。由于它们不一致,因此违反这种假定,并且应用的数据集(例如,数据库)最终可能很快就会被损坏。

解决这两个问题的一种方式是允许离线豆荚或者说是离线豆荚的快照被拷贝到具有新卷的新豆荚,其中新卷具有足以使得主机I/O驱动器和集群应用不会将拷贝卷混淆为与另一存储系统上的仍然在线的卷相同的新身份。由于各豆荚维持数据集的完整副本(其是崩溃一致的,但可能与另一存储系统上的豆荚数据集的副本略有不同),并且由于各豆荚具有对豆荚内容进行操作所需的所有数据和元数据的独立副本,因此使豆荚中的部分或所有卷或快照的虚拟副本成为新豆荚中的新卷是一个简单的问题。例如,在逻辑区图实现中,所需的全部是在新豆荚中定义新卷,其中新卷引用与豆荚的卷或快照相关联的拷贝豆荚中的逻辑区图,并且该逻辑区图在写入时被标记为副本。与可以如何实现被拷贝到新卷的卷快照相同,新卷应被视为新的卷。卷可能具有相同的管理名,但是在新的豆荚命名空间中。但是,它们应具有不同的基础标识符以及与原始卷不同的逻辑单元标识符。

在一些情况下,可以以如下的方式(例如,通过在IP网络的情况下创建虚拟LAN或在光纤通道网络的情况下创建虚拟SAN)使用虚拟网络隔离技术:可以确保被呈现给一些接口的卷的隔离不能从还可能看到原始卷的主机网络接口或主机SCSI发起者端口访问。在这种情况下,提供与原始卷具有相同SCSI或其它存储标识符的卷副本可以是安全的。这可以例如在应用期望看到特定的一组存储标识符以在重新配置时不会以过度的负荷运行的情况下使用。

这里描述的一些技术也可以在活动故障上下文之外使用,以测试处理故障的就绪性。灾难恢复配置通常需要就绪性测试(有时称为“消防演习”),其中频繁且重复的测试被认为是必要的,以确保灾难恢复计划的大部分或所有方面都是正确的并考虑到应用、数据集的任何最新变化、或设备的变化。就绪性测试应该对当前的生产操作(包括复制)无干扰。在许多情况下,实际操作实际上不能在活动配置上被调用,但是一个很好的接近方式是使用存储操作以拷贝生产数据集,然后可能将其与虚拟网络的使用相耦合,以创建包含被认为是在发生灾难的情况下必须成功建立的重要应用所需的所有数据的隔离环境。使同步复制(或甚至异步复制)的数据集的这种副本在预期进行灾难恢复就绪性测试过程的站点(或站点集合)内可用、然后开始针对该数据集的重要应用以确保其可以启动和运行是一种强大的工具,因为这有助于确保灾难恢复计划中不会遗漏应用数据集的重要部分。如果必要且切实可行,则这可以与虚拟隔离网络相耦合(也许可能与物理机或虚拟机的隔离集合相耦合),以尽可能接近现实世界的灾难恢复接管场景。实际上,将豆荚(或豆荚集)拷贝到另一豆荚作为豆荚数据集的时间点图像立即创建了隔离数据集,该隔离数据集包含所有拷贝的元素,然后可以与原始豆荚基本相同地操作,并允许从原始豆荚单独地分离到单个站点(或几个站点)。此外,这些是快速的操作,并且它们可以被拆除且容易地重复,从而允许测试如所期望的那样频繁地重复。

可以进行一些增强,以进一步接近完美的灾难恢复测试。例如,与隔离网络相结合,SCSI逻辑单元身份或其它类型的身份可被拷贝到目标豆荚中,使得测试服务器、虚拟机和应用看到相同的身份。此外,服务器的管理环境可被配置为响应于来自特定的一组虚拟网络的请求以响应于对原始豆荚名称的请求和操作,因此脚本无需通过对象名称的替代“测试”版本来使用测试变形。在测试期间可以使用将在灾难接管的情况下进行接管的主机端服务器基础设施的情况下,可以使用进一步增强。这包括灾难恢复数据中心完全储备有替代服务器基础设施的情况,其中替代服务器基础设施一般将不会使用,直到灾难指示这样做为止。其还包括基础设施可用于非关键操作(例如,对生产数据运行分析,或仅仅支持应用开发或其它功能,这些功能可能很重要,但在需要时可以停止以获得更关键的功能)的情况。具体地,可以设置主机定义和配置以及将使用它们的服务器基础设施,因为它们将用于实际的灾难恢复接管事件并作为灾难恢复接管测试的一部分进行测试,其中被测试卷从用于提供数据集的快照的虚拟豆荚副本连接到这些主机定义。然后,从所涉及的存储系统的观点来看,用于测试的这些主机定义和配置以及在测试期间使用的卷到主机连接配置可以在触发实际灾难接管事件时重新使用,从而大大减少了测试配置与在灾难恢复接管的情况下将使用的实际配置之间的配置差异。

在一些情况下,将卷从第一豆荚移出并移入仅包括这些卷的新的第二豆荚可以是有意义的。然后可以单独地调整豆荚成员资格以及高可用性和恢复特性,然后可以将两个所得豆荚数据集的管理相互隔离。可以在一个方向上进行的操作也应该可以在另一个方向上进行。在某种程度上,取两个豆荚并将其合并为一个是有意义的,使得原始的两个豆荚各自中的卷将跟踪彼此的存储系统成员资格以及高可用性和恢复特性和事件。这两种操作可以安全地完成,并且通过依赖于被建议用于改变先前部分中所讨论的豆荚的中介或群体属性的特性而对运行中的应用具有合理最小的中断或没有中断。例如,通过中介,可以使用包含以下步骤的序列来改变豆荚的中介器,其中在步骤中,豆荚中的各存储系统被改变为取决于第一中介器和第二中介器这两者,然后各自被改变为仅取决于第二中介器。如果在序列中间发生故障,则一些存储系统可能取决于第一中介器和第二中介器这两者,但在任何情况下,恢复和故障处理将不会导致一些存储系统仅取决于第一中介器而其它存储系统仅取决于第二中介器。可以通过暂时取决于对第一群体模型和第二群体模型这两者的胜利来类似地处理群体,以继续恢复。这可能导致面对故障的豆荚的可用性取决于附加资源的非常短的时间段,从而减少了潜在可用性,但该时间段很短,并且可用性的减少往往很少。对于中介,如果中介器参数的变化仅仅是中介所用的密钥的变化、并且所使用的中介服务是相同的,则可用性的潜在减少甚至更少,因为它现在仅取决于对同一服务的两次呼叫与对该服务的一次呼叫,而不是取决于对两个单独服务的单独呼叫。

读者将注意到,改变群体模型可能相当复杂。可能需要存储系统将参与第二群体模型、但不会取决于在第二群体模型中获胜的附加步骤,然后是也取决于第二群体模型的步骤。这对于解释如下的事实可以是必要的:如果仅一个系统处理了改变以取决于群体模型,则它将永远不会在群体中获胜,因为永远不会存在多数。利用该模型适当地改变高可用性参数(中介关系、群体模型、接管偏好),可以为这些操作创建安全的过程,以将豆荚拆分为两个或将两个豆荚结合为一个。这可能需要增加另一种能力:将第二豆荚链接到第一豆荚以获得高可用性,使得如果两个豆荚包括兼容的高可用性参数,则链接到第一豆荚的第二豆荚可以取决于第一豆荚来确定和激励与分离相关的处理和操作、离线状态和同步状态、以及恢复和重新同步动作。

为了将一个豆荚拆分成两个(这是用以将一些卷移入到新创建的豆荚中的操作),可以形成分布式操作,该分布式操作可被描述为:形成将先前位于第一豆浆中的一组卷移入其中的第二豆荚、将高可用性参数从第一豆荚拷贝到第二豆荚以确保它们对于链接兼容、并将第二豆荚链接到第一豆荚以获得高可用性。这种操作可被编码为消息,并且应该由豆荚中的各存储系统以下面这样的方式实现,即:存储系统确保该操作完全发生在该存储系统上,或者在处理被故障中断的情况下根本不发生。一旦两个豆荚的所有同步存储系统处理了此操作,存储系统于是就可以处理后续操作,该后续操作改变第二豆荚,使其不再链接到第一豆荚。与针对豆荚的高可用性特性的其它改变一样,这涉及首先将各同步存储系统改变为依赖于先前的模型(该模型是高可用性链接到第一豆荚)和新模型(该模型其自身现在是独立的高可用性)这两者。在中介或群体的情况下,这意味着处理这种改变的存储系统将首先取决于针对第一豆荚适当地实现的中介或群体,并将另外取决于在第二豆荚在要求中介或测试群体的故障之后可以进行之前针对第二豆荚实现的新的单独中介(例如,新的中介密钥)或群体。与先前关于改变群体模型的描述一样,中间步骤可以在存储系统参与并取决于第二豆荚的群体的步骤之前设置存储系统以参与第二豆荚的群体。一旦所有同步存储系统处理了改变以取决于第一豆荚和第二豆荚这两者的中介或群体的新参数,拆分就完成了。

将第二豆荚结合到第一豆荚中基本上是反向的。首先,必须通过具有相同的存储系统列表以及通过具有兼容的高可用性模型来调整第二豆荚以与第一豆荚兼容。这可能涉及一些步骤的集合,诸如本文的其它各处所述的用以添加或移除存储系统或者用以改变中介器或群体模型的步骤。根据实现,可能只需要达到相同的存储系统列表。结合通过在各同步存储系统上处理操作以将第二豆荚链接到第一豆荚以实现高可用性来继续。然后,处理该操作的各存储系统将取决于第一豆荚以实现高可用性,然后取决于第二豆荚以实现高可用性。一旦第二豆荚的所有同步存储系统处理了该操作,存储系统于是就将处理后续操作,以消除第二豆荚和第一豆荚之间的链接、将卷从第二豆荚迁移到第一豆荚中、并删除第二豆荚。只要实现允许主机或应用数据集修改或读取操作通过身份正确地指向卷即可,并且只要身份被保持为对于存储协议或存储模型适当(例如,只要在SCSI的情况下保持卷的逻辑单元标识符和用于访问卷的目标端口的使用),就可以在整个这些操作过程中保持主机或应用数据集访问。

在豆荚间迁移卷可能出现问题。如果豆荚具有相同的同步成员资格存储系统集,则可以是直接的:暂时暂停对正在迁移的卷的操作,将对这些卷的操作的控制切换到控制新豆荚的软件和结构,然后重新开始操作。这允许无缝迁移,除了非常短暂的操作暂停之外,应用可以继续正常运行,前提是豆荚之间的网络和端口迁移正确。根据实现,暂停操作甚至可以不是必需的,或者可以是系统内部的,使得操作的暂停没有影响。在具有不同同步成员资格的豆荚之间拷贝卷更是一个问题。如果拷贝的目标豆荚具有来自源豆荚的同步成员的子集,这并不是什么问题:成员存储系统可以被足够安全地丢弃,而不必进行更多的工作。但是,如果目标豆荚向源豆荚上的卷添加同步成员存储系统,则添加的存储系统必须在其可以使用之前进行同步以包括卷的内容。直到同步为止,这会使拷贝卷与已同步的卷明显不同,因为故障处理不同、并且来自尚未同步的成员存储系统的请求处理要么不起作用,要么必须被转发,要么不会那样快,因为读取必须穿过互连。另外,内部实现将必须处理一些正同步并为处理故障作好准备的卷以及其它未同步的卷。

在面对故障时,还存在与操作可靠性相关的其它问题。协调多存储系统豆荚之间的卷的迁移是分布式操作。如果豆荚是故障处理和恢复的单元,并且如果使用中介或群体或任何手段来避免分裂脑的情形,则卷从一个具有用于故障处理、恢复、中介和群体的一组特定状态和配置和关系的豆荚切换到另一个豆荚,然后豆荚中的存储系统必须小心地协调与用于任何卷的处理相关的改变。操作不能在存储系统之间以原子的方式分布,但必须以某种方式分级。中介和群体模型本质上为豆荚提供了用于实现分布式事务原子性的工具,但是在不添加到实现的情况下,这可能不会扩展到豆荚间的操作。

即使对于共享相同的第一和第二存储系统的两个豆荚,也考虑从第一豆荚到第二豆荚的卷的简单迁移。在某种程度上,存储系统将协调以定义卷现在位于第二豆荚中,并且不再位于第一豆荚中。如果跨两个豆荚的存储系统不存在事务原子性的固有机制,则在导致用以从两个豆荚分离存储系统的故障处理的网络故障时,本机实现可以将卷留在第一存储系统上的第一豆荚以及第二存储系统上的第二豆荚中。如果豆荚单独确定哪个存储系统成功分离另一存储系统,则结果可能是针对两个豆荚同一存储系统分离该另一存储系统,在这种情况下,卷迁移恢复的结果应该是一致的,否则可能导致针对两个豆荚不同的存储系统彼此分离。如果针对第一豆荚第一存储系统分离第二存储系统,并且针对第二豆荚第二存储系统分离第一存储系统,则恢复可能导致卷恢复到第一存储系统上的第一豆荚和第二存储系统上的第二豆荚,然后在这两个存储系统上卷运行并导出到主机和存储应用。如果作为替代、针对第一豆荚第二存储系统分离第一存储系统,并且针对第二豆荚第一存储系统分离第二存储系统,则恢复可能导致卷由于第一存储系统而从第二豆荚丢弃卷并且由于第二存储系统而从第一豆荚丢弃卷,从而导致卷完全消失。如果卷在其间迁移的豆荚位于不同存储系统集上,则事情就会变得更加复杂。

这些问题的解决方案可以是使用中间豆荚,以及先前所述的用于拆分和结合豆荚的技术。该中间豆荚可能永远不会被呈现为与存储系统相关联的可见被管理对象。在此模型中,要从第一豆荚移动到第二豆荚的卷首先使用先前所述的拆分操作从第一豆荚拆分成新的中间豆荚。然后可以通过根据需要相对于该中间豆荚添加或移除存储系统来调整该豆荚的存储系统成员以使存储系统的成员资格匹配。随后,中间豆荚可以与第二豆荚结合。

为了进一步说明,图5阐述了例示根据本发明的一些实施例的支持豆荚的存储系统(402、404、406)可以进行的步骤的流程图。尽管描绘得不太详细,但图5所描绘述的存储系统(402、404、406)可以与以上参考图1A~1D、图2A~2G、图3A~3B、图4或其任意组合所描述的存储系统类似。事实上,图5所描绘的存储系统(402、404、406)可以包括与上述的存储系统相比相同、更少、附加的组件。

在图5所描绘的示例方法中,存储系统(402)可以附加(508)到豆荚。豆荚成员资格的模型可以包括存储系统的列表和该列表的子集,其中假定存储系统对于豆荚来说是同步的。如果存储系统至少在针对与豆荚相关联的数据集的最后写入副本具有相同空闲内容的恢复内,则该存储系统对于豆荚来说是同步的。空闲内容是在已完成任何正在进行的修改而无需处理新修改之后的内容。有时这被称为“崩溃可恢复”一致性。作为豆荚成员列出、但未被列出为针对豆荚同步的存储系统可被描述为从豆荚“分离”。作为豆荚成员列出、针对豆荚同步、并且当前可用于主动服务于豆荚的数据的存储系统对豆荚来说是“在线的”。

在图5所描绘的示例方法中,存储系统(402)可以例如通过使其本地存储的数据集(426)的版本与存储在豆荚中的在线的其它存储系统(404、406)中的数据集(426)的最新版本同步来附加(508)到豆荚,如上文所述。在这样的示例中,为了使存储系统(402)附加到(508)豆荚,可能需要更新豆荚中的各存储系统(402、404、406)内本地存储的豆荚定义,以使存储系统(402)附加到(508)豆荚。在这样的示例中,豆荚的各存储系统成员可以具有其自己的成员资格副本,包括其上次知道的哪些存储系统是同步的、以及其上次知道的哪些存储系统包括整个豆荚成员集。

在图5所描绘的示例方法中,存储系统(402)还可以接收(510)读取数据集(426)的一部分的请求,并且存储系统(402)可以本地地处理(512)读取数据集(426)的一部分的请求。读者将理解,尽管由于数据集(426)应当跨豆荚中的所有存储系统(402、404、406)保持一致,因此对数据集(426)进行修改(例如,写入操作)的请求要求在豆荚中的存储系统(402、404、406)之间进行协调,但是对读取数据集(426)的一部分的请求进行响应无需在存储系统(402、404、406)之间进行类似协调。正因如此,接收读取请求的特定存储系统(402)可以通过读取存储在存储系统(402)的存储装置内的数据集(426)的一部分来在本地服务于读取请求,而无需与豆荚中的其它存储系统(404、406)进行同步通信。一个存储系统所接收到的对于被复制集群中的被复制数据集的读取请求预期在绝大多数情况下(至少在被正在集群内运行的存储系统接收到时,其中该集群名义上也正在运行)避免任何通信。这种读取通常只需通过从集群数据集的本地副本中读取来进行处理,而无需与集群中的其它存储系统进一步交互。

读者将理解,存储系统可以采取步骤来确保读取一致性,使得无论哪个存储系统处理读取请求,读取请求都将返回相同的结果。例如,由集群中的任何一组存储系统接收的任何一组更新所产生的集群数据集内容应跨集群保持一致,至少在更新空闲(所有先前修改操作已被指示为完成,并且没有以任何方式接收到和处理新的更新请求)的任何时间。更具体地,跨一组存储系统的集群数据集的实例只能因尚未完成的更新而有所不同。这意味着,例如,在卷块范围内重叠的任何两个写入请求、或者写入请求与重叠快照、比较写入或虚拟块范围副本的任意组合必须在数据集的所有副本上产生一致的结果。两个操作不能产生就像它们在被复制集群中的一个存储系统上以一个顺序发生并在另一存储系统上以不同的顺序发生一样的结果。

此外,读取请求可以是时间顺序一致的。例如,如果一个读取请求在被复制集群上接收到并完成,并且该读取请求后跟着由被复制集群接收到的针对重叠地址范围的另一读取请求,并且该一个或这两个读取以任何方式在时间和卷地址范围上与被复制集群所接收到的修改请求重叠(无论读取或修改中的任一个是由被复制集群中的相同存储系统还是由不同存储系统接收),则如果第一读取反映了更新的结果,第二读取也应反映该更新的结果,而不是可以返回更新前的数据。如果第一读取未反映更新,则第二读取可以反映更新,或可以不反映更新。这确保在两个读取请求之间,数据段的“时间”不能向后滚动。

在图5所描绘的示例方法中,存储系统(402)也可以检测(514)到与一个或多个其它存储系统(404、406)的数据通信的中断。由于各种原因,可能发生与一个或多个其它存储系统(404、406)的数据通信的中断。例如,与一个或多个其它存储系统(404、406)的数据通信的中断可能是因为存储系统(402、404、406)其中之一发生故障、因为网络互连发生故障、或者由于某一其它原因而发生。同步复制集群的重要方面是确保任何故障处理不会导致不可恢复的不一致或响应中的任何不一致。例如,如果两个存储系统之间的网络发生故障,则存储系统中的至多一个存储系统可以继续处理针对豆荚的新传入I/O请求。并且如果一个存储系统继续处理,则另一存储系统无法处理要完成的任何新请求(包括读取请求)。

在图5所描绘的示例方法中,存储系统(402)还可以判断(516)特定存储系统(402)是否应作为豆荚的一部分而保持在线。如上所述,为了作为豆荚的一部分而“在线”,存储系统必须认为其自己对于豆荚来说是同步的,并且必须与其认为对于豆荚来说同步的所有其它存储系统进行通信。如果存储系统不能确定其是同步的并且与同步的所有其它存储系统进行通信,则该存储系统可以停止处理新传入的访问数据集(426)的请求。正因如此,存储系统(402)可以例如通过判断其是否可以与其认为对于豆荚来说同步的所有其它存储系统(404、406)进行通信(例如,经由一个或多个测试消息)、通过判断认为对于豆荚来说同步的所有其它存储系统(404、406)也认为该存储系统(402)附加至豆荚、通过特定存储系统(402)必须确认为其可以与认为对于豆荚来说同步的所有其它存储系统(404、406)进行通信并且认为对于豆荚来说同步的所有其它存储系统(404、406)也认为该存储系统(402)附加至豆荚的两个步骤的组合、或者通过一些其它机制,来判断(516)特定存储系统(402)是否应作为豆荚的一部分而保持在线。

在图5所描绘的示例方法中,存储系统(402)还可以响应于肯定地(518)判断为特定存储系统(402)应作为豆荚的一部分保持在线而保持(522)特定存储系统(402)上的数据集(426)可被访问以用于管理和数据集操作。存储系统(402)可以例如通过接受访问存储系统(402)上所存储的数据集(426)的版本的请求并处理这些请求、通过接受并处理主机或经授权管理员所发出的与数据集(426)相关联的管理操作、通过接受并处理豆荚中的其它存储系统(404、406)其中之一所发出的与数据集(426)相关联的管理操作、或以某种其它方式,来保持(522)特定存储系统(402)上的数据集(426)可被访问以用于管理和数据集操作。

在图5所描绘的示例方法中,存储系统(402)还可以响应于判断为特定存储系统不应(520)作为豆荚的一部分保持在线而使(524)特定存储系统(402)上的数据集(426)不可被访问以用于管理和数据集操作。存储系统(402)可以例如通过拒绝访问存储系统(402)上所存储的数据集(426)的版本的请求、通过拒绝主机或其它经授权管理员所发出的与数据集(426、428)相关联的管理操作、通过拒绝豆荚中的其它存储系统(404、406)其中之一所发出的与数据集(426)相关联的管理操作、或以某种其它方式,来使(524)特定存储系统(402)上的数据集(426)不可被访问以用于管理和数据集操作。

在图5所描绘的示例方法中,存储系统(402)还可以检测(526)到与一个或多个其它存储系统(404、406)的数据通信的中断已被修复。存储系统(402)可以例如通过从一个或多个其它存储系统(404、406)接收消息来检测(526)到与一个或多个其它存储系统(404、406)的数据通信的中断已被修复。响应于检测(526)到与一个或多个其它存储系统(404、406)的数据通信的中断已被修复,存储系统(402)可以使(528)特定存储系统(402)上的数据集(426)可被访问以用于管理和数据集操作。

读者将理解,图5所描绘的示例描述了如下的实施例,其中尽管不需要排序,但各个动作被描绘为在某个顺序内发生。此外,可以存在其它实施例,其中存储系统(402)仅执行所描述的动作的子集。例如,存储系统(402)可以在没有首先接收(510)到读取数据集(426)的一部分的请求并在本地处理(512)读取数据集(426)的一部分的请求的情况下进行以下步骤:检测(514)与一个或多个其它存储系统(404、406)的数据通信的中断、判断(516)特定存储系统(402)是否应保留在豆荚中、使(522)特定存储系统(402)上的数据集(426)可被访问以用于管理和数据集操作或者使(524)特定存储系统(402)上的数据集(426)不可被访问以用于管理和数据集操作。此外,存储系统(402)可以在没有首先接收(510)到读取数据集(426)的一部分的请求并在本地处理(512)读取数据集(426)的一部分的请求的情况下检测到(526)与一个或多个其它存储系统(404、406)的数据通信的中断已被修复,并使(528)特定存储系统(402)上的数据集(426)可被访问以用于管理和数据集操作。事实上,在所有实施例中,这里描述的步骤均不明确地要求作为进行这里描述的其它步骤的先决条件。

为了进一步说明,图6阐述了例示根据本发明的一些实施例的支持豆荚的存储系统(402、404、406)可以进行的步骤。尽管描绘得不太详细,但图6所描绘的存储系统(402、404、406)可以与以上参考图1A~1D、图2A~2G、图3A~3B、图4或其任意组合所描述的存储系统类似。事实上,图6所描绘的存储系统(402、404、406)可以包括与上述的存储系统相比相同、更少、附加的组件。

在图6所描绘的示例方法中,两个或更多个存储系统(402、404)可以各自识别(608)用于异步接收数据集(426)的目标存储系统(618)。用于异步接收数据集(426)的目标存储系统(618)可以例如体现为位于与作为特定豆荚成员的存储系统(402、404)的任一个不同的数据中心中的备份存储系统,体现为云服务提供商所提供的云存储,或者以许多其它方式体现。读者将理解,目标存储系统(618)不是同步复制数据集(426)的多个存储系统(402、404)其中之一,并且正因如此,目标存储系统(618)最初不包括数据集(426)的最新本地副本。

在图6所描绘的示例方法中,两个或更多个存储系统(402、404)还可以各自识别(610)数据集(426)的没有被作为包括数据集(426)的豆荚的成员的任何其它存储系统异步复制到目标存储系统(618)的部分。在这样的示例中,存储系统(402、404)可以各自将数据集(426)的没有被任何其它存储系统异步复制到目标存储系统的部分复制(612)到目标存储系统(618)。考虑如下的示例,其中第一存储系统(402)负责将数据集(426)的第一部分(例如,地址空间的第一半)异步复制到目标存储系统(618)。在这样的示例中,第二存储系统(404)将负责将数据集(426)的第二部分(例如,地址空间的第二半)异步复制到目标存储系统(618),使得两个或更多个存储系统(402、404)共同地将整个数据集(426)复制到目标存储系统(618)。

读者将理解,通过使用豆荚,如上所述,两个存储系统之间的复制关系可以从异步复制数据的关系切换到同步复制数据的关系。例如,如果存储系统A被配置为将数据集异步复制到存储系统B,则创建包含数据集、作为成员的存储系统A和作为成员的存储系统B的豆荚可以将异步复制数据的关系切换为同步复制数据的关系。同样,通过使用豆荚,两个存储系统之间的复制关系可以从同步复制数据的关系切换到异步复制数据的关系。例如,如果创建了包括数据集、作为成员的存储系统A和作为成员的存储系统B的豆荚,则通过仅对豆荚进行反伸展(以移除作为成员的存储系统A或移除作为成员的存储系统B),可以立即将存储系统之间的同步复制数据的关系切换到异步复制数据的关系。以这种方式,存储系统可以根据需要在异步复制和同步复制之间来回切换。

这种切换可以通过依赖于用于同步复制和异步复制这两者的类似技术的实现来促进。例如,如果同步复制数据集的重新同步依赖于用于异步复制的相同或兼容机制,则切换到异步复制在概念上等同于丢弃同步状态并使关系保持在类似于“永久恢复”模式的状态。同样,从异步复制到同步复制的切换在概念上可以通过“追上”并变得同步(就像在切换系统以变为同步豆荚成员来完成重新同步时那样)来进行操作。

可选地或另外,如果同步复制和异步复制这两者依赖于相似或相同的公共元数据、或用于表示和识别逻辑区或存储块身份的公共模型、或用于表示内容可寻址存储块的公共模型,则可以利用这些具有共性的方面来显著地减少在相对于同步复制和异步复制进行切换时可能需要传送的内容。此外,如果数据集从存储系统A异步复制到存储系统B、并且系统B进一步将该数据集异步复制到存储系统C,则公共元数据模型、公共逻辑区或块身份、或内容可寻址存储块的公共表示可以显著地减少在存储系统A和存储系统C之间启用同步复制所需的数据传送。

读者将进一步理解,如上文所述,通过使用豆荚,复制技术可以用于进行复制数据以外的任务。事实上,由于豆荚可能包括一组被管理对象,因此像迁移虚拟机等的任务可以使用豆荚和这里所述的复制技术来执行。例如,如果虚拟机A在存储系统A上执行,则通过创建包括作为被管理对象的虚拟机A、作为成员的存储系统A以及作为成员的存储系统B的豆荚,虚拟机A和任何相关图像和定义可以迁移到存储系统B,此时可以简单地销毁豆荚,可以更新成员资格,或者可以根据需要采取其它动作。

为了进一步说明,图7阐述了根据本发明的一些实施例的可被实现为一起可表示存储数据的逻辑卷或逻辑卷的一部分的元数据对象的结构化集合的元数据表示的图。元数据表示750、754和760可以存储在存储系统(706)中,并且可以针对存储在存储系统(706)内的多个存储对象(诸如卷或卷的一部分)中的每一个生成并维持一个或多个元数据表示。

虽然元数据对象的其它类型的结构化集合是可能的,但在该示例中,元数据表示可被构造为节点的有向无环图(DAG),其中为了保持对任何给定节点的高效访问,可以根据各种方法来构造和平衡DAG。例如,元数据表示的DAG可被定义为B树的类型,并相应地响应于元数据表示的结构的改变来进行平衡,其中元数据表示的改变可能响应于元数据表示所表示的基础数据的改变或添加而发生。虽然在该示例中,为了简单起见,仅存在两个级别,但在其它示例中,元数据表示可以跨越多个级别,并且可以包括数百或数千个节点,其中每个节点可以包括到其它节点的任何数量的链路。

此外,在该示例中,元数据表示的叶可以包括指向卷或卷的一部分的存储数据的指针,其中逻辑地址或卷和偏移可以用于识别和导航通过元数据表示以到达一个或多个叶节点,该叶节点引用与逻辑地址相对应的存储数据。例如,卷(752)可以由包括多个元数据对象节点(752、752A~752N)的元数据表示(750)来表示,其中叶节点(752A~752N)包括指向相应数据对象(753A~753N、757)的指针。数据对象可以是存储系统(706)内的数据的任何大小单位。例如,数据对象(753A~753N、757)可以各自是逻辑区,其中逻辑区可以是某个指定大小,诸如1MB、4MB或某个其它大小等。

在该示例中,快照(756)可被创建为存储对象(在这种情况下为卷(752))的快照,其中在创建快照(756)的时间点,快照(756)的元数据表示(754)包括卷(752)的元数据表示(750)的所有元数据对象。此外,响应于快照(756)的创建,可以将元数据表示(754)指定为只读。然而,共享元数据表示的卷(752)可以继续被修改,并且在创建快照的时刻,由于对与卷(752)相对应的数据进行了修改,因此卷(752)和快照(756)的元数据表示是相同的,并且响应于修改,卷(752)和快照(756)的元数据表示可能发生分歧并变得不同。

例如,考虑如下情况:元数据表示(750)用以表示卷(752),并且元数据表示(754)用以表示快照(756),存储系统(706)可以接收I/O操作,该I/O操作写入最终存储在特定数据对象(753B)内的数据,其中数据对象(753B)由叶节点指针(752B)指向,并且其中叶节点指针(752B)是两个元数据表示(750、754)的一部分。响应于写入操作,元数据表示(754)所指的只读数据对象(753A~753N)保持不变,并且指针(752B)也可以保持不变。然而,表示当前卷(752)的元数据表示(750)被修改为包括新数据对象以保持通过写入操作写入的数据,其中修改后的元数据表示被描绘为元数据表示(760)。此外,可以仅将写入操作指向数据对象(753B)的一部分,因此,新数据对象(757)除了写入操作的有效负载之外,还可以包括数据对象(753B)的先前内容的副本。

在该示例中,作为处理写入操作的一部分,修改卷(752)的元数据表示(760)以移除现有元数据对象指针(752B)并包括新元数据对象指针(758),其中新元数据对象指针(758)被配置为指向新数据对象(757),其中新数据对象(757)存储通过写入操作写入的数据。此外,卷(752)的元数据表示(760)继续包括先前元数据表示(750)内所包括的所有元数据对象,但不包括引用目标数据对象的元数据对象指针(752B),其中元数据对象指针(752B)继续引用本应重写的只读数据对象(753B)。

以这种方式,使用元数据表示,可以通过创建元数据对象并且在没有实际复制数据对象的情况下将卷或卷的一部分视为快照或视为副本——其中数据对象的复制可以推迟,直到写入操作指向元数据表示所指的只读数据对象其中之一为止。

换句话说,使用元数据表示来表示卷的优点是,卷的快照或副本可被创建,并在恒定的顺序时间内、具体地在为快照或副本创建元数据对象以及为快照或副本元数据对象创建到正被快照或拷贝的卷的现有元数据表示的引用所需的时间内可访问。

作为示例用途,虚拟化引用拷贝可以以在创建卷的快照时使用元数据表示类似的方式利用元数据表示,其中虚拟化引用拷贝的元数据表示通常可以与整个卷的元数据表示的一部分相对应。虚拟化引用拷贝的示例实现可以在虚拟化存储系统的上下文内实现,其中卷内和卷间的多个块范围可以引用存储数据的统一副本。在这种虚拟化存储系统中,上述的元数据可用于处理虚拟地址或逻辑地址与物理地址或真实地址之间的关系——换句话说,存储数据的元数据表示实现了可被认为是闪存友好的虚拟化存储系统,因为它减少或最小化对闪存存储器的磨损。

在一些示例中,逻辑区可以以各种方式组合,包括作为简单的集合或作为被形成为逻辑区引用集的某个较大规模的逻辑区内的逻辑相关地址范围。这些较大组合也可被赋予各种类型的逻辑区身份,并且可以进一步组合为更大的逻辑区或集合。写入时拷贝状况可以适用于各个层,并取决于实现以不同的方式进行。例如,在仅改变写入时拷贝逻辑集合的一部分的情况下,适用于逻辑区集合中的一个逻辑区集合的写入时拷贝状况可能导致拷贝集合保留对未改变的逻辑区的引用以及写入时拷贝逻辑区的创建(通过根据需要拷贝对任何未改变的存储数据块的引用)。

在该模型中,可以通过引用存储数据块或引用逻辑区或将逻辑区(或逻辑区的识别集合)标记为写入时拷贝的组合来实现去重复、卷快照或块范围快照。

此外,利用闪存存储系统,存储数据块可以以各种方式组织和分组在一起,因为集合被写入作为较大擦除块的一部分的页中。对已删除或已替换的存储数据块进行最终垃圾回收可能涉及移动存储在其它各处的一定数量的页中的内容,使得整个擦除块可被擦除并为重复使用做好准备。这种选择物理闪存页、对其进行最终迁移和垃圾回收、然后擦除闪存擦除块以供重复使用的处理可以通过或可以不通过存储系统的方面进行协调、驱动或进行,其中该存储系统还正在处理逻辑区、去重复、压缩、快照、虚拟拷贝或其它存储系统功能。用于选择页、迁移页、垃圾回收和擦除擦除块的协调或驱动处理可进一步考虑闪存存储器装置单元、页和擦除块的各种特性,诸如使用次数、老化预测、对电压电平或过去恢复存储数据所需的重试次数等。它们还可以考虑跨存储系统内的所有闪存存储器装置的分析和预测。

为了继续该示例,在存储系统可以基于包括逻辑区的有向无环图实现的情况下,逻辑区可以分为两种类型:叶逻辑区,其以某种方式引用一定量的存储数据;以及复合逻辑区,其引用其它叶或复合逻辑区。

叶区可以以多种方式引用数据。它可以直接指向单个存储数据范围(例如,64千字节的数据),或者它可以是对存储数据的引用的集合(例如,1兆字节的内容“范围”,其将与该范围相关联的一定数量的虚拟块映射到物理存储块)。在后一种情况下,这些块可以使用某个身份来引用,并且区范围内的某些块可能不会映射到任何事物。此外,在后一种情况下,这些块引用不需要是唯一的,从而允许从一定数量的卷内和跨一定数量的卷的一定数量的逻辑区内的虚拟块进行多次映射以映射到相同的物理存储块。代替存储块引用,逻辑区可以对简单图案进行编码:例如,作为相同字节的字符串的块可以简单编码为该块是具有相同字节的重复图案。

复合逻辑区可以是具有一定虚拟大小的内容的逻辑范围,其包括多个映射,各映射将内容的逻辑范围从复合逻辑区的子范围映射到基础叶或复合逻辑区。然后,对与复合逻辑区的内容相关的请求进行变换涉及在复合逻辑区的上下文内获取该请求的内容范围,确定请求映射到哪个基础叶或复合逻辑区,并将请求变换为应用于基础叶或复合逻辑区内的适当内容范围。

卷或文件或其它类型的存储对象可被描述为复合逻辑区。因此,这些呈现的存储对象可以使用该区模型来组织。

根据实现,可以从多个其它复合逻辑区引用叶或复合逻辑区,从而有效地允许卷内和跨卷的较大内容集合的廉价重复。因此,逻辑区基本上可以布置在引用的无环图内,其中这些引用的无环图各自以叶逻辑区结束。这可用于制作卷的副本、制作卷的快照、或用作作为EXTENDED COPY或类似类型的操作的一部分而支持卷内和卷间的虚拟范围副本的一部分。

实现可以为各逻辑区提供可用于命名该逻辑区的身份。这简化了引用,因为复合逻辑区内的引用变为包括逻辑区身份和与每个这样的逻辑区身份相对应的逻辑子范围的列表。在逻辑区内,各存储数据块引用也可以基于用于命名它的某个身份。

为了支持区的重复使用,可以添加其它功能:写入时拷贝逻辑区。当修改操作影响写入时拷贝叶或复合逻辑区时,逻辑区被拷贝,其中副本是新的引用并且可能具有新的身份(取决于实现)。副本保留与基础叶或复合逻辑区相关的所有引用或身份,但是具有利用修改操作所产生的任何修改。例如,WRITE、WRITE SAME、XDWRITEREAD、XPWRITE或COMPAREAND WRITE请求可以在存储系统中存储新块(或使用去重复技术来识别现有存储块),从而修改相应的叶逻辑区以引用或存储一组新块的身份,这可能会替换前一组块的引用和存储身份。可选地,UNMAP请求可以修改叶逻辑区以移除一个或多个块引用。在这两种情况下,修改叶逻辑区。如果叶逻辑区是写入时拷贝,则将创建新的叶逻辑区,该新的叶逻辑区是通过从旧区拷贝不受影响的块引用、然后基于修改操作替换或移除块引用而形成的。

然后,可以修改用于定位叶逻辑区的复合逻辑区,以存储与拷贝和修改的叶逻辑区相关联的新的叶逻辑区引用或身份,作为先前叶逻辑区的替代。如果该复合逻辑区是写入时拷贝,则新的复合逻辑区被创建为新的引用或具有新的身份,并且其基础逻辑区的任何未受影响的引用或身份被拷贝到该新的复合逻辑区,并且先前的叶逻辑区引用或身份被替换为新的叶逻辑区引用或身份。

基于通过用于处理修改操作的无环图的搜索路径,该处理从被引用区进一步向后到引用复合区,其中所有写入时拷贝逻辑区都被拷贝、修改和替换。

这些拷贝叶和复合逻辑区然后可以丢弃写入时拷贝的特性,使得进一步的修改不会导致附加副本。例如,在第一次修改写入时拷贝“父”复合区中的某个基础逻辑区时,可以拷贝和修改该基础逻辑区,其中副本具有继而被写入父复合逻辑区的拷贝和替换实例中的新身份。然而,在第二次拷贝和修改某个其它基础逻辑区、并且该其它基础逻辑区副本的新身份被写入父复合逻辑区时,可以作为替代修改父复合逻辑区,而无需进行进一步复制和替换来代表对父复合逻辑区的引用。

对没有当前叶逻辑区的卷或复合逻辑区的新区域的修改操作可以创建新的叶逻辑区来存储这些修改的结果。如果要从现有的写入时拷贝复合逻辑区引用新的逻辑区,则将修改现有的写入时拷贝复合逻辑区以引用新的逻辑区,从而产生与用于修改现有叶逻辑区的序列类似的其它拷贝、修改和替换操作序列。

如果父复合逻辑区不能(基于实现)增长得足够大以覆盖包含新叶逻辑区从而创建新修改操作的地址范围,则可以将父复合逻辑区拷贝到两个或更多个新复合逻辑区中,该两个或更多个新复合逻辑区继而从单个“祖父”复合逻辑区中引用,其中该单个“祖父”复合逻辑区再次为新引用或新身份。如果祖父逻辑区本身是通过写入时拷贝的另一复合逻辑区而发现的,则该另一复合逻辑区将以与先前段中所述类似的方式被拷贝、修改和替换。在基于逻辑区的这些有向无环图的存储系统实现内,这种写入时拷贝模型可以用作实现快照、卷副本和虚拟卷地址范围副本的一部分。为了使快照制作为以其它方式可写入的卷的只读副本,与卷相关联的逻辑区的图被标记为写入时拷贝,并且对原始复合逻辑区的引用通过快照而保留。然后,卷的修改操作将根据需要制作逻辑区副本,从而得到存储这些修改操作的结果的卷以及保留原始内容的快照。除了原始卷和拷贝卷都可以修改内容从而得到其自己的拷贝逻辑区图和子图外,卷副本是相同的。

虚拟卷地址范围副本可以通过拷贝叶逻辑区内和叶逻辑区间的块引用来操作(除非对块引用的改变修改了写入时拷贝叶逻辑区,否则这本身不会涉及使用写入时拷贝技术)。可选地,虚拟卷地址范围副本可以重复对叶或复合逻辑区的引用,这对于较大地址范围的卷地址范围副本非常有效。此外,这允许图成为引用的有向无环图,而不仅仅是引用树。与重复逻辑区引用相关联的写入时拷贝技术可以用于确保对虚拟地址范围副本的源或目标的修改操作将导致创建新的逻辑区来存储这些修改,而不会影响紧接在卷地址范围拷贝操作后共享相同逻辑区的目标或源。

豆荚的输入/输出操作也可以基于复制逻辑区的有向无环图来实现。例如,豆荚内的各存储系统可以实现逻辑区的私有图,使得豆荚的一个存储系统上的图与该豆荚的任何第二个存储系统上的图没有特定关系。然而,在豆荚中的存储系统之间同步图是有价值的。这对于重新同步以及对于协调诸如异步复制或基于快照复制到远程存储系统等的特征是有用的。此外,它可能有助于减少处理快照分发和拷贝相关处理的一些开销。在这样的模型中,使豆荚的内容跨豆荚的所有同步存储系统同步与使叶和复合逻辑区的图对于跨豆荚的所有同步存储系统的所有卷同步、并确保所有逻辑区的内容同步基本上相同。为了同步,匹配的叶和复合逻辑区应具有相同的身份,或者应具有可映射的身份。映射可能涉及某一组中间映射表,或者可能涉及某个其它类型的身份变换。在一些情况下,由叶逻辑区映射的块的身份也可以保持同步。

在基于领导者和追随者的豆荚实现中(其中各豆荚具有一个领导者),领导者可以负责确定逻辑区图的任何变化。如果要创建新的叶或复合逻辑区,则其可被赋予一个身份。如果要拷贝现有叶或复合逻辑区以形成经过修改的新逻辑区,则可以将新逻辑区描述为具有某组修改的先前逻辑区的副本。如果要拆分现有逻辑区,则可以将拆分与新产生的身份一起描述。如果从某个附加复合逻辑区将逻辑区引用为基础逻辑区,则可以将该引用描述为用以引用该基础逻辑区的复合逻辑区的改变。

因此,豆荚中的修改操作包括将修改的描述分发到逻辑区图(其中创建新的逻辑区以扩展内容,或拷贝、修改和替换逻辑区以处理与快照、卷副本和卷地址范围副本相关的写入时拷贝状态),并分发针对叶逻辑区内容的修改的描述和内容。如上文所述,使用有向无环图形式的元数据的附加益处是:修改物理存储中存储的数据的I/O操作可以通过修改与物理存储中存储的数据相对应的元数据(而无需修改物理存储中存储的数据)而在用户级别生效。在所公开的存储系统的实施例中(其中物理存储可以是固态驱动器),由于I/O操作是通过修改表示I/O操作所针对的数据的元数据而不是通过读取、擦除或写入闪存存储器而生效的,因此可以避免或减少伴随对闪存存储器的修改的磨损。此外,如上所述,在这种虚拟化存储系统中,上述的元数据可用于处理虚拟地址或逻辑地址与物理地址或真实地址之间的关系——换句话说,存储数据的元数据表示实现了可被认为是闪存友好的虚拟化存储系统,因为它减少或最小化对闪存存储器的磨损。

领导者存储系统可以进行其自己的本地操作,以在其豆荚数据集的本地副本和本地存储系统的元数据的上下文中实现这些描述。此外,同步的追随者进行自己单独的本地操作,以在其单独的豆荚数据集的本地副本及其单独的本地存储系统的元数据的上下文中实现这些描述。当领导者和追随者操作这两者完成时,结果是具有兼容的叶逻辑区内容的逻辑区的兼容图。逻辑区的这些图然后变成如前面示例中所描述的“公共元数据”的类型。该公共元数据可被描述为修改操作和所需公共元数据之间的依赖关系。图的变换可以被描述为一组或多个预言内的单独操作,这些预言可以描述与一个或多个其它操作的关系(诸如依赖关系)。换句话说,操作之间的相互依赖关系可被描述为一个操作在某种程度上所取决于的一组前兆,其中该组前兆可被认为是为了使操作完成而必须真实的预言。对预言的更全面描述可以在申请参考号15/696,418内发现,该申请通过引用而全文包括于此。可选地,依赖于尚未知道跨豆荚完成的特定的相同图变换的各修改操作可以包括其所依赖的任何图变换的部分。处理用于识别已存在的“新”叶或复合逻辑区的操作描述可以避免创建新逻辑区,因为该部分已在某些早期操作的处理中处理,并且作为替代只能实现操作处理中的改变叶或复合逻辑区的内容的部分。领导者的作用是确保变换彼此兼容。例如,可以从针对豆荚的两个写入开始。第一个写入将复合逻辑区A替换为形成为复合逻辑区B的副本,将叶逻辑区C替换为作为叶逻辑区D的副本并修改以存储第二个写入的内容,并将叶逻辑区D进一步写入复合逻辑区B中。另一方面,第二个写入意味着利用复合逻辑区B的对复合逻辑区A的相同拷贝和替换,但是用被修改为存储第二个写入的内容的逻辑区F拷贝和替换不同的叶逻辑区E,并且进一步将逻辑区F写入逻辑区B中。在这种情况下,第一个写入的描述可以包括将A替换为B,并将C替换为D,并将D写入复合逻辑区B中,并将第一个写入的内容写入叶区B;以及,第二个写入的描述可以包括将A替换为B并将E替换为F,并将F连同将被写入叶区F中的第二个写入的内容一起写入到复合逻辑区B中。然后,领导者或任何追随者可以以任何顺序分别处理第一个写入或第二个写入,并且最终结果是B拷贝和替换A,D拷贝和替换C,F拷贝和替换E,而D和F被写入复合逻辑区B中。通过认识到B已存在,可以避免第二次拷贝A以形成B。以这种方式,领导者可以确保豆荚跨豆荚的同步存储系统维持逻辑区图的兼容公共元数据。

考虑到使用逻辑区的有向无环图的存储系统的实现,可以实现基于逻辑区的复制有向无环图的豆荚的恢复。具体地,在该示例中,豆荚中的恢复可能基于复制区图,然后涉及恢复这些图的一致性以及恢复叶逻辑区的内容。在这种恢复的实现中,操作可能包括查询未知的对豆荚的所有同步存储系统已完成的图变换、以及未知的对跨豆荚的所有存储系统已完成的所有叶逻辑区内容修改。这种查询可以基于某个协调检查点以来的操作,或者可以仅仅是未知已完成的操作,其中各存储系统保持正常操作期间的尚未以信号形式通知为已完成的操作的列表。在该示例中,图变换是直接的:图变换可以创建新事物,将旧事物拷贝到新事物,并将旧事物拷贝到两个或更多个拆分的新事物中,或者它们修改复合区以修改其对其它区的引用。在创建或替换任何逻辑区的任何同步存储系统上发现的任何存储操作描述可被拷贝并在尚未具有该逻辑区的任何其它存储系统上进行。描述对叶或复合逻辑区的修改的操作可以将这些修改应用于尚未应用它们的任何同步存储系统,只要所涉及的叶或复合逻辑区已正确恢复即可。

在另一示例中,作为使用逻辑区图的替代方案,存储可以基于复制的内容可寻址存储来实现。在内容可寻址存储中,对于各数据块(例如,每512字节、4096字节、8192字节或甚至16384字节),基于块内容来计算唯一散列值(有时也称为指纹),使得可以将卷或卷的区范围描述为对具有特定散列值的块的引用列表。在基于对具有相同散列值的块的引用的同步复制存储系统实现中,复制可能涉及第一存储系统接收块、计算这些块的指纹、识别这些指纹的块引用、以及将改变作为对卷块到引用块的映射的更新而递送至一个或多个附加存储系统。如果发现块已被第一存储系统存储,则该存储系统可以使用其引用来命名各附加存储系统中的引用(因为引用使用相同的散列值或因为引用的标识符是相同的或者可以容易地映射)。可选地,如果第一存储系统找不到块,则可以将第一存储系统的内容作为操作描述的一部分连同与该块内容相关联的散列值或身份递送到其它存储系统。此外,各同步存储系统的卷描述然后利用新的块引用进行更新。这种存储中的恢复然后可以包括比较卷的最近更新的块引用。如果块引用在豆荚的不同同步存储系统之间存在差异,则可以将各引用的一个版本拷贝到其它存储系统以使它们一致。如果一个系统上的块引用不存在,则从确实存储块引用的块的某个存储系统拷贝该块引用。通过拷贝引用作为实现虚拟拷贝操作的一部分,可以在这样的块或散列引用存储中支持虚拟拷贝操作。

如上所述,元数据可以在同步复制数据集的存储系统之间进行同步。这种元数据可以称为公共元数据或共享元数据,该元数据由代表与豆荚内所存储的内容段到豆荚内的存储对象中的虚拟地址的映射相关的豆荚的存储系统进行存储,其中与这些映射相关的信息在豆荚的成员存储系统之间同步,以确保与豆荚相关的存储操作的正确行为或更好性能。在一些示例中,存储对象可以实现卷或快照。同步元数据可以包括:(a)用以使卷内容映射在豆荚中的存储系统之间同步的信息;(b)用于恢复检查点或用于正在进行的写入操作的跟踪数据;(c)与将数据和映射信息递送到远程存储系统以进行异步或周期性复制相关的信息。

用以使卷内容映射在豆荚中的存储系统之间同步的信息可以实现快照的高效创建,从而实现后续更新、快照副本或快照移除可以跨豆荚成员存储系统高效且一致地进行。

用于恢复检查点或用于正在进行的写入操作的跟踪数据可以实现高效的崩溃恢复以及对可能已部分或完全应用于豆荚的单个存储系统、但可能尚未完全应用于该豆荚的其它存储系统的内容或卷映射的高效检测。

与将数据和映射信息递送到远程存储系统以进行异步或周期性复制相关的信息可以使得豆荚的多于一个成员存储系统能够用作复制豆荚内容的源,并且对于处理映射中的不匹配以及使用于驱动异步或周期性复制的元数据不同的担忧最小。

在一些示例中,共享元数据可以包括对作为豆荚的整个同步复制数据集的子集的一个或多个卷或一个或多个存储对象的命名分组或标识符的描述或指示——其中这样的数据集的卷或存储对象可被称为一致性组。可以定义一致性组,以指定要用于一致快照、异步复制或周期性复制的数据集的卷或存储对象的子集。在一些示例中,一致性组可以诸如通过包括连接到特定的一组主机或主机网络端口或者连接到特定的一组应用或虚拟机或容器的所有卷来动态地计算,其中应用、虚拟机或容器可以在外部服务器系统上操作,或者可以在作为豆荚成员的一个或多个存储系统上操作。在其它示例中,一致性组可根据数据类型或数据集的用户选择或与动态计算类似的一致性组的指定来定义,其中用户可以例如通过命令或管理控制台来指定:特定的或命名的一致性组被创建为包括连接到特定的一组主机或主机网络端口的所有卷,或者被创建为包括特定的一组应用或虚拟机或容器的数据。

在使用一致性组的示例中,一致性组的第一一致性组快照可以包括在第一数据集快照时作为一致性组的成员的所有卷或其它存储对象的第一组快照,并且同一一致性组的第二一致性组快照包括在第二数据集快照时作为一致性组的成员的卷或其它存储对象的第二组快照。在其它示例中,数据集的快照可以以异步方式存储在一个或多个目标存储系统上。类似地,一致性组的异步复制可能考虑到一致性组的成员卷和其它存储对象的动态变化,其中异步复制链接的源或目标处的一致性组的一致性组快照包括在数据集快照所涉及的时间处作为与一致性组相关的成员的卷和其它存储对象。在异步复制连接的目标的情况下,数据集快照所涉及的时间取决于在目标上的一致性组快照时接收到并处理的发送方的动态数据集。例如,如果异步复制的目标例如落后2000个操作(其中这些操作中的一些是一致性组成员改变,其中第一组这样的改变在源的多于2000个操作以前,并且第二组改变在最近的2000个操作内),则目标上的此时的一致性组快照将考虑第一组成员改变,而不会考虑第二组改变。异步复制的目标的其它使用可以类似地在确定这些使用的卷或其它存储对象(及其内容)时考虑一致性组的数据集的时间性质。例如,在异步复制落后2000个操作的相同情况下,针对灾难恢复故障转移使用目标可能从包括在源处的2000个操作以前的卷和其它存储对象(及其内容)的数据集开始。在本讨论中,源处的并发操作(例如,写入、存储对象创建或删除、对影响从一致性组中包含或排除卷或其它存储对象或其它数据的属性的改变、或在同一时间点正在进行且尚未以信号形式通知为已完成的其它操作)可能没有一个定义明确的排序,因此操作的计数仅需要表示基于对源上的并发操作的任何允许排序的某种合理排序。

作为使用一致性组的另一示例,在基于一致性组快照的复制的周期性复制的情况下,各复制一致性组快照将包括在源上形成各一致性组快照时的卷和其它存储对象。通过使用公共或共享的元数据来确保一致性组中的成员资格保持一致,从而确保故障或可能导致复制源或形成数据集快照的系统从豆荚中的一个存储系统切换到另一个的其它改变不会丢失正确处理这些一致性组快照或一致性组复制所需的信息。此外,这种类型的处理可以允许作为豆荚成员的多个存储系统并发地用作异步或周期性复制的源系统。

此外,描述段到存储对象的映射的同步元数据不限于映射本身,并且可以包括附加信息,诸如序列号(或用于识别存储数据的某个其它值)、时间戳、卷/快照关系、检查点身份、定义层次结构的树或图、或映射关系的有向图、以及其它存储系统信息。

为了进一步说明,图8阐述了例示根据本发明的一些实施例的在同步复制数据集的存储系统之间进行中介的示例方法的流程图。尽管图8所描绘的示例方法例示仅跨两个存储系统(814、824)同步复制数据集(426)的实施例,但图8所描绘的示例可以扩展到跨附加存储系统同步复制数据集(426)的实施例。

在以下示例中,在豆荚的一组存储系统(814、824)之间进行中介允许存储系统解决与配对系统间丢失的通信,其中通信可能由于通信故障或某种其它系统故障而丢失。如以下所述,中介的解决方案可以包括使用群体和外部控制系统,该外部控制系统规定哪些存储系统应继续处理针对豆荚数据集的I/O操作并竞争诸如中介器等的资源。然而,中介的优点是它比群体协议简单,并且中介与同步复制存储系统的两个存储系统配置(通用配置)合作得很好。此外,与外部控制系统以及可竞争的许多其它类型的资源相比,中介可能更稳健且更容易配置。

如图8中所描绘的,同步复制数据集(426)的多个存储系统(814、824)可以通过网络(854)与中介服务(800)进行通信——其中中介服务(800)可以解决在存储系统之间发生通信故障的情况下、在存储系统离线的情况下、或者由于某个其它触发事件而使哪个存储系统继续服务于数据集。中介是有利的,这是因为如果存储系统不能彼此通信,则它们可能不能维持同步复制数据集,并且任何接收到的修改数据集的请求都将不可服务,否则数据集将变得不同步。在该示例中,用于同步复制数据集的存储系统的中介服务可以由存储系统(814、824)外部的中介服务(800)提供。虽然在该示例中,仅描绘了两个存储系统(814、824),但一般来说,两个或更多个的某个其它数量的存储系统可能是同步复制数据集的同步列表的一部分。具体地,如果第一存储系统(814)检测到触发事件(诸如丢失到第二存储系统(824)的通信链路(816)),则第一存储系统(814)可以联系外部中介服务(800),以判断其是否可以安全地接管从同步列表中移除非通信存储系统的任务,其中该同步列表指定针对复制数据集同步的存储系统。在其它情况下,第一存储系统(814)可以联系外部中介服务(800),并判断为第一存储系统(814)可能已被第二存储系统从同步列表中移除。在这些示例中,存储系统(814、824)不需要与外部中介服务(800)持续通信,因为在正常情况下,存储系统(814、824)不需要来自中介服务(800)的任何信息来正常操作和维持数据集(426)的同步复制。换句话说,在该示例中,中介服务(800)可能在同步列表的成员资格管理中不起积极作用,此外,中介服务(800)可能甚至不知道同步列表中的存储系统(814、824)的正常操作。作为替代,中介服务(800)可以仅提供存储系统(814、824)用来判断同步列表中的成员资格或者判断存储系统是否可以采取行动以分离另一存储系统的持久信息。

在一些示例中,一个或多个存储系统(814、824)可以响应于触发事件(诸如阻止存储系统(814、824)彼此通信的通信链路故障)而联系中介服务(800);然而,各存储系统(814、824)可以能够通过与存储系统(814、824)之间所使用的通信信道不同的通信信道来与中介服务(800)进行通信。因此,虽然存储系统(814、824)可能无法彼此通信,但是各存储系统(814、824)可能仍与中介服务(800)通信,其中存储系统(814、824)可以使用中介服务(800)来解决哪些存储系统可以继续服务于数据存储请求。此外,从中介服务(800)中赢得中介的存储系统可以分离另一存储系统并更新用于指示可以继续同步复制数据集(426)的存储系统的同步列表。在一些示例中,中介服务(800)可以处理各种请求,诸如设置成员资格列表的请求,该成员资格列表包括请求方存储系统并排除另一存储系统。在该示例中,如果中介服务(800)当前将请求方列为成员,则请求成功完成;如果中介服务(800)当前未将请求方列为成员,则请求失败。以这种方式,如果两个存储系统(814、824)各自在大约相同的时间进行请求(其中请求用于排除另一存储系统),则接收到的第一请求可以成功(其中中介服务根据第一请求来设置成员资格列表以排除另一存储系统),并且接收到的第二请求可能失败,因为成员资格列表已设置为排除另一存储系统。对存储成员资格列表的共享资源的互斥访问用于确保一次只允许一个系统设置成员资格列表。

在另一示例中,中介可以基于分区标识符,其中值可被定义为指示豆荚成员资格分区标识符,以声称成员资格已从豆荚中分区出或移除某一组存储系统。“豆荚”如这里所使用的并在本申请的其余部分中可被体现为管理实体,该管理实体表示数据集、一组被管理对象和管理操作、用以修改或读取数据集的一组访问操作、以及多个存储系统。这种管理操作可以通过任何存储系统等效地修改或查询被管理对象,其中用以读取或修改数据集的访问操作通过任何存储系统等效地操作。各存储系统可以将数据集的单独副本存储为被存储和广告以供存储系统使用的数据集的适当子集,其中通过任何一个存储系统进行和完成的用以修改被管理对象或数据集的操作在后续的管理对象中反映以查询豆荚或用以读取数据集的后续访问操作。关于“豆荚”的更多详情可以在先前提交的临时专利申请编号62/518,071中发现,该文献通过引用而并入于此。

给定存储系统除了存储豆荚成员资格列表之外,分区标识符也可以是存储在给定存储系统中的本地信息。彼此正确通信且同步的系统可能具有相同的分区标识符,并且当存储系统添加到豆荚时,可以将当前分区标识符连同豆荚数据内容一起拷贝。在该示例中,当一组存储系统未与另一组存储系统进行通信时,各组中的一个存储系统可能产生新的且唯一的分区标识符,并尝试通过使用对首先获取共享资源上的锁的存储系统成功的特定操作将其设置在中介服务(800)所维持的共享资源中,其中未能获取共享资源上的锁的另一存储系统尝试进行特定操作失败。在一个实现中,可以使用原子比较设置操作,其中中介服务(800)所存储的最后的分区标识符值可以由具有将分区标识符改变为新值的许可的存储系统提供。在该示例中,对于知道当前分区标识符值的存储系统而言,比较设置操作可以是成功的,其中首先设置分区标识符值的存储系统将是知道当前分区标识符值的存储系统。此外,在web服务协议中可能可用的条件存储或PUT操作可以用于设置分区标识符值,如该示例中所述。在其它情况下,诸如在SCSI环境中,可以使用比较写入操作。在另外的其它情况下,中介服务(800)可以通过接收来自存储系统的请求来进行比较设置操作,其中该请求指示旧分区标识符值和新分区标识符值,并且其中,当且仅当当前存储值等于旧分区标识符时,中介服务(800)才将存储分区标识符改变为新分区标识符值。

以这种方式,基于分区标识符的中介可用于保持存储系统可用来判断给定存储系统是否包括在一组已分区的一致豆荚成员内的信息。在一些情况下,分区标识符可能仅在由于存储系统或网络互连的故障而自发分离的情况下改变。在这些示例中,以受控方式使自己对于豆荚而言离线的存储系统可以与其它存储系统通信,以作为同步豆荚成员移除自己,因此不需要形成中介的新分区标识符。此外,作为同步豆荚成员移除自己的存储系统然后可以以不需要中介的新分区标识符的受控方式将自己重新添加回作为同步豆荚成员。另外,只要存储系统正在与同步豆荚成员通信,新存储系统就可以添加到同步豆荚,其中新存储系统可以以无需中介的新分区标识符的受控方式来添加其自身。

因此,中介分区标识符机制的优点是,中介服务(800)可能仅在存在至少一组存储系统通过尝试从同步豆荚成员资格列表中移除一个或多个非通信存储系统而进行响应(其中非通信存储系统可以尝试这样做,但以相反的方式)的故障或其它触发事件的情况下才有必要。另一优点是,中介服务(800)可能不绝对可靠,并且对同步豆荚成员所提供的整体存储服务的可用性影响很小。例如,如果两个同步复制的存储系统各自每年故障一次,则除非在两个存储系统中的第一存储系统发生故障的确切时刻中介服务(800)不可用,否则第二存储系统应成功地中介以移除第一存储系统。简而言之,如果中介服务(800)至少在99%的时间内启动且可用,则该中介服务(800)在需要时不可用的概率变得非常低。在该示例中,中介服务(800)在关键时间不可用的可能性仅为100分之一(1%或更少),这可以将每年中断一次减少到每世纪中断一次。然而,为了减少中介服务(800)不可用的几率,可以周期性监视中介服务(800),以在中介服务一般不可用的情况下警告管理员,其中中介服务(800)还可以监视存储系统以在特定存储系统变得不可用的情况下生成警报。

在另一示例中,作为使用与豆荚的同步成员相关联的分区标识符的替代方案,中介服务(800)可以提供一次性中介竞争目标。具体地,每当豆荚的同步成员存储系统可能需要允许一个存储系统可能被其它存储系统分离的可能性时,可以建立中介竞争目标。例如,中介值表中的商定密钥可以一次设置为新值,其中为了赢得中介,存储系统将商定密钥设置为没有其它单独的竞争存储系统将使用的唯一值。在中介竞争之前,商定密钥可能不存在,或者如果存在,则其可被设置为某个商定前兆值,诸如UNSET值或空值等。在该示例中,如果密钥不存在,如果密钥处于UNSET状态,或者如果密钥被设置为等于当前值的值,则用以将密钥设置为特定值的操作成功,否则用以设置密钥的操作失败。一旦一组存储系统赢得中介,剩余组的存储系统就可以定义用于将来中介的新密钥。在该示例中,存储系统可以记录其在中介竞争之前使用的值,使得存储系统可以在获知其可能已赢得中介竞争之前在其故障并回复或重启的情况下再次使用该值。如果两个或更多个存储系统正在进行通信并且正一起与未进行通信的某一其它组存储系统竞争,则可以与其它通信存储系统共享该值,使得其中任何一个可以继续中介竞争,并可能在一些附加故障序列之后参与第二次中介竞争。例如,为了正确性,可能需要在竞争第二中介竞争目标的唯一值之前竞争或验证第一中介竞争目标。特别地,可能需要该序列,直到第二中介竞争目标可靠地分配给共享第一中介竞争目标的所有存储系统、并且所有存储系统知道其已被可靠地分配为止。此时,可能不继续需要在竞争第二中介目标之前首先竞争第一中介目标。

在一些示例中,中介服务(800)可以在由所中介的存储系统的组织或所有者以外的组织提供的计算机系统上进行管理。例如,如果供应商向客户销售两个存储系统,则供应商可以在供应商拥有或管理的数据中心中所提供的服务器上托管中介器,或者供应商可以与云服务提供商签约以托管服务。供应商还可以确保中介服务足够可靠,并与客户的任何故障区域不同。在一种情况下,在不排除其它云服务提供商的情况下,中介服务可以托管在Amazon Web Services

在一些情况下,中介服务(800)在存储系统尝试中介时可能不可用,并且以下方法提供了至少最终从这样的服务中断中恢复的处理。例如,如果第一组存储系统尝试通过中介服务来分离第二组存储系统、但第一组存储系统无法与中介服务(800)通信,则第一组存储系统无法完成分离操作并且无法继续服务于豆荚。在一些情况下,如果两组存储系统设法彼此重新连接以使得所有同步存储系统再次通信、但中介服务(800)仍然不可用,则两组存储系统可以同步并重新开始服务于豆荚。然而,在该示例中,一个或多个请求可能已被发送到中介服务(800)以改变分区标识符或改变与中介相关联的任何其它属性,并且存储系统中的任何一个都不能确定请求是否已被接收到并处理,其中确认响应可能已丢失。作为结果,在存在一组故障的存储系统或网络互连的情况下,如果中介服务(800)恢复在线,则没有存储系统可以确定针对分区标识符要声称哪个值。在这种场景中,优选使豆荚的服务在所有同步存储系统恢复在线并重新开始通信时或者在同步存储系统可以重新连接到中介服务(800)时恢复。在一个实现中,当所有同步存储系统重新连接时,同步存储系统都交换可能已发送到中介服务(800)的已知分区标识符值。例如,如果两个存储系统各自试图改变分区标识符值,其中一个存储系统尝试将分区标识符改变为例如1749137481890,并且另一存储系统尝试将分区标识符改变为例如87927401839,并且已知已由中介服务(800)确认的最后值为79223402936,则中介服务(800)当前可以存储这三个分区标识符值中的任何一个。作为结果,将中介分区标识符改变为新值的任何将来尝试可以提供这三个分区标识符中的任一个或全部,以尝试获得进行改变的权限。此外,改变分区标识符值的第四次尝试也可能遇到故障,从而得到可能需要被以后尝试又一中介的任何存储系统记住的第四个值。另外,如果任何存储系统成功地改变中介服务(800)分区标识符值,则该存储系统可以从任何同步存储系统和将来成为同步的任何存储系统中清除较旧的分区标识符值。

在另一示例中,中介服务(800)可以基于被布置用于各潜在将来竞争的唯一密钥进行中介。在这种情况下,同步存储系统可以同意使用新密钥。考虑到新密钥不能同时在所有存储系统上以原子方式设置、直到所有同步存储系统接收到并记录新密钥为止,所有存储系统应保留各存储系统在任何以前中介尝试中尝试设置的其旧密钥和值。在该示例中,任何较早的非竞争密钥和任何较早的密钥/值中介尝试可以连同用于将来中介尝试的新密钥一起在豆荚的所有同步存储系统之间循环并记录在每个这样的存储系统上。对于每个先前的非竞争密钥(不包括新密钥),这种交换也可以选择所有系统可用于竞争该密钥的单个商定值。在豆荚的所有同步存储系统已接收并记录了所有这些中介密钥和值(以及用于任何将来竞争的新商定密钥)之后,豆荚中的存储系统可能会同意丢弃较旧的密钥和值,以支持单个新密钥。注意,两个或更多个存储系统可能已尝试将相同的中介密钥设置为不同的值,并且所有这些值可被记录。如果在交换或接收过去中介尝试的所有这些中介密钥和密钥/值对的处理中存在故障,则一些存储系统可能尚未接收到并记录新的中介密钥和值,而其它存储系统可能已经接收到并记录新的中介密钥和值。如果在豆荚的所有同步存储系统可以彼此重新连接之前中介服务(800)变为可用,则豆荚的存储系统的子集可以尝试使用中介服务(800)以将另一存储系统从豆荚中分离。为了赢得中介,存储系统可以尝试将所有记录密钥设置为其记录值,并且如果这样做有效,则将新密钥设置为唯一值。在针对同一密钥记录了多于一个值的情况下,如果设置这些值中的任何一个成功,则该步骤成功。如果第一步骤(设置先前密钥)失败或第二步骤(将新密钥设置为新唯一值)失败,则参与该中介尝试的存储系统可能离线(保留其尝试为新密钥设置的值)。如果两个步骤都成功,则通信存储系统可以分离非通信存储系统并继续服务于豆荚。作为交换所有过去的密钥和值的替代方案,存储系统只能记录其尝试的密钥和值,而不会交换来自豆荚的其它存储系统的密钥和值。然后,如果同步存储系统与豆荚的其它同步存储系统(其中没有一个同步存储系统成功地与中介服务进行交互)重新连接,则同步存储系统可以交换一个新的中介密钥,然后交换它们都接收到并记录商定的新密钥的确认。如果故障阻止交换确认,则从未接收到新密钥的存储系统的将来中介尝试(到现在可用的中介服务)可以尝试重新声称其先前的密钥和值。已接收到新密钥但尚未接收到豆荚的所有存储系统已接收到该密钥的指示的存储系统可以声称其先前的中介密钥以及声称新密钥的值,首先是先前密钥,然后是新密钥。将来的中介尝试可能仍然失败,然后存储系统可能再次重新连接到其它同步存储系统,并可能再次不完全地交换新密钥,从而得到另一密钥。这增加了另一密钥。随着密钥与新密钥的一组不完全交换一起积累,存储系统将来的中介尝试可能按照记录的顺序重新声称其每个密钥以及它先前为这些密钥声称的任何值,直到该存储系统成功地声称了所有密钥的值或者该存储系统遇到声称密钥失败为止,此时它停止声称密钥并离线。

在另一示例中,在当前中介服务不可用的情况下,可以配置新的中介服务。例如,如果豆荚的所有同步存储系统正彼此通信、但不与当前中介服务通信,则豆荚可被配置有新的中介服务。这与选择新密钥或新中介值的先前算法类似,但新密钥被进一步配置为使用新中介服务,而不仅仅是与同一服务相关联的另一密钥。此外,如果在该操作期间存在故障,则与先前算法一样,一些系统可以竞争旧密钥,因此知道旧密钥和新中介服务的新密钥这两者的系统可以竞争新中介服务的新密钥。如果先前的中介服务永久不可用,则所有同步存储系统应最终彼此重新连接并在豆荚服务可以安全地重新开始之前完成新中介服务的交换以及与新中介服务相关联的任何密钥和值。

在另一示例中,用于解决故障的模型可以用于实现偏好规则,以使一个存储系统比其它存储系统有利。在该示例中,如果优选存储系统正在运行,则该优选存储系统保持运行并使其未与之通信的任何存储系统分离。此外,没有与优选系统进行验证通信的任何其它系统都会使自己离线。在该示例中,当非优选存储系统最终与优选存储系统重新连接时,如果优选存储系统尚未分离重新连接的存储系统,则这两个存储系统可以从两个存储系统处于同步的状态恢复和重新开始,而如果优选存储系统已分离重新连接的存储系统,则必须首先重新同步重新连接的存储系统以在其可以重新开始服务于豆荚之前使其对于豆荚同步。如果有,则优选存储系统可能不会对于提供高可用性有用,但是可能对于同步复制、特别是非对称同步复制的其它用途有用。例如,将豆荚从数据中心或园区中的中央大型存储系统镜像到更靠近应用服务器运行的较小(或许是较少管理的)存储系统的情况,诸如在架顶式配置中。在这种情况下,在网络故障的情况下或在架顶式存储系统发生故障时总是支持更大、更多管理的中央存储系统,而在集中管理的存储系统故障的情况下完全降低对豆荚的服务可以是有益的。这种架顶式存储系统可能只用于提高读取性能或减少数据中心存储网络上的负载,但是如果异步复制或其它数据管理服务仅在集中管理的系统上运行,则最好将业务重新路由到中央存储系统或停止服务并呼叫技术支持,而不是仅允许架顶式存储系统继续。此外,偏好规则可能更加复杂——可能存在或许与依赖于优选或所需存储系统的一定数量的附加存储系统耦合的两个或更多个此类“优选”存储系统。在该示例中,如果所有优选或所需存储系统都正在运行,则豆荚在线,如果其中一些存储系统没有正在运行,则豆荚关闭。这与群体的大小与投票成员的数量相同的群体模型类似,但比允许不到全部的投票成员的一般群体模型更容易实现。

在另一示例中,可以使用机制的组合,这在豆荚跨多于两个存储系统伸展时可以是有用的。在一个示例中,偏好规则可以与中介组合。在架顶式示例中,数据中心或园区中的较大中央存储系统本身可能会同步复制到第二位置的大型存储系统。在这种情况下,架顶式存储系统可能永远不会单独重新开始,并且可能更偏好于两个位置中的任何较大中央存储系统。在这种情况下,这两个较大存储系统可被配置为彼此间进行中介,并且可连接到保持在线的两个较大存储系统中的任一个的任何较小存储系统可以继续服务于其豆荚,并且不能连接到两个较大存储系统中的任一个(或者只能连接到对于豆荚来说离线的一个)的任何较小存储系统可以停止服务于豆荚。此外,偏好模型也可以与基于群体的模型组合。例如,三个位置的三个大型存储系统可以彼此之间使用群体模型,其中较小的卫星或架顶式存储系统没有任何投票,并且只有在其可以连接到在线的较大同步存储系统之一的情况下才工作。

在组合机制的另一示例中,中介可以与群体模型组合。例如,可能存在彼此间正常投票以确保两个存储系统可以安全地分离没有正在通信的第三存储系统的三个存储系统,而一个存储系统不能自行分离另两个存储系统。然而,在两个存储系统成功分离了第三存储系统之后,配置现在降至两个存储系统,这两个存储系统同意它们是同步的,并且同意第三存储系统分离的事实。在这种情况下,剩余的两个存储系统可能同意使用中介(诸如利用云服务)来处理附加存储系统或网络故障。这种中介和群体组合可以进一步扩展。例如,在四个存储系统之间伸展的豆荚中,任何三个可以分离第四个,但是如果两个同步存储系统正在彼此而不是与它们两者当前认为是同步的两个其它存储系统进行通信,则它们可以使用中介来安全地分离另两个系统。即使在五存储系统豆荚配置中,在四个存储系统投票决定分离第五个的情况下,如果剩余的四个存储系统被分成两等半,则它们可以使用中介,并且一旦豆荚降至两个存储系统,则它们可以使用中介来解决连续的故障。然后,五到三个可能会在三个之间使用群体,从而允许降至两个,如果发生进一步的故障,则剩余的两个存储系统会再次使用中介。这种一般的多模式群体和中介机制可以处理对称存储系统之间的群体或中介本身无法处理的另一些情形。这种组合可以增加故障或偶尔无法到达的中介器可以可靠地使用的情况的数量(或云中介器的情况,其中客户可能不完全信任这些中介器)。此外,这种组合更好地处理三个存储系统豆荚的情况,其中单独的中介可能在仅影响第一存储系统的网络故障时使得第一存储系统成功地分离第二和第三存储系统。这种组合还可以更好地一次处理影响一个存储系统的一系列故障,如三个到两个、然后到一个的示例中所述。这些组合之所以有效是因为同步和分离操作导致特定状态——换句话说,系统是有状态的,因为它是从分离到同步的过程,并且群体/中介器关系序列中的各级确保在每一点上,所有在线/同步存储系统同意豆荚的当前持久状态。这与在一些其它集群模型中不同,在这些集群模型中,仅使集群节点中的多数再次通信预期足以重新开始操作。然而,仍然可以加入偏好模型,其中卫星或架顶式存储系统从未参与中介或群体,并且只有在它们可以连接到确实参与中介或群体的在线存储系统的情况下才服务于豆荚。

在一些示例中,中介服务(800)或外部豆荚成员资格管理器可以位于与同步复制的存储系统(814、824)的故障区域不同的故障区域中。例如,对于两个存储系统豆荚(430),如果两个存储系统(814、824)通过例如物理位置(一个在城市,另一个在市郊,或者一个在连接到一个电网或因特网接入点的数据中心中,另一个在连接到不同电网或因特网接入点的另一数据中心中)被分离成不同的故障区域,则一般优选位于除这两个存储系统之外的某个其它故障区域中。作为一个示例,中介服务(800)可以位于城市的扩展城市区域的不同部分,或者连接到不同的电网或因特网接入点。然而,同步复制存储系统也可以位于同一数据中心内,以提供更好的存储可靠性,并且在这种情况下,可以考虑网络、电力和冷却区域。

图8所描绘的示例方法包括由第一存储系统(814)响应于检测到触发事件而请求(802)来自中介服务(800)的中介。在该示例中,触发事件可以是第一存储系统(814)和第二存储系统(824)之间的数据通信链路(816)中的通信故障,其中检测故障可以基于发起中断的硬件故障、基于确认传输的失败或者基于失败的重试尝试努力、或通过某种其它方法。在其它情况下,触发事件可能是同步复制租赁的到期,并且请求中介可能是尝试协调同步连接和活动租赁重新开始的一部分。这种租赁最初可以以多种不同方式根据多个存储系统中至少之一的定时信息来建立。例如,存储系统可以通过利用多个存储系统各自的定时信息协调或交换时钟,来建立同步复制租赁。在这样的示例中,一旦针对各存储系统协调了时钟,存储系统就可以建立同步复制租赁,该同步复制租赁延长了超过协调或交换时钟值的预定时间段。例如,如果在时间X协调各存储系统的时钟,则存储系统可以各自被配置为建立直到X+2秒为止都有效的同步复制租赁。关于协调或交换时钟的进一步说明可在美国临时申请62/518,071中找到,该申请通过引用而全文并入于此。

此外,第一存储系统(814)响应于检测到触发事件而请求(802)来自中介服务(800)的中介,这可以通过第一存储系统(814)的控制器检测触发事件并通过网络(854)向中介服务(800)发送请求(860)来实现。在一些示例中,中介服务(800)可以是向多个计算机系统提供对资源(诸如用于存储值的特定数据库条目等)的互斥访问的第三方服务。例如,中介服务(800)可以由云服务提供商所提供的数据库服务提供,由发出修改数据库的请求的主机计算机提供,或者由提供对资源的互斥访问的某个第三方服务提供,其中资源可以是存储、状态机或能够基于来自特定客户端的请求指示特定修改的某个其它类型的资源。在该示例中,在发送对中介的请求(860)之后,第一存储系统(814)等待(803A)来自中介服务(800)的指示,该指示用以指示积极中介结果(803B)或消极中介结果或响应的缺乏(803C)。如果第一存储系统(814)接收到消极中介结果或没有接收到响应(803C),并且如果尚未超过等待的时间的阈值量,则第一存储系统(814)可以继续(806)等待更多时间。然而,如果等待时间量超过阈值量,则第一存储系统(814)可以通过判断为另一计算机系统赢得中介并使其自己离线来继续(806)。在一些示例中,如以上所讨论的,对中介的请求可以作为原子比较设置操作而由中介服务(800)接收到,该原子比较设置操作尝试设置共享资源(852)的值,这也是从维持豆荚(430)的另一存储系统接收到的比较设置操作的目标,其中成功设置共享资源(852)的存储系统赢得中介。

图8中的示例还包括第二存储系统(824)响应于检测到触发事件而请求(810)来自中介服务(800)的中介。响应于检测到触发事件而请求(810)来自中介服务(800)的中介,这可以与在第一存储系统(814)上响应于触发事件而请求(802)中介的实现类似地实现。然而,在该示例中,与第一存储系统(814)的中介成功相反,第二存储系统(824)响应于向中介服务发送请求(862)而可以接收故障消息或对中介的请求(862)未成功的一些指示。

图8中的示例方法通过以下操作(804)继续:在第一计算机系统(814)接收到积极中介结果的指示(864)的情况下,响应于来自中介服务(800)的积极中介结果的指示(864),第一计算机系统(814)(而不是第二存储系统(824))处理(804)针对跨第一存储系统(814)和第二存储系统(824)同步复制的数据集(426)的数据存储请求。除了接收和处理针对实现豆荚(430)的数据集(426)的数据存储请求之外,数据集(426)的同步复制可以如参考美国临时申请62/470,172和62/518,071的图8A和8B所述地实现,上述申请全文并入于此。在该示例中,如先前参考图8所述,响应于积极中介结果的指示(864),第一存储系统(814)可被视为赢得中介的存储系统,并且第一存储系统(814)可以分离失去通信的存储系统。然而,在其它示例中,可以根据任何其它所述的中介方法或中介方法的组合来实现中介。

在一些示例中,定义对于同步复制数据集(426)的多个存储系统中的哪个存储系统赢得中介的偏好可以通过针对多个存储系统中的各存储系统指定延迟值来实现。例如,如果第一存储系统(814)被指定为优选存储系统,则可以为第一存储系统(814)指派在请求来自中介服务的中介之前的延迟值零(0)。然而,对于非优选存储系统,延迟值可能被指派为大于零,诸如3秒或者一般将导致优选存储系统因同步复制存储系统之间的通信丢失而赢得中介的某个其它值。

为了进一步说明中介解决方案,以下实例扩展了美国申请序列号62/470,172和62/518,071内所描述的用于实现中介的技术,上述文献全部并入于此,包括但不限于与以下内容有关的实现:在一定数量的存储系统之间同步复制的特定数据集的表示的“豆荚”、作为在名义上持有特定豆荚的同步复制品的存储系统的术语的“成员资格”、被认为相对于豆荚的数据集最新的数据集的成员副本的“同步”、以及为主动服务于豆荚的内容做好准备的存储系统的“在线”。

如以上引用的应用中所述,存储系统可以实现用于发现并响应于正在同步复制数据的存储系统之内和之间的故障的一组模型——其中这样的实现可以确保不发生分裂脑操作,分裂脑操作可能导致同步复制的数据集容易发生数据损坏。此外,以上引用的应用中的实施例描述了如下的实现,该实现包括:定义偏好;中介;群体策略;与豆荚相关联的存储系统的子集如何延迟或不自动触发中介,以对软偏好进行编码;用于更新中介器的模型;改变偏好;以及随着存储系统逐渐故障,从群体模型切换到偏好模型或中介模型。如下所述,这些实现中的一个或多个实现可以用作附加实现的基础。

在一些实现中,存储系统可以响应于不可用的中介器进行调整。例如,实现豆荚的被配置为使用中介以对故障进行响应的存储系统应商定中介服务并商定要用于中介的一组中介参数——诸如在进行中介时将使用的密钥。此外,可以诸如通过使用如下的模型来改变中介服务和中介参数,该模型通过中间步骤过渡,其中中间步骤在过渡到使用单个后续中介服务和中介参数之前使用先前和后续的中介器服务和参数这两者。在一些实现中,考虑到至少一些存储系统能够彼此通信,这些示例改变可以通过存储系统安全地进行直到完成,而不需要存储系统与中介服务进行通信。例如,如果配置用于中介的一个或多个存储系统诸如由于存储系统故障或网络故障而停止通信,则可以使用中介(可能包括多个中介器服务或中介参数的使用)来进一步继续,除非通信复原。

在一些实现中,如果在网络或存储系统故障时中介器服务不可用,则豆荚的操作可能失败或可能暂停,直到中介器服务变得再次可用为止或直到网络或存储系统故障修复或通信以其它方式复原为止。在一些示例中,对于单个存储系统情况,豆荚故障可能取决于豆荚内的存储系统和中介器服务(或至少对中介器服务的访问)这两者的故障——这可能被视为低概率、双故障事件。然而,如果存在大量的存储系统和大量的豆荚(其中这些豆荚使用相同的中介器服务),则中介器服务故障导致至少一个豆荚故障的概率大大增加。在这样的示例中,这种故障概率增加的问题可以使用用于通过豆荚中的存储系统监视其与各种中介器服务进行通信的能力来通过豆荚的中介启用存储系统对中介器服务进行运行时切换、并在发生任何问题的情况下切换豆荚的中介器服务的功能来解决,其中目标可以是在发生可能需要中介的任何问题之前并且在豆荚的在线存储系统仍正在彼此通信的同时完成切换。在一些示例中,切换到新的中介器服务可以快速进行;例如,如果周期性地或者响应于监视事件来检查中介器服务访问(其中示例周期可以是每30秒一次并且监视事件可以包括网络状况的变化),则可以响应一个或多个失败的健康检查或者一个或多个监视事件来切换中介器服务。继续该示例,响应于消极的周期检查和/或监视事件,使用特定中介器服务的任何豆荚可以切换到替代中介解决方案,其中在一些示例中,在中介器服务变为不可用或不可达的约一分钟内,可以发生切换。在该示例中,这种监视或对监视事件的响应可能会大大降低任何豆荚由于包括中介器服务故障的双重故障而故障时的易损性窗口。

在一些实现中,中介器服务可以在物理服务器或虚拟服务器上实现,其中给定中介器服务可以在内部集群,或者可以为了高可用性而分配有多个网络地址。在其它情况下,中介器服务可能是不使用任何内部形式的高可用性的简单、单节点服务。在一些示例中,还可以在诸如Amazon Web Services

在一些实现中,除了根据如何确定通过网络来命名和访问中介器服务之外,还可以根据中介器类型、访问方法或所提供的中介器原语的类型来描述特定中介器服务。例如,中介器服务可以提供因特网协议地址列表、可使用DNS查找的一个或多个名称、或者可在其它类型的目录中或使用其它目录服务查找的服务名称。此外,由云服务提供的一些现有web存储或数据库服务可以基于提供诸如条件PUT请求(诸如Amazon

在一些实现中,一组存储系统或豆荚可以配置有一组可能的中介器服务。在一些示例中,可选地或另外,存储系统或豆荚可被配置为使用可提供可能中介器服务的列表的中间中介器服务代理,其中这些列表也可以随着时间的推移而改变——例如,列表可以更新以包括新的中介器服务或者移除或替换可能过时或者可能被调度用于服务或被调度为离线的中介器服务。例如,供应商可以提供中介器代理服务,该中介器代理服务可以为存储系统提供基于公共云的中介器服务集,该基于公共云的中介器服务集分散在诸如由AWS

在一些实现中,被配置为使用中介的存储系统必须商定要使用哪个中介器服务,商定在中介之前要发生哪些事件或情形,并且商定调用中介器服务时的中介参数。此外,在存储系统豆荚的中介器服务或中介参数发生变化期间,实现豆荚的存储系统之间的中介器配置可能存在差异;然而,这种差异可能是过渡性的或暂时的。

在一些实现中,中介器服务的列表(诸如上述的列表)可以与由中介器服务代理确定的提议中介器服务的列表相耦合,其中所产生的列表可以形成存储系统或豆荚可以选择的潜在中介器服务的列表。例如,如果豆荚伸展以包括被配置用于豆荚的中介的第二存储系统或后续存储系统,则这些中介服务其中之一以及任何必要的中介参数可被选择并在这些中介启用存储系统之间通信。在该示例中,中介器服务应当从所有这些存储系统可用,并且如果存储系统不能商定通用的可用中介器服务,则伸展操作可能失败或可能延迟,直到条件改变并且存储系统能够同意或达成共识为止。

在一些实现中,持续地,豆荚的在线中介启用存储系统可以监视当前选定的中介器服务和潜在的替代方案。例如,周期性地或非周期性地,一个或多个存储系统可以监视可用中介器服务中的一个或多个,以判断中介器服务是否不可用或不可靠。在该示例中,如果与来自多个中介器服务中的给定的中介器服务通信的一个或多个尝试不成功,则可以判断为给定中介器服务不可用。此外,在该示例中,如果来自多个中介器服务中的给定中介器服务在某个先前时间窗内不可用,则即使给定中介器服务在当前时间点可用(特别是如果发现该给定中介器服务不可用、但是在某个最近的时间段内变得可用并随后再次不可用若干次),该给定中介器服务也被认为是不可靠的。在一些示例中,如果中介器服务对监视请求进行异常缓慢的响应,则该中介器服务也可能被认为是不可靠的。类似地,如果先前被判断为不可靠的中介器服务在随后的时间窗内迅速或可靠地进行响应,则该中介器服务可能被升级为可靠的。

在一些实现中,中介器服务监视还可能导致警报,该警报可以通知管理员或用户、通知公共云提供商、或通知供应商,使得可以修复中介器服务或者可以调整中介器服务代理的中介器服务列表以包括更可靠的替代方案。

在一些实现中,存储系统豆荚可以使用中介器服务参数和特性作为用于从多个可用中介器服务中选择中介器服务的基础。例如,如果已知豆荚成员存储系统的位置和中介器服务的位置(诸如因为通过网络分析检测到位置或因为显式配置了位置),则该信息也可用于中介器服务选择。例如,如果本地部署的同步复制存储系统跨多个数据中心进行操作,并且如果存储系统由给定数据中心标记、并且中介器由给定数据中心标记(或者如果标记存储系统可以用作中介器),则在多个数据中心中的两个或更多个数据中心之间伸展的豆荚可以自动使用来自豆荚伸展至的任何一个数据中心之外的数据中心的中介器服务(或作为中介器的存储系统)。

在一些实现中,如上所述,豆荚的中介启用存储系统可以监视和评价当前中介服务的可用性或可靠性。例如,如果服务是可达的并对监视请求进行响应,则该服务可被判断为可用。此外,在该示例中,中介器服务的健康或状况可由其它存储系统或其它工具监视,其中健康或状况可作为选择标准的一部分通信给存储系统。以这种方式,利用云或供应商托管的中介器监视服务,任何存储系统或监视服务可以跟踪可用中介器服务列表中的任何中介器服务的健康或状况结果。在一些示例中,可能与中介器服务代理集成的一些其它服务可以累积并根据请求提供健康或状况信息,或者可以以其它方式更新存储系统和豆荚,使得存储系统可以意识到给定中介器服务的任何问题。这种监视服务对于进行实际中介不是至关重要的,因此这种健康或状况数据可以以使其广泛可用的方式分配,只要它是合理的最新数据、而且没有报告超出给定误差容差的过分不正确或以其它方式不正确的结果即可。

在一些实现中,同步复制数据的存储系统可以实现多个不同中介器偏好。例如,给定要选择的中介器服务的列表,一组存储系统可以判断某些中介器服务是否在某种程度上优于其它中介器服务,或者它们可以完全排除一些中介器服务。此外,在一些示例中,还可以通过某种机制(诸如设置可进行偏好排序的值)或者通过将中介器服务标记为对于特定目的或对于一些存储系统或豆荚优先来明确地为存储系统豆荚或存储系统或特定IT部门或客户定义中介器服务偏好。

在一些实现中,关于中介器参数,中介器服务位置是一个有用的参数,如前所述。例如,如果中介器服务位置已知、并且存储系统的位置已知,则可以基于给定存储系统和中介器服务的相对位置来选择中介器服务的位置——其中较近或较快可访问的中介器服务可能优于较远的中介器服务。此外,在一些示例中,如果将存储系统添加到豆荚,则可以针对添加的存储系统重新评价中介器服务位置。在其它示例中,与数据中心有关的信息可以是其它参数,其中,如果豆荚包括两个中介启用存储系统、并且这两个存储系统位于单独的数据中心中,则可以选择位于第三数据中心的中介器服务。换句话说,可以基于在独立于实现存储系统豆荚的一个或多个数据中心的数据中心中实现来选择中介器服务,以确保在实现存储系统豆荚的一个或多个数据中心发生网络故障、电源故障或某种其它类型的数据中心故障的情况下的中介器服务的可靠性和/或可用性。然而,在其它情况下,如果豆荚的多个中介启用存储系统位于同一数据中心,则可以在同一数据中心内选择中介器服务,但其中可以考虑相对于中介器服务和存储系统的网络布局;例如,可以选择中介器服务,使得存储系统之间的通信故障不太可能与所有中介启用存储系统和所选中介器服务之间的通信故障重合。

在一些实现中,诸如在云或供应商提供的中介器服务的情况下,可以标记地理位置,或者可以探测网络的响应时间、网络跳数、或网络地址范围。云或供应商提供的中介器服务可以提供地理位置信息,而不需要太多开销。然而,在用于同步复制数据的本地存储系统实现的情况下,地理位置信息可以从网络信息(诸如IP地址或地理定位以及其它方法)中推断出。此外,同步复制一般不是在非常长的距离上实现的,因此作为豆荚成员的存储系统通常可能在一个地理位置内,并且可以以类似的延时和网络跳跃计数连接至该地理位置内的典型的云或供应商提供的中介器服务。

在一些实现中,如以上所讨论的,位置信息可能有多个方面。例如,数据中心信息、一个数据中心内的网络布局信息、数据中心内的电力和冷却区域信息、民用基础设施电网信息、数据中心复杂信息、城市区域描述、管理区域信息、控制政府实体信息等信息以及其它信息——其中中介器服务和存储系统可以利用这些和其它类型的位置信息的任何集合或子集进行标记。此外,在一些示例中,位置信息的任何数量的这些不同方面可以同时加以考虑,使得如果豆荚的中介启用存储系统似乎被某个特定参数彼此分开,则可以选择中介器服务以相对于每个中介启用存储系统的该特定参数独立。在一些情况下,位置信息的方面可以进行优先级排序。例如,两个存储系统可能位于不同的管理区域中,但可能不存在第三管理区域,即使存在第三电网。

在一些实现中,关于中介器参数,健康历史和预定停机时间可被视为选择中介器服务的基础。例如,如果可以预先预定实现中介器服务的计算环境的计划停机时间,则实现豆荚的存储系统可以有时间在停机时间之前切换到与被调度停机时间的中介器服务不同的中介器——其中存储系统可以在预定停机时间之后切换回,或者存储系统可以保持切换到中介器服务,直到另一事件提示另一次切换为止。

在一些实现中,选择中介器服务的因素可能基于用作中介器服务的主机的实体。例如,在本地,IT部门可能更偏好于本地实现的中介器服务,但如果合适的本地中介器服务不可用或处于离线状态(诸如用于维护),或者如果尚未配置合适的第三位置,则可以接受使用云或供应商提供的中介器服务。此外,在一些示例中,供应商可能偏好于让供应商的客户使用基于公共云的中介器服务,但可以让客户在公共云停止供应期间或为了改善中介响应时间(诸如因为云服务处于拒绝服务攻击之下或没有在诸如中国或南极等的地理区域中运行的数据中心)而使用后端的、供应商托管的中介器服务。

在一些实现中,考虑到来自任何源(显式配置、中介器服务代理等)的可用且已配置的中介器服务的列表,一些中介器服务可能因不匹配或不符合规定要求(例如,豆荚的中介启用存储系统位于单独的数据中心,但特定中介器服务位于这些数据中心其中之一内)或被调度停机时间而被免于考虑用作中介器。在一些示例中,其它中介器服务可以基于以下各项中的一个或多个来进行优先级排序:健康或健康历史、根据一个或多个偏好或要求的适用性、预定维护、地理位置、用以到达给定中介器服务的网络跳数、中介器服务的网络延时、网络子网等。

在一些实现中,关于选择中介器服务,可以对潜在中介器服务的当前列表进行评价,并且可以选择与一个或多个要求匹配的最合适的中介器服务,或者选择可以匹配最多数量的高优先级要求。如前所述,潜在中介器服务的列表可以随时或响应于与中介器服务状况的改变或更多可用中介器服务的增加相对应的事件而进行重新评价。

在一些实现中,将来的中介可能只对一个豆荚是必要的,在该豆荚中,当前存在多于一个活动在线的中介启用存储系统。在一些示例中,先前的(或许是中介的)故障可能已经导致一些存储系统变得对于豆荚来说离线。在这样的示例中,直到这样的存储系统其中之一恢复在线为止,离线存储系统可以如何与特定中介器服务相关可能不重要。此外,在该示例中,为了使存储系统恢复对于豆荚来说在线并且重新开始是中介启用,对于豆荚来说已离线的存储系统可首先需要确保它具有对在存储系统之间共享的合适中介器服务的可靠访问,并且其中该中介器服务可从豆荚的现有在线的中介启用存储系统可靠地访问。在该示例中,作为使附加的中介启用存储系统回到在线的一部分,这可能会导致现有在线的中介启用存储系统切换到新的中介器。在一些示例中,简并的情况是,故障或故障序列导致豆荚的恰好一个中介启用存储系统保持在线,在这种情况下,不再需要中介,直到另一个中介启用存储系统恢复在线为止。

在一些实现中,在存储系统未配置为使用中介器服务的情况下,存储系统可以针对豆荚保持在线并继续同步复制数据,或者可以在离线后恢复在线后与豆荚再结合——其中存储系统基于能够与其它存储系统进行通信来保持在线和同步。然而,在该示例中,如果存储系统不能彼此通信,则存储系统可能保持离线,直到重新建立通信链路为止。此外,在该示例中,如果中介器服务不可用或存储系统未配置为使用中介器服务,则存储系统可以实现一个或多个群体协议,如前所述。此外,在该示例中,可以添加并非豆荚当前成员的附加存储系统,以扩展参与一个或多个群体协议的存储系统集。

在一些实现中,存储系统可以响应于中介器可靠性改变或中介器可用性改变而切换到替代模型。在该示例中,存储系统可以响应于第一中介器服务变得不可用或不可靠而切换到替代中介器服务——这是其它可能响应中的一个响应。例如,对中介器服务变得不可用或不可靠的另一响应是切换集群可用性模型。继续该示例,在先前引用的应用中建议其它可用性模型,包括群体模型和偏好模型。在一些情况下,特别适用的替代模型是偏好模型,因为对适当中介器服务变得不可用的高效响应使得豆荚的存储系统商定出将在稍后的故障阻止豆荚的存储系统进行通信的情况下将保持对于豆荚来说在线的优选存储系统。在该示例中,只要在故障之前可靠且充分地通信向偏好模型的这种转变(否则将被中介),该偏好模型就可以安全地操作。作为更具体的示例,对于具有两个中介启用存储系统的豆荚,如果发现中介器服务不可用或不可靠,则可以选择这两个存储系统其中之一,并且如果两个存储系统随后停止通信,则优选存储系统可以保持在线以用于维护或服务于豆荚(考虑到优选存储系统正在正确操作),而另一个非优选的存储系统可能对于豆荚来说离线(无论该豆荚是否正在正确操作以及其它存储系统是否正在正确运行)。总结该示例,可以重新评价这种情形,直到中介器服务的继续监视指示可以再次为存储系统选择合适的、可用的并且足够可靠的中介器服务为止。

在一些实现中,如果存在用于实现豆荚的多于两个中介启用存储系统,并且至少两个存储系统仍然可以可靠地访问共同的中介器服务、但是一个或多个存储系统无法访问,则附加存储系统无法可靠地访问中介器服务可能不会导致切换到偏好模型或其它模型,因为仅这两个系统之间中介可能被认为是足够可靠的,并且优于切换到偏好模型。继续该示例,即使在豆荚的仅一个中介启用存储系统能够访问中介器服务的情况下,中介也可以保留,而不是切换到偏好模型,这基本上意味着如果存在故障,除非并直到情形得到补救为止,否则只有与中介器服务通信的存储系统可以接管。在该示例中,与中介器服务通信的存储系统接管可以是优选的,其中即使在任何合适的中介器服务的完全不可用性导致豆荚切换到优选存储系统之后,豆荚也可以在至少一个存储系统(而不是等待多个存储系统或所有存储系统)可靠地访问中介器服务之后切换回中介模型。在该示例中,考虑到中介器服务保持可用并允许其它存储系统在情形得到修复的情况下(甚至在所有存储系统都关闭、并且一些存储系统利用修复后的中介器服务连接恢复的情况下)赢得中介,仅一个存储系统能够进行中介不比偏好模型差。

在一些实现中,响应于豆荚的当前活动和在线的中介启用存储系统检测到豆荚的一些或所有先前可靠可用和合适的中介器服务不再可靠或可用,并且响应于选择切换到偏好故障处理模型,至少直到条件部分或完全恢复为止,豆荚的存储系统可以使用各种模型来决定偏好是否应被指派至豆荚的一个存储系统或其它存储系统。在一些情况下,可以基于与以下各项相对应的一个或多个因素来选择不同模型:主机连接、主机位置、当前负载、主机与豆荚内的单个存储系统上的单个存储控制器或网络适配器之间的网络路径或延时等。在其它情况下,可以显式地配置回退偏好,或者可以跟踪与主机上运行的应用和服务有关的可用信息及其适应对一个存储系统或其它存储系统的访问丢失的能力。

此外,在一些示例中,响应于从中介可用性切换到优选可用性,可以将改变通信至主机端装置、应用或数据中心管理基础设施,这可能导致某些应用或服务在周围移动以匹配新存储系统偏好。在其它情况下,一些应用或服务可被配置为使得当它们有访问问题时,它们还将自己切换到与豆荚的优选存储系统相关联的位置或访问路径。以这种方式,在该示例中,这种与取决于存储数据的其它应用和服务的双向通信对于处理这些应用和服务可以是有益的。

在一些实现中,豆荚的存储系统可以实现用于管理灾难恢复的各种技术。例如,用于配置主机、应用和存储系统以进行灾难恢复的模型要具有在第一位置中针对一组应用和服务一起运行的一组存储系统和服务器,但是当有足够灾难性的故障(泛洪、大范围电网故障和恐怖分子是通常引用的示例,但是更常见的是人为错误和网络隔离)使得第一位置不再能够服务于关键应用和服务时,过程适当地将存储系统、应用和服务一起带到第二位置。在一些实现中,用于处理这种情形的技术是根据某种更高级别的监视和高可用性服务将存储可访问性以及应用和服务从第一位置迁移到第二位置,并响应于更高级别的监视和高可用性服务判断为这种迁移是必要的来进行所有迁移。在一些环境中,这种改变可以是通过经由控制接口而不是自动地进行人为干预来触发的。

在一些实现中,存储是访问迁移的一个特别重要的方面,因为如果服务意外地在两个位置运行,存储特别容易损坏或无法恢复。响应于较高级别的服务触发将存储访问迁移到第二位置,用于在损坏风险较小的情况下处理在两个位置中运行的服务的一个示例是使用快照。在该模型中,豆荚的在第二位置处的存储系统可被配置为使得它不会中介、参与群体或偏好于自己接管豆荚。在该示例中,如果豆荚仅包括两个存储系统(其中一个存储系统位于第一位置处,而另一存储系统位于第二位置处),则可能优选第一位置。继续该示例,第一位置(或第一位置和某一第三位置)可能以其它方式包括豆荚的多个存储系统(该多个存储系统可被配置为在其间中介或使用群体(或可能偏好于这些存储系统的子集)),但第二位置处的存储系统不会参与群体,并在阻止第二位置处的存储系统与豆荚的其它在线、同步存储系统进行通信的故障的情况下将变得离线。

继续该示例,在该模型中,第二数据中心的存储接管可能涉及制作任何豆荚的逻辑副本以形成新的豆荚,其中新的豆荚和存储实体(卷、文件系统、对象存储等)具有足够不同的身份,使得每个这样的豆荚的逻辑副本不会被主机、应用或服务与可能仍在第一(或其它)位置运行的任何这样的存储实体和豆荚混淆。此外,在美国专利申请编号<3215US02的参考编号>内包括用于拷贝豆荚(包括在逻辑上拷贝对于豆荚来说当前离线的存储系统上的豆荚)的示例模型,该申请的全部内容并入于此。

在一些示例中,如果网络故障或通信故障恢复,然后如果对于第一位置和第二位置之间的存储系统,原始豆荚可以恢复在线,则此时,可以将豆荚的逻辑副本逻辑拷贝回原始豆荚作为协调故障恢复操作的一部分,该协调故障恢复操作首先确保在逻辑地拷贝回豆荚之前,受影响的主机、应用和服务在第一位置(和其它位置)离线。例如,在该示例中,这可以暂时利用异步或周期性复制,或者可以使用诸如同步复制重新同步方法等的模型以在使主机、应用和服务故障恢复到第一位置(以及可能的其它位置)之前使原始豆荚最新。此外,在该示例中,在逻辑上拷贝回原始豆荚之前,可以对该豆荚进行快照,以确保更新不会丢失。

继续该示例,第二位置的豆荚的逻辑副本也可用于测试(诸如用以确保所有关键数据集被正确地复制到第二位置的过程的一部分),或用于数据集的逻辑副本的其它用途(诸如运行报告),或用于将生产数据的副本用于在逻辑上与生产位置隔离的开发或研究目的。此外,在一些情况下,作为制作和呈现豆荚的合适副本的一部分而可能必须改变的身份可以包括光纤通道标识符、网络地址、iSCSI IQN、SCSI序列号、卷标识符、豆荚标识符、文件系统唯一标识符、文件系统导出名称或对象池/桶标识符。在一些情况下,即使改变了基础标识符,名称也可以保持不变(这可以足以确保多路径磁盘驱动程序不会被混淆)。在其它情况下,名称也可能被改变,诸如因为接管脚本和过程被写入以作为进行接管的一部分而为存储相关实体使用新名称。

在一些实现中,存储系统可能将不同的模型应用于跨越豆荚的一致性组。例如,在一些情况下,一致性数据集可能包含多于一个豆荚,或者可能跨越在不同或重叠的存储系统集上操作的豆荚。在该示例中,如果适当地维持跨越豆荚的数据集在作为故障处理的一部分而保持对存储系统的访问时应考虑位置(诸如因为一组应用组件和服务将数据存储到一组豆荚的各个位置内的多于一个存储系统),则可能需要某种技术来确保自动化在线/离线决策是对于多个豆荚以及对于这多个豆荚的多个存储系统来说是位置一致的。在这种情况下,一个位置中的存储系统可以协调中介、中介器服务器的选择、群体处理或从中介到故障偏好的任何切换。

继续该示例,在一种情况下,位于第一位置L

此外,在偏好模型的情况下,所有三个豆荚的优选存储系统可以相同地配置,例如,每个豆荚偏好于第一位置中的存储系统。只要第二位置中的第一存储系统故障预期不会导致第二位置中的第二存储系统和第三存储系统也离线,则该解决方案就可以工作。

在一些实现中,中介或群体模型可能更加复杂。例如,在中介或群体模型的情况下,如果单独的决策可能导致不同的结果,则豆荚可能无法彼此单独作出决策。一般来说,豆荚本身并不足以仅共享相同的中介器服务或相同的群体配置。在中介器服务的情况下,可能在第一位置的存储系统之间共享密钥和第一值,而在第二位置的存储系统之间共享相同的密钥和不同的第二值,使得在故障时成功中介的第一存储系统可以确保只有同一位置的其它存储系统才能成功,因为它们使用相同的密钥和值进行中介。然而,在这样模型中,可靠地切换中介器更加复杂,在一个豆荚内成功地使用一次中介之后,随后使用中介来处理后续故障需要新的密钥/值组合(取决于中介模型),该新的密钥/值组合然后必须再次交换。

在一些实现中,作为对前一示例的替代,第一位置中的伸展豆荚的存储系统可以商定单个存储系统针对该第一位置上的这些存储系统来参与中介或参与群体协议,其中这些存储系统预期将针对伸展豆荚一致地处理故障。此外,在该示例中,其它位置的存储系统也同样可以商定其存储系统中的特定存储系统,以代表这些其它位置参与中介或参与群体协议。

在一些实现中,某个位置处的存储系统可以使用几种技术中的任何一种来协调哪个存储系统将中介或参与群体协议,而在一些情况下,可以指派一个存储系统来实现这一点。例如,存储系统可以在其自身之间进行投票。在其它示例中,位置内的存储系统可以将其自身之间的中介用于在该位置内或通过云服务或供应商提供的服务而运行的中介器服务,以确定谁可以代表该位置进行中介。一般来说,可在任何一个时间得到一个商定的要使用的存储系统的任何模型可以工作。在一些情况下,用于改变中介器的协议是可用于调整这些改变的模型的示例。

一般地,除存储系统以外的计算装置可以代表应一致地操作的某个位置处的存储系统来参与中介或群体协议。在一些示例中,作为替代,可以存在在某个位置处运行的服务,该服务处理针对该位置而言一致的多位置协调。以这种方式,在该示例中,可以登记依赖于与代表一组豆荚的共享位置相关的协调一致性的存储系统,以通过该服务进行协调。在该示例中,服务可以使用高可用性协议、或位置内的中介或群体来管理自身,并且服务还可以在中介或群体交换时(诸如通过使用位置内的基于PAXOS或RAFT的模型来)使用可靠的分布式协商模型。在一些情况下,该处理可以利用在位置中运行的足够可靠的集群共享文件系统。

为了进一步说明,图9阐述了例示根据本发明的一些实施例的供存储系统在不同中介器服务之间进行切换的步骤的流程图。尽管描绘得不太详细,但图9所描绘的存储系统(814)可以与以上参考图1A~1D、图2A~2G、图3A~3B和图4~8或其任意组合所述的存储系统类似。事实上,图9所描绘的存储系统(814)可以包括与上述的存储系统相比相同、更少或附加的组件。此外,这里描述的实施例可以与用于切换中介器、在中介器模型之间切换的实施例以及在美国专利申请编号<3252US02的参考编号>内所描述的与中介有关的其它恢复机制中的一个或多个相组合,该申请的全部内容出于所有目的并入于此。以下示例由上述示例得出,其包括如下的示例,该示例描述了如果中介器完全故障或变得不那么可靠并且考虑到存储系统彼此通信,则存储系统可以协调中介器服务的变化或对不同故障响应模型的变化——其中考虑到这种变化是在存储系统或存储系统之间的网络互连发生故障之前协调的,豆荚可以没有任何间断地继续可用。简言之,在一些示例中,在预测故障时,实现豆荚的存储系统可以在故障之前在故障响应模型之间(包括在不同中介器服务之间)预先地进行切换,以避免豆荚不可用。

在图9所描绘的示例方法中,在初始状态下,存储系统(814)可以具有在一个或多个存储系统之间以及在第一中介器服务(952)之间操作的一个或多个通信链路,其中至少一些存储系统被配置为请求来自中介器服务(952)的中介。换句话说,如以上所讨论的,在一些示例中,一些但并非所有的正在同步复制数据集的存储系统启用中介。

图9所描绘的示例方法包括在多个存储系统中的一个或更多个存储系统之间确定(902)第一中介器服务(952)的可用性的变化,其中,多个存储系统中的一个或更多个存储系统被配置为请求来自第一中介器服务的中介。在多个存储系统中的一个或更多个存储系统之间确定(902)第一中介器服务(952)的可用性可以如以上关于用于确定何时中介器服务不再响应、预期不再响应、不再可达或已开始在阈值响应时间之外进行响应的不同技术所述地实现。

图9所描绘的示例方法还包括在多个存储系统之间并且响应于确定(902)第一中介器服务(952)的可用性的变化而通信(904)第二中介器服务(954)以响应于故障而使用。在多个存储系统之间并且响应于确定(902)第一中介器服务(952)的可用性的变化而通信(904)第二中介器服务以响应于故障而使用可以如以上关于供豆荚的一个或更多个存储系统在彼此间通信新中介器服务用的不同技术所述地实现。

图9所描绘的示例方法还包括根据第一中介器服务(952)的可用性的变化从第一中介器服务(952)切换(906)至第二中介器服务(954)。根据第一中介器服务(952)的可用性的变化从第一中介器服务(952)切换(906)至第二中介器服务(954)可以如以上关于用于在中介器服务之间进行切换的不同技术所述地实现。

以这种方式,如果给定中介器服务(其当前为商定的中介器服务)在存储系统之间的中介变得不可靠,则中介存储系统的集合可以在当前中介器服务完全故障而不是仅变得不太可靠之前切换到替代中介器服务。

为了进一步说明,图10阐述了例示根据本发明的一些实施例的存储系统在不同中介器服务之间进行切换的步骤的流程图。尽管描绘得不太详细,但图10所描绘的存储系统(814)可以与以上参考图1A~1D、图2A~2G、图3A~3B和图4~8或其任意组合所述的存储系统类似。事实上,图9所描绘的存储系统(814)可以包括与上述的存储系统相比相同、更少或附加的组件。

图10所描绘的流程图与图9所描绘的流程图的类似之处在于,图10所描绘的流程图包括:在多个存储系统中的一个或更多个存储系统之间确定(902)第一中介器服务(952)的可用性的变化,其中,多个存储系统中的一个或更多个存储系统被配置为请求来自第一中介器服务的中介;在多个存储系统之间并且响应于确定第一中介器服务的可用性的变化,通信第二中介器服务(954)以响应于故障而使用;以及根据第一中介器服务(952)的可用性的变化,从第一中介器服务(952)切换(906)至第二中介器服务(954)。

然而,图10所描绘的流程图还包括基于一个或多个因素(1052)从中介器服务的列表(1054)中选择(1002)第二中介器服务(956)。基于一个或多个因素(1052)从中介器服务的列表(1054)中选择(1002)第二中介器服务(956)可以如以上关于选择替代中介器服务所述地实现,这由中介器服务选择(1056)指示并且包括基于以下各项中的一个或多个来选择替代中介器服务:地理接近度、可靠性信息、用以到达给定中介器服务的网络跳数、通信响应时间、可用性区域、预定义优先级信息、管理区域信息、数据中心复杂信息、数据中心信息、存储系统和给定中介器服务之间的网络布局、中介器服务实现的城市区域描述或向给定中介器服务供电的电网信息。

读者将理解,上述的方法可以通过上述的存储系统的任何组合来实现。此外,上述的任何存储系统也可以与由诸如Amazon

为了便于将数据集(或诸如虚拟机等的其它被管理对象)同步复制到包含云服务提供商所提供的存储的存储系统、并进行本应用中所描述的所有其它功能的能力,可以对云服务提供商所提供的处理资源执行用于执行各种存储系统功能的软件模块。这种软件模块可以例如在诸如块装置Amazon

读者将理解,在豆荚中的数据集或其它被管理对象保留在内部存储系统中并且豆荚伸展以包括由云服务提供商提供资源的存储系统的情形中,数据集或其它被管理对象可以作为加密数据被传送到由云服务提供商提供资源的存储系统。这种数据可以由内部存储系统加密,使得被存储在云服务提供商所提供的资源上的数据被加密,但云服务提供商没有加密密钥。以这种方式,存储在云中的数据可能更加安全,因为云无法访问加密密钥。类似地,可以在数据最初写入内部存储系统时使用网络加密,并且加密数据可被传送到云,使得云继续无法访问加密密钥。

通过使用包含云服务提供商所提供的存储的存储系统,灾难恢复可以作为服务提供。在这样的示例中,数据集、工作负载和其它被管理对象等可以驻留在内部存储系统中,并且可以同步复制到由云服务提供商提供资源的存储系统。如果内部存储系统发生灾难,则由云服务提供商提供资源的存储系统可以接管对针对数据集的请求的处理,辅助将数据集迁移到另一存储系统,等等。同样,由云服务提供商提供资源的存储系统可以用作按需的辅助存储系统,该辅助存储系统可以在大量利用的时间段期间或在以其它方式需要时使用。读者将理解,可以设计实例化这里所述的许多功能的用户接口或类似机制,使得启用灾难恢复作为服务可以像进行单次鼠标点击那样简单。

通过使用包含云服务提供商所提供的存储的存储系统,高可用性也可作为服务提供。在这样的示例中,可驻留在内部存储系统上的数据集、工作负载、其它被管理对象可以同步复制到由云服务提供商提供资源的存储系统。在这样的示例中,由于到云的专用网络连接(诸如AWS直接连接等),可以实现从不同位置到AWS的亚毫秒延时。因此,可以在伸展的集群模式下运行应用而无需预付巨大支出,并且可以实现高可用性而无需购买和维持多个位于不同位置的内部存储系统,等等。读者将理解,可以设计实例化这里所述的许多功能的用户接口或类似机制,使得启用应用可以通过进行单次鼠标点击而扩展到云中。

通过使用包含云服务提供商所提供的存储的存储系统,系统复原也可以作为服务提供。在这样的示例中,可驻留在内部存储系统上的数据集、被管理对象和其它实体的时间点副本可以同步复制到由云服务提供商提供资源的存储系统。在这样的示例中,如果需要将存储系统复原回到特定时间点,则由云服务提供商提供资源的存储系统中所包含的数据集和其它被管理对象的时间点副本可用于复原存储系统。

通过使用包含云服务提供商所提供的资源的存储系统,存储在内部存储系统上的数据可以本机传输到云中,以供各种云服务使用。在这样的示例中,当存储在内部存储系统中时处于其本机格式的数据可以被克隆并转换为可用于各种云服务的格式。例如,当存储在内部存储系统中时处于其本机格式的数据可被克隆并转换为Amazon

读者将理解,应用可以在上述的任何存储系统上运行,并且在一些实施例中,这种应用可以在主控制器、辅控制器或甚至这两个控制器上同时运行。这种应用的示例可以包括进行后台分批数据库扫描的应用以及对运行时数据进行统计分析的应用等。

可以通过以下声明来进一步描述本发明的优点和特征:

1.一种在同步复制数据的多个存储系统之间切换中介器的方法,所述方法包括:在所述多个存储系统中的一个或更多个存储系统之间确定第一中介器服务的可用性的变化,其中,所述多个存储系统中的一个或更多个存储系统被配置为请求来自所述第一中介器服务的中介;在所述多个存储系统之间并且响应于确定所述第一中介器服务的可用性的变化,通信第二中介器服务以响应于故障而使用;以及根据所述第一中介器服务的可用性的变化,从所述第一中介器服务切换至所述第二中介器服务。

2.根据声明1所述的方法,其中,所述第一中介器服务和所述第二中介器服务在所述存储系统可用的多个中介器服务中,以及其中,来自所述多个中介器服务中的若干中介器服务正在云服务中的区域之间进行操作。

3.根据声明2或声明1所述的方法,其中,所述存储系统可用的所述多个中介器服务由中介器服务代理提供。

4.根据声明3、声明2或声明1所述的方法,还包括:基于一个或多个因素,从中介器服务的列表中选择所述第二中介器服务。

5.根据声明4、声明3、声明2或声明1所述的方法,其中,所述一个或多个因素包括以下各项中的一个或多个:地理接近度、可靠性信息、用以到达给定中介器服务的网络跳数、通信响应时间、可用性区域、预定义优先级信息、管理区域信息、数据中心复杂信息、数据中心信息、所述存储系统和给定中介器服务之间的网络布局、中介器服务实现的城市区域描述、以及向给定中介器服务供电的电网信息。

6.根据声明5、声明4、声明3、声明2或声明1所述的方法,其中,所述可用性的变化包括以下各项中的一个或多个:通信响应时间的降低以及响应的缺乏。

7.根据声明6、声明5、声明4、声明3、声明2或声明1所述的方法,其中,确定所述可用性的变化包括:判断为所述第一中介器服务的预定停机时间将导致所述第一中介器服务不可用。

示例实施例主要是在全功能计算机系统的上下文中描述的。然而,本领域技术读者将认识到,本发明也可以体现在计算机程序产品中,该计算机程序产品被设置在计算机可读存储介质上以与任何合适的数据处理系统一起使用。这种计算机可读存储介质可以是机器可读信息的任何存储介质,包括磁介质、光介质或其它合适的介质。这种介质的示例包括硬盘驱动器中的磁盘或软磁盘、光驱用的致密盘、磁带以及本领域技术人员将想到的其它介质。本领域技术人员将立即认识到,具有合适编程手段的任何计算机系统将能够执行计算机程序产品中所体现的方法的步骤。本领域技术人员还将认识到,尽管本说明书中所描述的一些示例实施例面向计算机硬件上所安装和执行的软件,但是作为固件或硬件而实现的可选实施例也在本发明的范围内。

实施例可以包括系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质(或媒介),该计算机可读存储介质(或媒介)上具有用于使处理器执行本发明的方面的计算机可读程序指令。

计算机可读存储介质可以是可保留和存储指令以供指令执行装置使用的有形装置。计算机可读存储介质可以例如是但不限于电子存储装置、磁存储装置、光存储装置、电磁存储装置、半导体存储装置或上述的任何合适组合。计算机可读存储介质的更具体实例的非详尽列表包括以下各项:便携式计算机软磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪存存储器)、静态随机存取存储器(SRAM)、便携式致密盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、存储有指令的机械编码装置(诸如穿孔卡或凹槽中的凸起结构等)、以及上述的任何合适组合。如这里所使用的计算机可读存储介质本身不应被理解为诸如以下的暂时信号:无线电波或其它自由传播的电磁波、通过波导或其它传输介质传播的电磁波(例如,通过光纤电缆的光脉冲)、或通过电线传输的电信号等。

这里描述的计算机可读程序指令可以从计算机可读存储介质下载到相应的计算/处理装置,或者经由网络(例如,因特网、局域网、广域网和/或无线网络)下载到外部计算机或外部存储装置。网络可以包括铜传输线缆、光传输光纤、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。各计算/处理装置中的网络适配器卡或网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令以存储在相应计算/处理装置内的计算机可读存储介质中。

用于执行本发明的操作的计算机可读程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言(包括诸如Smalltalk或C++等的面向对象的编程语言、以及诸如“C”编程语言或类似编程语言等的常规过程编程语言)的任意组合编写的源代码或目标代码。计算机可读程序指令可以完全在用户的计算机上执行,部分在用户的计算机上执行,作为独立的软件包执行,部分在用户的计算机上且部分在远程计算机上执行,或者完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可以通过任何类型的网络(包括局域网(LAN)或广域网(WAN))而连接到用户的计算机,或者可以(例如,使用因特网服务提供商通过因特网)连接到外部计算机。在一些实施例中,包括例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA)的电子电路可以通过利用计算机可读程序指令的状态信息来执行计算机可读程序指令以使电子电路个性化,从而进行本发明的方面。

这里参考根据本发明的一些实施例的方法、设备(系统)和计算机程序产品的流程图和/或框图来描述本发明的方面。应当理解,流程图和/或框图中的各框以及流程图和/或框图中的框的组合可以通过计算机可读程序指令来实现。

这些计算机可读程序指令可被提供给通用计算机、专用计算机或其它可编程数据处理设备的处理器以产生机器,使得这些指令在经由计算机或其它可编程数据处理设备的处理器执行时创建用于实现流程图和/或框图的框中所指定的功能/动作的手段。这些计算机可读程序指令也可以存储在计算机可读存储介质中,该计算机可读存储介质可以指示计算机、可编程数据处理设备和/或其它装置以特定方式运行,使得存储有指令的计算机可读存储介质包括包含用于实现流程图和/或框图的框中所指定的功能/动作的方面的指令的制品。

计算机可读程序指令也可被加载到计算机、其它可编程数据处理设备或其它装置上,以使得在计算机、其它可编程设备或其它装置上进行一系列操作步骤,从而产生计算机实现的处理,使得在计算机、其它可编程设备或其它装置上执行的指令实现流程图和/或框图的框中所指定的功能/动作。

图中的流程图和框图例示根据本发明的各种实施例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。在这方面,流程图或框图中的各框可以表示包括用于实现指定逻辑功能的一个或多个可执行指令的模块、段或指令的一部分。在一些可选实现中,框中所标注的功能可能不按图中所标注的顺序发生。例如,连续示出的两个框实际上可以基本上并发执行,或者这些框可以有时以相反的顺序执行,这取决于所涉及的功能。还应当注意,框图和/或流程图的各框、以及框图和/或流程图中的框的组合可以由用于进行指定功能或动作或执行专用硬件和计算机指令的组合的专用的基于硬件的系统实现。

读者将理解,这里所述的步骤可以以各种方式执行,并且无需特定排序。根据以下描述将进一步理解,可以在不偏离本发明的真正精神的情况下在其各种实施例中进行修改和变化。本说明书中的描述仅仅是为了例示目的,而不应被解释为限制性意义。本发明的范围仅通过以下权利要求的语言来限制。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号