CN107111631A - 粒度同步/半同步架构 - Google Patents
粒度同步/半同步架构 Download PDFInfo
- Publication number
- CN107111631A CN107111631A CN201580059310.3A CN201580059310A CN107111631A CN 107111631 A CN107111631 A CN 107111631A CN 201580059310 A CN201580059310 A CN 201580059310A CN 107111631 A CN107111631 A CN 107111631A
- Authority
- CN
- China
- Prior art keywords
- file system
- change
- request
- storage object
- system requests
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1095—Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
- G06F16/184—Distributed file systems implemented as replicated file system
- G06F16/1844—Management specifically adapted to replicated file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/065—Replication mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
可以在群集式存储环境中以使用存储虚拟化的存储解决方案中的逻辑存储对象的粒度来提供数据一致性和可用性。为了保证数据的跨不同存储单元的一致性,跨不同存储单元执行同步。通过从主逻辑存储对象向次逻辑存储对象传播对数据的改变来跨不同群集中的存储单元同步该改变。为了在维持性能之时满足最严格的RPO,改变请求在被发送给主控主逻辑存储对象的文件系统之前被截获,并且被传播给与次逻辑存储对象关联的不同管理存储单元。
Description
相关申请的交叉引用
本申请要求对通过引用而并入于此、名城为“GRANULAR SYNC/SEMI-SYNCARCHITECTURE”并且提交于2014年8月29日的第14/473,621号美国专利申请的优先权。
技术领域
本公开内容的方面总体上涉及分布式存储领域,并且更具体地涉及一种用于跨分布式存储装置来同步数据的架构。
背景技术
企业无论是维护客户数据还是它们自己的数据都需要总是可用或者高度地可用的数据和对该数据的保护。为了支持这些需求,数据经常跨多个地点中的多个存储系统驻留,这些地点经常大距离地隔开。这些地点被大距离隔开的原因之一是避免对数据可用性有冲击的单个灾难。用来定义可用性要求的度量包括恢复点目标(RPO)和恢复时间目标(RTO)。企业将RTO指定为企业容许无法访问企业的数据的最大时间量。企业将RPO指定为可能由于中断而丢失的就时间而言的数据量。例如,企业可以将RTO指定为15秒。换而言之,企业将接受从服务中断或者故障的时间到它们的系统完全恢复的时间的至多15秒。对于RPO,企业可以指定5秒。这意味着企业不会接受丢失比在故障或者中断之前的5秒内写入(例如,新写入、更新等)的数据更多的任何数据。
用于支持企业的跨存储系统的可用性和保护需求的存储特征已经被冠以各种名称,比如拍快照、镜像、克隆和复制。这些存储特征中的每个存储特征也可以随着存储特征和/或存储产品的提供者而不同。尽管有变化,但是每个存储特征提供对企业的数据的一致查看。
附图说明
可以通过参照附图来更好地理解公开内容的当前方面。
图1和图2描绘了响应于改变请求来协调不同群集中的主与次逻辑存储对象之间的数据改变的示例存储群集同步引擎。
图3至图4描绘了用于在全同步关系中被配置为次逻辑存储对象和在半同步关系中被配置为主逻辑存储对象的逻辑存储对象的示例操作。
图5描绘了提供跨一个或者多个群集的节点的、在逻辑存储对象粒度的全同步和半同步二者的示例架构。
图6描绘了用于在全同步关系中处置对以主端点为目标的改变请求的接收和处置改变请求的示例操作的流程图。
图7描绘了用于逻辑存储对象粒度半同步操作的示例操作的流程图。
图8描绘了用于处理关闭的改变集合日志的示例操作的流程图。
图9描绘了用于在同步关系中处置来自用于主端点的存储单元模块的响应的示例操作的流程图。
图10描绘了用于基于群集的同步引擎处理来自传播器和对等同步引擎的请求的示例操作的流程图。
图11描绘了用于传播器实例处置对次端点的改变请求的响应的示例操作的流程图。
图12描绘了用于次写入器处置复制请求的示例操作的流程图。
图13描绘了用于次写入器实例处置来自下层存储单元模块的响应的示例操作的流程图。
图14描绘了具有基于存储群集的粒度全部同步和半同步传播引擎的示例计算机系统。
具体实施方式
以下描述包括体现了本公开内容的技术的示例系统、方法、技术、指令序列和计算机程序产品。然而,将理解,没有这些具体细节仍然可以实现公开内容的描述的方面。例如,虽然示例涉及盘和盘阵列,但是公开内容的方面不限于此。可以在使用固态存储设备、光存储设备、个别存储设备的联合、不同类型的存储设备的组合等的存储系统上实施公开内容的方面。另外,许多示例说明使用一对逻辑存储对象以说明操作。公开内容的方面不限于主和次逻辑存储对象对,并且可以被应用于一组逻辑存储对象。例如,系统可以被配置为同步主逻辑存储对象与多个次逻辑存储对象。尚未具体示出公知的指令实例、协议、结构和技术以免模糊该描述。
术语
本描述使用术语“存储单元”以指代在存储系统内的主控和/或管理对数据的访问的任何实体。这里所指的存储单元可以被分类为管理存储单元和主控存储单元。在管理存储单元与主控存储单元之间的区分源于存储单元的主要功能。管理存储单元主要地管理对主控存储单元的访问。管理存储单元处理来自其它设备(例如,客户端)的请求并且可以始发用于执行操作(例如,快照操作)的请求。无论请求是来自另一设备还是从管理存储单元始发,管理存储单元都向主控存储单元传输请求。管理存储单元的示例包括文件服务器和存储控制器。主控存储单元主要地执行从管理存储单元的视角来看最终地满足请求的操作。主控存储单元执行对或者向由来自管理存储单元的请求指定的位置的读取或者写入。可以对一个或者多个盘执行这一读取或者写入。在多个虚拟化层的情况下,可以对从管理存储单元的视角来看表现为一个或者多个盘的存储单元执行读取或者写入。主控存储单元的示例包括盘驱动、光驱动、存储阵列和带驱动。
基于存储单元的主要功能来使用术语管理存储单元和主控存储单元,因为功能在单元之间不是排他的。例如,存储控制器可以让数据被本地存储在高速缓存中以加速对访问请求的处置。即使存储控制器可以满足访问请求,存储控制器的主要功能仍然不从和向本地存储器读取和写入数据。相似地,主控存储单元可以包括管理对盘的访问的硬件。例如,可以在单个罩内容纳独立盘冗余阵列(RAID)控制器和盘阵列。虽然RAID控制器管理对盘阵列的访问,但是被容纳在该单个罩内的部件的主要功能是满足从管理存储单元接收的请求。
该描述也使用术语全同步(“full sync”)和半同步(“semi sync”)。这些术语是指不同类型的同步配置。如这里所用的“全同步”配置是指如下配置,该配置延迟发送对已经执行了改变请求进行确认的答复,直至已经跨主逻辑存储对象和次逻辑存储对象同步了改变。如这里所用的“半同步”配置是指如下配置,该配置允许在已经对主逻辑存储对象执行了改变之后发送对已经了执行改变请求进行确认的答复,而与次逻辑存储对象的同步可能仍在进行中。
该描述使用术语“请求”以指代在软件实体或者硬件实体之间的请求完成某事的通信,并且避免在各种协议中被使用的名称、数据字段等的变化。请求可以指示用于读取数据、写入数据的请求或者某个其它数据处理请求。请求可以指示操作类型(例如,读取、写入)、请求的目标(例如,逻辑存储对象标识符)和请求者的标识符。可以根据掌控协议而在请求中指示附加信息。但是本描述没有钻研附加信息的细节。另外,许多协议可以形成被称为协议栈的配置。协议栈可以被视为请求穿过或者穿越的一系列处理模块。在协议栈的每层,可以向请求添加或者从请求去除头部和/或尾部。对于本描述,没有描述至少一些栈处理以避免向该描述增添进一步的复杂性。本描述将请求称为请求,无论是关联的头部还是尾部并且无论对头部和/或尾部中的值的可能的修改如何。
引言
群集化一般地是指将硬件单元分组在一起以收获该组(“群集”)硬件单元(例如,盘驱动、存储阵列、文件服务器、存储控制器等)的不能从个别硬件单元得到的益处。群集化可以用于各种存储特征,这些存储特征的示例包括负荷平衡、故障恢复支持、增加I/O带宽和数据可用性。为了支持这些存储方面和提供对存储的一致查看,在支持存储单元之间同步数据。不同硬件存储单元经常基于初始地和/或优先地使用(例如,按照配置)哪些存储单元以向请求者供应数据和修改用于请求者的数据而被称为主存储单元和次存储单元。此外,存储单元的群集可以被指明为主群集,并且存储单元群集可以被指明为次群集。
许多存储系统功能被部署为存储虚拟化的特征。经常地,存储虚拟化软件/工具与构成存储系统的实际硬件单元混淆。因此,请求者(这里有时被称为客户端)经常从和向逻辑存储对象或者逻辑存储容器读取和写入,这些逻辑存储对象或者逻辑存储容器的示例包括逻辑单元编号(LUN)、文件、虚拟机盘(VMDK)、虚拟卷和逻辑分区。任何数目的虚拟化层可以分离实际存储系统硬件单元和发送访问请求的客户端。每个存储系统硬件单元可以主控许多逻辑存储对象和/或逻辑存储对象的许多部分。另外,代表客户端来处置请求的存储容器可以与表现为物理存储阵列的虚拟存储阵列通信。因此,如同存储阵列一样而被呈现的逻辑存储对象可以被呈现为主控多个逻辑存储对象。
概述
可以在群集式存储环境中的使用存储虚拟化的存储解决方案中,在逻辑存储对象的粒度来提供数据一致性和可用性。对于可用性,如先前提到的那样在不同地点的不同存储单元上维护数据。为了保证数据的跨不同存储单元的一致性,跨不同存储单元执行同步。在逻辑存储对象的粒度,可以跨在远站点的不同存储单元高效地同步数据,因为至少部分地,正被同步的数据量更小和更少受到在输送数据的网络中的负面事件影响。通过从与主逻辑存储对象(即,在改变请求中指定的逻辑存储对象)关联的节点向次逻辑存储对象(即,用于同步的与主逻辑存储对象关联的逻辑存储对象)传播对数据的改变来跨不同群集中的存储单元同步改变。为了满足最严格的RPO(例如,RPO=0)和RTO而又维护性能,文件系统请求在被发送给主控主逻辑存储对象的文件系统(“主文件系统”)之前被截获并且传播给与次逻辑存储对象关联的节点的文件系统(“次文件系统”)。逻辑存储对象具有至少在任何关联的群集内独占的不可变标识符以允许跨群集高效地标识逻辑存储对象。在已经从存储协议专属请求生成了文件系统请求之后和在向主文件系统发送文件系统请求之前截获它避免存储协议专属和/或应用专属操作阻碍传播操作,这进一步减少正被传播的改变请求的大小和处理操作的数目。让处置用于支持同步的操作的实体与文件系统直接地对接,这利用文件系统的用于高效运送文件系统响应的机制。
示例说明
在图1至图4中描绘的示例说明描绘了不同程度的示例细节以尝试避免呈现关于系统的过多数量的信息。没有呈现每个可能数据结构和每个可能功能模块化,因为它们有许多并且对于理解公开内容的方面不是必需的。例如,可以用多种可能编索引/访问方案和数据排列不同地组织作为多个数据结构而呈现的数据结构。相似地,也可以根据平台(操作系统和/或硬件)、应用生态系统、接口、程序员偏好、编程语言等中的任何一项不同地组织在示例说明中被呈现为个别模块/引擎/单元的功能。此外,稍后在该描述中描述某个功能也尝试避免呈现过多数量的信息。例如,来自管理实体或者半同步配置的快照请求可以造成在主管理存储单元对多个访问请求定序。在更早示例说明中没有讨论定序。
图1和图2描绘了响应于改变请求来协调在不同群集中的主和次逻辑存储对象之间的数据改变的示例存储群集同步引擎。图1描绘了改变请求从主管理存储单元向次管理存储单元的传播。管理存储单元将在下文中被简称为节点。在图1中,第一群集包括主节点101,并且第二群集包括次节点125。为了简化该图和由于附图空间约束而没有描绘完整群集。主节点101与主控逻辑存储对象组102的主控存储单元通信地耦合。该组102包括主逻辑存储对象。主节点101包括文件系统请求生成器103、改变传播引擎105、存储群集同步引擎123和文件系统111。文件系统请求生成器103从基于存储协议的请求生成文件系统请求。改变传播引擎105包括截获器107、改变传播器109A和改变传播器109N。主节点101中的这些模块访问在图1中被描绘为同步映射115、进行中(in-flight)跟踪数据117和进行中跟踪数据119的数据。同步映射115指示在逻辑存储对象之间的同步配置(这里也被称为同步关系或者同步关系)。例如,主逻辑存储对象可以具有与一个次逻辑存储对象的全同步关系和与另一次逻辑存储对象的半同步关系。进行中跟踪数据从对应改变传播器的视角来看跟踪请求的进度或者状态。换而言之,每个改变传播器实例维护用于具有同步关系的对应逻辑存储对象的进行中跟踪数据。
次节点125可以包括所有与主节点101相同的模块/引擎。在图1中,没有描绘模块中的一些模块以减少重复。次节点125被描绘为包括文件系统请求生成器129、存储群集同步引擎139、改变传播引擎131和文件系统137。改变传播引擎131包括截获器133和次写入器135。次节点125的次写入器135访问在图1中被描绘为同步跟踪数据134的数据。同步跟踪数据134从第二写入器135的视角来看指示请求的进度或者状态。同步跟踪数据134未必被包含在改变传播引擎131内。对于本描述仅在次写入器135附近描绘同步跟踪数据134。次节点125与主控逻辑存储对象组127的主控存储单元通信地耦合。组127包括次存储对象。
虽然可以具有跨不同节点的某个功能变化,但是具有相同名称的模块的功能将在这一示例中大体地相同。文件系统请求生成器103、129基于向文件系统请求生成器103、129传递的存储协议输入/输出(I/O)请求来生成文件系统请求。文件系统请求生成器103、129可以从网络栈、小型计算机系统接口(SCSI)站、因特网SCSI(iSCSI)模块等接收存储协议I/O请求。存储协议I/O请求的示例包括存储区域网络(SAN)请求和网络附着存储(NAS)请求。文件系统请求生成器103、129基于在它们的节点上实施的文件系统来生成文件系统请求。截获器107、133截获来自文件系统请求生成器103、129的请求。可以不同地实施截获。可以修改应用编程接口,从而使得下层功能改变而没有改变向调用者呈现的接口。作为另一示例,监视进程可以监视执行队列并且在指定的地址出现在执行序列中时重定向调用。文件系统111、137根据文件系统请求来访问下层主控存储单元。存储群集同步引擎123、139根据经由网络110实施的协议来处理通信。作为示例,由引擎123、139实施的协议可以是光纤信道(FC)、网际协议光纤信道(FCoE)、因特网光纤信道协议(iFCP)和隧道协议中的任何一个或者多个协议。无论具体协议如何,引擎123、139实施如下协议,该协议支持无论在机器之间的距离和跳跃如何都可以被感知为在机器之间的直接连接的活跃连接。
图1描绘了具有由字母A至N标识的一系列阶段的示例操作。字母建议的操作排序限于这一所示示例而不应用来限制权利要求的范围。在阶段A,主节点101接收改变请求113。改变请求113从可以在管理节点(例如,群集管理器)、在用户节点(例如,客户的服务器)等的客户端始发。文件系统请求生成器103处理改变请求113、基于改变请求来生成文件系统请求并且调用用于向文件系统111传递文件系统请求113的代码。作为生成文件系统请求113的部分,文件系统请求生成器103将在改变请求中被指示为目标的逻辑存储对象标识符翻译成逻辑存储对象的文件系统位置信息(例如,inode标识符、偏移等)。但是文件系统生成器103也指示用于与文件系统请求一起行进的逻辑存储对象标识符。逻辑存储对象标识符可以按照不同方式与文件系统请求一起行进。例如,文件系统生成器可以向文件系统请求的元数据中写入逻辑对象标识符。作为另一示例,文件系统生成器创建数据结构并且将它与文件系统关联。取代文件系统111接收文件系统请求,截获器107在阶段B接收文件系统请求。请求在它的各种形式(例如,存储协议I/O请求、文件系统请求等)中不再用标签113而被标识,因为正在请求的改变无论请求的形式如何都相同。
在阶段C,截获器107访问同步映射115以确定与文件系统请求相关的任何同步关系。文件系统请求指示组102中的作为文件系统请求的目标的逻辑存储对象(按照文件系统位置信息)。截获器107访问同步映射115以确定针对文件系统请求目标而被定义的任何同步关系。目标可以具有单个同步关系、多个同步关系或者没有同步关系。如果目标没有同步关系,则将停止向文件系统111传递文件系统请求。对于这一示例,同步映射115指示目标与组127中的逻辑存储对象具有全同步关系。由于文件系统请求的目标具有同步关系,所以文件系统请求的目标可以被视为主逻辑存储对象。如先前陈述的那样,逻辑存储对象由至少跨相互关联的群集为独占的不可变标识符标识。可以在一个或者多个数据结构中被指示的同步映射根据逻辑对象(例如,文件、LUN等)和下层文件系统跨逻辑对象或者文件系统请求目标的级或者层映射同步关系。例如,逻辑对象可以是文件。逻辑对象标识符将初始地是文件标识符或者文件句柄。文件系统将以文件句柄为目标的写入请求化解成受影响的数据块。文件系统例如可以经过任何数目的inode级化解。在具有同步关系时,同步映射不仅将在主节点的更高级标识符(即,逻辑对象标识符)映射到在次节点的更高级标识符,而且同步映射也映射更低级标识符(即,文件系统位置信息)。在这一示例情况下,更低级标识符将是inode标识符。用于文件的正在作为目标的部分的主节点inode标识符将映射到用于文件的正在作为目标的部分的次节点上的inode标识符。
在阶段D,截获器107向改变传播器109A传递文件系统请求和用于目标的同步关系的指示。如果主节点101尚未接收以与在改变请求113中指示的相同的主逻辑存储对象为目标的改变请求,则截获器107可以调用对改变传播器109A实例化的代码。虽然不是必需,但是在这一示例中,改变传播器每主逻辑存储对象地被实例化。截获器107可以用各种方式向改变传播器指示用于主逻辑存储对象的同步关系。例如,截获器107可以调用如下函数,该函数以主逻辑存储对象标识符作为参数值和以次逻辑存储对象标识符作为参数值来对改变传播器实例化。作为另一示例,截获器107可以将进程间通信与对在本地存储器中存储的文件系统请求的引用一起发送给已经被实例化的改变传播器109A。为了举例说明改变传播器的每主逻辑存储对象实例化,用引向进行中跟踪数据119的虚线描绘改变传播器109A。虚线用来指示改变传播器109N可以访问用于不同文件系统请求的进行中跟踪数据119。
在阶段E,改变传播器109A创建以同步关系的次逻辑存储对象为目标的文件系统请求并且更新进行中跟踪数据117。如果刚才已经对改变传播器109A实例化,则可能还没有用于跟踪数据的结构或者可能有空结构。改变传播器109A更新进行中跟踪数据117以指示以主逻辑存储对象为目标的文件系统请求在进行中(即将被发送或者正在被发送)。改变传播器109A更新进行中跟踪数据117以也指示以次逻辑存储对象为目标的文件系统请求在进行中。改变传播器109A然后(或者并行地)用与主逻辑存储对象具有全同步关系的次逻辑存储对象的标识符来创建请求。改变传播器109A也用不同请求者来创建这一文件系统请求。改变传播器109A将改变传播器109A指示为请求者。可以用各种数据来标识改变传播器109A,该数据在任何关联的群集内独占地标识改变传播器109A,比如改变传播器109A的进程/线程标识符和主节点101的网络地址的组合。改变传播器109A也可以将主逻辑存储对象标识符并入到请求者的指示中。以从改变传播器109A发送的主逻辑存储对象为目标的文件系统请求将被称为主改变请求。以从改变传播器109A发送的次逻辑存储对象为目标的文件系统请求将被称为次改变请求。
在阶段F,改变传播器109A发送用于服务的文件系统请求。由于主逻辑存储对象与次逻辑存储对象具有全同步关系,所以主节点101直至已经在主和次逻辑存储对象二者做出改变才会对改变请求113做出响应。因此,改变传播器109A可以按照任何顺序来发送主和次改变请求。改变传播器109A向文件系统111发送主改变请求。改变传播器109A向存储群集同步引擎123发送次改变请求。在从改变传播器109A传递改变请求之后,操作的定时可以根据网络条件、节点能力差异等变化。
在阶段G,文件系统111访问主控存储单元。在阶段H,存储群集同步引擎123根据穿越网络110的在存储聚类同步引擎123与存储群集同步引擎139之间的连接的协议来处理次改变请求。存储群集同步引擎123可以根据连接协议来构造新请求并且向新请求填充来自次改变请求的相关信息(例如,次逻辑存储对象标识符、待写入的数据等)。存储群集同步引擎123可以用符合连接协议的头部来封装次改变请求。对于这一示例,在主节点的同步映射在主节点与次节点之间映射逻辑存储对象(例如,文件句柄)以及映射文件系统位置信息(例如,inode标识符)。用受改变请求所影响的数据块的次节点文件系统位置信息来构造次改变请求。在一些情况下,文件位置信息同步映射将从逻辑对象标识符同步映射被分离。并且可以在次节点维护文件系统位置信息同步映射。在那些情况下,用作为目标的逻辑对象的指示和主节点的文件系统位置信息来构造次改变请求。在被接收时,次节点将访问同步映射并且将主节点文件系统位置信息化解成次节点文件系统位置信息。
在阶段I,存储群集同步引擎139根据连接协议来处理接收的请求,并且向次写入器135传递次改变请求。存储群集同步引擎139可以从接收的请求重构次改变请求或者从接收的请求提取次改变请求。如果尚未接收次改变请求,则存储群集同步引擎139可以调用用于对次写入器135实例化的代码。存储群集同步引擎139可以对次写入器实例化以处置由存储群集同步引擎139接收的所有次改变请求或者每主逻辑存储对象和次逻辑存储对象对地对它们实例化。
图1描绘了来自文件系统请求生成器129和来自截获器133的虚线。来自文件系统请求生成器129的虚线指示文件系统请求生成器129正在接收、处理和向截获器133传递其它改变请求的可能性。从截获器133到省略号的虚线图示了截获器133正在截获和向次节点125的没有描绘的改变传播器传递改变请求的可能性。这些可能性被图示以示出次节点125不限于处置次改变请求。
在阶段J,次写入器135更新同步跟踪数据134。次写入器135记录次改变请求的指示,这些指示至少包括作为目标的次逻辑存储对象、请求者(即,改变传播器109A)和次改变请求的状态。在这一点,次写入器135记录状态为进行中,因为次改变请求正在或者将被发送。在阶段K,次写入器135向文件系统137发送次改变请求。
在阶段L,文件系统137根据次改变请求来访问主控存储单元。
图2描绘了对根据在图1的同步映射中定义的全同步关系而被处理的主和次改变请求的响应。图2用阶段标签A至L来描绘示例操作。阶段A至J被描绘为如同来自主逻辑存储对象的主控存储单元的响应在次节点125之前响应。然而,该排序不是必需的。在一些情况下,次节点125可以能够在主逻辑存储对象的主控存储单元可以向主节点101做出响应之前向改变传播器109A做出响应。无论响应的定时如何,直至改变传播器109A已经确认在主和次逻辑存储对象二者的改变才提供向请求者的响应。已经去除了来自图1的一些元素以简化图2。
阶段A至C图示了从主逻辑存储对象的主控存储单元向改变传播器109A行进的响应和进行中跟踪数据117的对应更新。在阶段A,主控主逻辑存储对象的主控存储单元向文件系统111供应响应。文件系统111在阶段B向改变传播器109A转发响应。在阶段C,改变传播器109A更新进行中跟踪数据117以指示已经在主逻辑存储对象中执行主改变请求。
阶段D至J图示了从次逻辑存储对象的主控存储单元向改变传播器109A行进的响应和进行中跟踪数据117的对应更新。在阶段D,主控次逻辑存储对象的主控存储单元向文件系统137供应响应。文件系统137在阶段E向次写入器135转发响应。在阶段F,次写入器135更新同步跟踪数据134以反映对次逻辑存储对象的更新。例如,次写入器135使用次逻辑存储对象标识符和转发的响应的请求者的组合以在主控同步跟踪数据134的结构中查找条目。次写入器135设置条目中的值或者标志以指示已经对次逻辑存储对象完成改变。次写入器135然后向存储群集同步引擎139转发响应。存储群集同步引擎139确定将向主节点101发送对次改变请求的响应(“次响应”)。存储群集同步引擎139在阶段H根据连接协议来处理次响应并且经由网络110通过连接来发送次响应。在阶段I,存储群集同步引擎123根据连接协议来处理次响应并且向改变传播器109A转发次响应。作为处理次响应的部分,存储群集同步引擎123可以基于并入改变传播器109A的进程/线程标识符的请求者标识符来确定应当向改变传播器109A发送次响应。在阶段J,改变传播器109A更新进行中跟踪数据117以指示已经在次逻辑存储对象中执行了次改变请求。
在确定已经完成与初始改变请求113对应的所有未完成改变请求之后,改变传播器109A向文件系统请求生成器103供应响应。每当改变传播器109A更新进行中跟踪数据117,改变传播器109A可以读取条目以例如确定在条目中指示的所有请求是否已经被完成或者仍然在进行中。对于这一示例,文件系统请求生成器103维护指示与改变请求113对应的请求者的数据。在请求初始地由文件系统请求生成器103接收时,可以用与请求者对应的请求标识符标记请求。这一请求标识符可以与请求和对应响应行进。请求标识符指示请求者的身份和请求以区分它与来自相同请求者的其它请求。改变传播引擎105可以被编程为也(或者代之以)维护指示改变请求113的请求者和指示改变请求113本身的数据。在阶段L,文件系统请求生成器103形成改变响应213并且向对应请求者供应改变响应213。
作为在逻辑存储对象之间可能的同步关系的组合的附加示例,图3至图4描绘了用于在全同步关系中配置为次逻辑存储对象和在半同步关系中配置为主逻辑存储对象的逻辑存储对象的示例操作。为了提供逻辑存储对象的不同视角,图3至图4在主控存储单元的群集的上下文中描绘了逻辑存储对象。在主控存储单元(例如,存储阵列)之上用虚线描绘了逻辑存储对象。以这一方式描绘逻辑存储对象以图示逻辑存储对象跨越多个主控存储单元以及在单个主控存储单元内被主控的可能性。如果主控存储单元是主控存储单元的汇集(例如,盘阵列),则逻辑存储对象可以跨越盘阵列内的多个盘。图3描绘与节点301关联的存储群集303。图3至图4描绘与节点311关联的存储群集325和与节点329关联的存储群集331。图3至图4描绘节点经由网络309通信。节点301与图1的节点101相似操作,因此没有在与图1中相同的示例细节水平描绘操作。类似地,节点329与图1和2的次节点125相似操作,因此对于这一示例说明也没有完全地重复那些示例操作。
图3至图4描绘了具有在图1中描绘的模块中的一些模块的节点311。同样,没有重复所有模块以避免重复。在图3至图4中,标识为NODE_2的节点311包括次写入器315、文件系统321和存储群集同步引擎313。图3至图4也用示例同步关系描绘了节点311中的同步映射数据为同步映射317。此外,节点311具有跟踪数据319。但是跟踪数据319指示从节点311向主控存储单元发送的请求的状态和从节点311向另一节点发送的请求的状态。跟踪数据319与图1至图2的进行中跟踪数据相似。不同于在图1至图2中描绘了改变传播器和次写入器,图3至图4描绘了改变传播器为具有用于对来自另一改变传播器的改变请求做出响应和向在另一位置的次逻辑存储对象传播改变的功能。图3至图4也描绘了对象位置数据327。虽然在图3至图4中描绘了不同示例条目,但是那些条目在将逻辑存储对象标识符化解成节点标识符的对象位置数据中。如在图1至图2中那样,图3至图4中的阶段用阶段标识符描绘了示例操作。这些阶段标识符指示操作中的序列,但是该描绘的顺序不应用来限制权利要求的范围,因为顺序用于示例目的。
阶段A至C与图1中的阶段C、H和I相似。在阶段A,节点301在接收没有描绘的改变请求之后访问同步映射305。有了同步映射305,节点301确定标识为OBJ33的逻辑存储对象与标识为OBJ44的对象具有全同步关系。逻辑存储对象OBJ33在关系中是主逻辑存储对象并且在与节点301关联的存储群集303内被主控。节点301在阶段B向存储群集303的主控OBJ33的成员发送改变请求。在阶段C,节点301访问对象位置数据307并且确定OBJ44与NODE_2关联以及用于作为节点311的NODE_2的地址。节点301然后经由网络309通过在节点之间的连接向节点311发送次改变请求,该次改变请求将OBJ44(在文件系统方面)指示为目标并且将节点301中的改变传播器指示为请求者。
在阶段D至G中,节点311处理来自节点301的次请求。在阶段D,存储群集同步引擎313根据连接的协议处理来自节点301的次请求。次群集同步引擎313然后向次写入器315传递次改变请求。次写入器315在阶段E访问同步映射317。次写入器315确定逻辑存储对象OBJ44具有与逻辑存储对象OBJ52的半同步关系。在阶段F,次写入器315更新跟踪数据319。次写入器315更新用于将基于确定的半同步关系创建的次改变请求和用于从节点301接收的次改变请求的跟踪数据319。次写入器315在跟踪数据319中维护对向何处路由响应的指示。在这一示例中,次写入器315更新跟踪数据319以指示对象OBJ44和OBJ52在半同步关系中。逻辑存储对象标识符中的每个逻辑存储对象标识符与状态指示关联。对于这一示例,值“0”指示进行中或者等待并且值“1”指示已经向目标逻辑存储对象执行改变请求。在这一点,将两个状态指示符设置成“0”。次写入器315也更新跟踪数据319以指示请求者为“NODE_1_OBJ33”。这一个值仅为同步关系的节点和主逻辑存储对象的示例指示。在阶段G,次写入器315创建附加次改变请求并且向它们的对应处置器传递改变请求。次写入器315向文件系统321转发以OBJ44为目标的改变请求。改变传播器315以目标为OBJ以及指示次写入器315和节点311的请求者标识符创建附加改变请求。例如,附加请求可以指示节点311和前往次写入器315的端口或者套接字。次写入器315向存储群集向存储群集同步引擎313传递附加改变请求。
在阶段H,文件系统321根据次请求访问群集325中的主控OBJ44的主控存储单元。
在阶段I,存储群集同步引擎313确定向何处发送来自次写入器315的附加改变请求。存储群集同步引擎313访问对象位置数据327并且找到指示OBJ52与作为节点329的NODE_3的条目。存储群集同步引擎313从对象位置数据327确定节点329的地址、根据连接协议处理附加改变请求并且在阶段J经由网络309向节点329发送附加改变请求。在阶段K,节点329向OBJ52执行附加改变请求。
图4描绘了节点311处置用于不同同步关系的响应。阶段A至D描绘了用于节点311处理对以OBJ44为目标的改变请求的响应的示例操作。在阶段A,主控OBJ44的主控存储单元向文件系统321发送响应。在阶段B,文件系统321向次写入器315转发响应,因为响应指示次写入器315是改变请求的始发者。在阶段C,次写入器315访问跟踪数据319。次写入器315更新跟踪数据319以指示已经指向对OBJ44的改变。次写入器315确定用于OBJ44的条目指示半同步关系并且指示请求者NODE_1_OBJ33。由于这是半同步关系,改变传播器315可以继续向请求者NODE_1_OBJ34提供响应。次写入器315在阶段D将响应与请求者标识符的指示一起发送给存储群集同步引擎313。
由于在OBJ33与OBJ44之间的同步关系是全同步关系,所以对OBJ44的改变可以被迅速地传达回给与OBJ33关联的节点。在阶段E,存储群集同步引擎313访问对象位置数据327以确定与OBJ33关联的节点。存储群集同步引擎313可以被编程为从由次写入器315提供的请求者标识符提取对象标识符。然而,可以用不同方式传达对象标识符。例如,次写入器315或者存储群集同步引擎313可以访问同步映射以确定用于OBJ33的主逻辑存储对象。无论如何确定对象标识符,存储群集同步引擎313确定OBJ33与作为节点301的NODE_1关联。
在阶段F,向节点301传输响应。存储群集同步引擎313在阶段E中确定目的地回为NODE_1之后(或者之时)根据连接协议处理响应。存储群集同步引擎313然后通过穿越网络309的连接传输响应。节点301然后创建和通过网络401发送对初始请求403(“CLIENT”)的响应。这假设已经在OBJ33执行请求的改变,因为OBJ33具有与OBJ44的全同步关系。
在阶段H至J中,确认对OBJ52的改变的响应行进回到次写入器315。在阶段H,存储群集331的主控OBJ52的成员向节点329提供已经对OBJ52执行改变的响应。因而,节点329在阶段I向存储群集同步引擎313发送响应。由于响应指示次写入器315,所以存储群集同步引擎313在根据连接协议处理响应之后在阶段J向次写入器315传递响应。
在阶段K,改变传播器315更新跟踪数据319以指示已经完成对OBJ52的更新。已经完成同步的这一指示可以用于其它一致性方面、比如定序、故障恢复和负荷平衡。
虽然图1至图4描绘了架构的部分以举例说明示例操作,但是图5描绘了跨一个或者多个群集的节点在逻辑存储对象丽都提供全同步和半同步二者的示例架构。图5描绘了文件系统请求生成器501、改变传播引擎503、文件系统505和存储群集同步引擎507。文件系统请求生成器501与图1至图4的文件系统请求生成器103相似。文件系统请求生成器501处理从模块接收的存储协议专属I/O请求,该模块处理通过网络接口或者串行接口(例如,网络模块/站或者SCSI模块)接收的通信。可以与图1的文件系统111相似的文件系统505实施文件系统或者文件系统层,该文件系统或者文件系统层的示例包括Write Anywhere FileLayout和UNIX文件系统。文件系统505根据文件系统请求向下层主控存储单元供应请求。存储群集同步引擎507向在群集节点的对等存储群集同步引擎供应改变请求,该群集节点主控同步关系的次逻辑存储对象。
改变传播引擎503包括截获器509、定序器511、传播器513和次写入器515。文件系统请求生成器501将文件系统请求与在对应存储I/O请求(例如,SAN或者NAS请求)中指示的逻辑存储对象目标的指示一起传递给改变传播引擎503。从文件系统请求生成器501的视角来看,文件系统请求生成器501正在向文件系统505传递文件系统请求。这可以帮助避免或者最小化修改文件系统请求生成器501。但是由文件系统请求生成器501调用的函数或者过程调用实际地调用截获器509、因此允许截获器509“截获”文件系统请求。在从传播器513接收响应时,截获器509向文件系统请求生成器501传递回响应,文件系统生成器501然后创建对应存储协议I/O协议。
文件系统请求首先向截获器509传递。截获器509初始地确定文件系统请求如何流过改变传播引擎。如果文件系统请求是改变请求(例如,写入、归零等),则截获器509访问同步关系数据,该同步关系数据指示同步关系中的逻辑存储对象(具有同步关系的逻辑存储对象下文被称为端点)。如果同步关系数据指示在改变请求的目标(即,主逻辑存储对象,下文被称为“主端点”)与次逻辑存储对象(即,与主端点同步的逻辑存储对象,下文被称为“次端点”)之间的全同步关系,则截获器509向传播器513传递改变请求、同步关系的指示和次端点的指示。截获器509可以通过调用造成实例化传播器513的函数来传递这一信息。如果同步关系是半同步关系,则截获器509向定序器511传递这一信息。可以用截获器设计改变传播引擎503,该截获器在时间上相互并行或者邻近向定序器511和传播器513二者传递文件系统请求和对应半同步关系信息。与传播器513一样,截获器509可以用可以实例化定序器511的函数调用向定序器511传递这一信息。为每对主和次端点实例化定序器511和传播器513。
定序器511与用于在半同步关系中的端点的文件系统请求或者在某些存储管理操作、比如拍快照或者去重复被触发时操作。定序器511保留具有依赖性的请求的顺序。依赖性可以发生在重叠写入之间、来自在写入之间的读取请求、指定的依赖性等。定序器511在配置、比如RPO的限制内跟踪改变请求。例如,定序器可以在RPO被定义为10秒时在5秒间隔中跟踪请求。无论特定配置如何,定序器511在可以按照时间、请求数目或者二者的配置的边界内积累改变请求。本描述将界定的积累的改变请求称为改变集合。定序器511确定在积累的改变请求之间的依赖性并且基于依赖性指示序列。定序器511具有读取请求以及改变请求的可视性以确定在改变请求之间的依赖性。在改变集合中的每个请求的元数据中,定序器511指示在改变集合内的定序和请求总数。例如,定序器511写入用于在改变集合中的五个改变请求中的第一改变请求的元数据为“1/5”。在达到用于改变集合的边界时,定序器511开始积累用于下一改变集合的请求并且向同步引擎507传达当前改变集合用于向主控次端点的节点传达。本描述将这一过程称为关闭当前改变集合或者关闭当前改变集合日志和打开下一改变集合或者改变集合日志。定序器511可以起动按照指示的顺序遍历改变集合日志并且向同步引擎507提交每个改变请求的另一线程或者进程(例如,后台进程)。定序器511(或者由定序器511调用的线程/进程)个别地发送改变集合中的改变请求,这允许请求未按照顺序到达接收节点。在从同步引擎507接收用于改变集合的成功响应时,定序器511标记改变集合为完成。然后可以丢弃或者改写改变集合日志。在接收失败响应或者超时出现时,定序器511可以生成同步失败或者重试的通知。
传播器513维护用于跟踪改变请求的状态的数据、向同步引擎507传递用于次端点的请求并且向截获器509传递回响应。在传播器513从截获器509接收改变请求时,传播器513记录请求者的指示、然后修改改变请求以将传播器513指示为请求者。这有助于文件系统505向传播器返回响应、但是并非必需。可以设计结构以截获来自文件系统的响应而不是改变请求者的身份。在改变请求者的身份的架构中,传播器513在向截获器传递来自文件系统505的响应之前在响应中恢复请求者的身份。返回到处置改变请求,传播器513记录数据,该数据指示尚未完成的改变请求(即,进行中改变请求)。对于全同步,传播器513记录关于用于主端点和次端点的改变请求的数据。传播器513使用这一数据以确定二者何时完成并且可以向请求者提供响应。对于半同步,传播器513记录用于主端点的数据,因为定序器511处置用于在半同步关系中的次端点的请求。但是传播器513在主端点上完成改变时通知定序器511。定序器511直至已经在主端点上成功地完成所有那些改变才发送出用于次端点的改变集合。
次写入器515处置以次端点为目标的改变请求。次写入器515从同步引擎507接收形式为复制操作的改变请求。在主端点节点,同步引擎507从传播器513或者定序器/定序器产生的线程511供应的改变请求生成复制操作。复制操作将主端点节点(例如,在主端点节点上的传播器实例)指示为复制操作的源并且指示次端点。复制操作也指示同步关系类型。复制操作可以是重新形成的改变请求,该改变请求指示与改变请求不同的请求者和不同的目标并且符合与文件系统505的协议独立的协议。例如,来自传播器的改变请求可以在符合write anywhere file layout(WAFL)的请求中将传播器指示为请求者以及将特定文件名和文件区域(例如,块)指示为目标。复制操作可以从改变请求提取信息并且与特定文件系统或者协议独立指示它。在次写入器515接收这一信息时,次写入器515根据由次端点节点的文件系统实施的协议生成适当请求。次写入器515跟踪向文件系统505提交的请求的状态并且向同步引擎507传递回响应。对于半同步关系,次写入器515积累(“登台(stage)”)改变集合的请求直至改变集合完成。次写入器515读取请求的元数据以确定何时创建改变集合和改变集合何时完成。在改变集合完成时,次写入器515将生成用于主端点节点的、改变集合已经成功地完成的通知而不是发送用于改变集合中的每个请求的个别通知。次写入器515也将生成用于失败的改变集合的通知。在一些情况下,次端点将在另一同步关系(“级联同步配置”)中是主端点。在实例化次写入器515时,次写入示例将访问同步关系数据以确定次端点是否在级联同步配置中。如果是这样,则次写入器515将调用用于级联关系的传播器示例和/或定序器示例。次写入器515将指示本身具有改变请求的请求者。
虽然图5提供用于示例逻辑对象粒度全同步和半同步架构的一般描述,但是下图提供示例操作的更多示例。图6至图13描绘了用于群集节点中的端点的示例全同步和半同步操作的流程图。参照来自在图5中描绘的示例架构的动作者描述这些图,但是指定的动作者用于辅助理解操作。如更早提到的那样,程序结构或者设计可以变化,并且指定动作者的示例不应用来限制权利要求的范围。
图6描绘了用于在全同步关系中处置对以主端点为目标的改变请求的接收和处置改变请求的示例操作的流程图。截获器可以执行块601、603、605和607的操作,并且传播器可以执行块608、609、611和613的操作。
在块601,截获器接收从存储协议I/O请求推导的文件系统请求(下文为“请求”)。例如,已经从存储协议I/O请求提取信息以生成文件系统请求。
在块603,截获器确定请求的目标是否在同步关系中。如果请求的目标没有在同步关系中,则控制流向块617。如果请求的目标在同步关系中,则控制流向块604。
在块604,截获器读取出同步关系信息。截获器可以通过将信息拷贝到另一数据结构中并且关联该数据结构与改变请求来“读取出”信息。截获器也可以通过记录对数据结构中的包含信息的条目的引用(例如,指针、索引等)来“读取出”信息。可以在群集的成员之中循环的数据结构中维护同步关系信息,这些成员主控在同步关系中的端点。可以在个别节点配置这一数据结构。配置在被提交之后可以触发跨群集中的节点的更新。
在块605,截获器确定请求是否为改变请求或者读取请求。如果截获器确定请求是改变请求,则控制流向块611。否则,控制流向块607。
在块607,截获器确定请求的同步关系是否为全同步或者半同步关系。如果关系是全同步关系,则控制流程块617,因为读取没有触发对应全同步操作。如果关系是半同步关系,则控制流向块609,因为读取可以创建在改变集合中的改变请求之间的依赖性。
在块609,向用于同步关系的主端点和次端点对的定序器实例传递请求。定序器可以已经被实例化用于该对或者可以与传递请求同时被实例化。例如,截获器可以校验数据,该数据指示用于每个唯一端点配对的实例化的定序器。如果截获器找到条目,则截获器使用该条目中的线程标识符向线程传递对改变请求的引用和同步关系信息。如果没有条目,则截获器调用函数,该函数具有作为函数调用的参数而被传递的对改变请求的引用和同步关系信息。
如果截获器在块605确定请求是改变请求,则控制流向块611。在块611,向用于在同步关系信息中指示的主端点和次端点对的传播器示例传递请求和同步关系信息。与定序器一样,可以与传递请求和同步关系信息同时实例化传播器示例。也可以引用地或者字面地传递改变请求和同步关系信息中的任一个或者二者。
在块613,传播器实例记录请求者的指示并且将传播器实例本身指示为请求者。传播器实例将本身指示为请求者以使文件系统向传播器实例返回响应。这有助于传播器与现有文件系统对接。传播器实例至少从传播器实例的视角来看记录实际请求者,从而使得可以更新来自下层文件系统的响应以指示实际请求者。如果同步关系是半同步,则控制流向块609。如果关系是全同步,则控制流向块615。
在块615,传播器实例记录用于跟踪进行中请求的数据。虽然被称为“进行中”请求,但是请求尚未在进行中,因为传播器实例直至在记录这一数据之后才续传请求。传播器实例至少记录请求的指示、主端点、次端点和对是否已经对于主端点或者次端点接收响应的指示。传播器实例可以记录请求的从请求的元数据确定的标识符。传播器实例可以用主端点和次端点标识符生成标识符。程序实例记录这一数据以确定何时已经在主端点和次端点二者成功地执行改变。在两个端点成功之后,可以向实际请求者运送响应。在记录用于跟踪请求的数据之后,传播器实例可以并行地或者依次地执行块617和619。如果依次,则传播器实例可以按顺序执行块中的任一个块。
在块617,传播器实例向下层文件系统供应请求。
在块619,传播器实例指示用于在次端点上执行的请求。例如,传播器实例向模块传递请求和同步关系,该模块向与次端点关联的节点传达改变。
图7描绘了用于逻辑存储对象粒度半同步操作的示例操作的流程图。图7从图6的块609继续。
在块701,传播器实例记录用于跟踪进行中请求的数据。虽然以与块615相似的言语表达块701,但是块701的示例操作没有跟踪向与次端点关联的节点发送的请求的状态。向次端点节点发送的请求的状态没有被用于半同步关系的传播器实例跟踪,因为跟踪由定序器处置。在半同步关系中,传播器实例可以避免跟踪向用于主端点的下层文件系统发送的跟踪请求而依赖于下层文件系统的管理机制。在这一情况下,传播器实例可以续传来自下层文件系统的成功或者失败响应。传播器实例将仅在响应中恢复实际请求者的身份。
在块703,传播器实例向文件系统供应请求。
在图6的块609,向定序器传递请求和同步关系信息。在块705,定序器确定是否已经到达用于开放的改变集合日志的边界。例如,可以定义边界为配置的RPO的小部分。作为示例,定序器基于定序器基于12秒RPO管理在4秒边界上管理改变集合日志。在打开改变集合日志时,可以用系统时间为改变集合日志加戳记。每当到达边界时,关闭和提交改变集合日志用于处理。在用于12秒RPO的4秒边界的这一示例中,共计3个改变集合日志跨越RPO时间段。改变集合日志之一将开放,并且其它两个将被关闭。如果已经到达改变集合边界,则控制流向块709。如果尚未达到改变集合边界,则控制流向块709。如果尚未达到改变集合边界,则控制流向块707。
在块707,定序器在开放的改变集合日志中指示请求。定序器可以记录请求的标识符、请求类型和对请求的引用。定序器可以记录对请求的引用。
在块309,关闭改变集合日志,因为如在块705确定的那样到达边界。例如,定序器可以维护开放的改变集合日志指针和一个或者多个关闭的改变集合日志指针。在到达边界时,定序器可以更新指针以反映日志的开放和关闭。即使日志用于失败的改变集合,则定序器也可以在缓冲器中维护关闭的日志。这可能消耗更多存储器,因为日志不限于对于仍然在进行中的开放和关闭二者的改变集合而言充分的存储器空间。但是附加存储器可以允许调查失败的改变集合或者有助于失败的改变集合的更快重试。
在块711,定序器传递关闭的日志用于处理。例如,定序器可以起动在定序器继续维护新改变集合日志之时处理关闭的日志的线程或者进程。处理关闭的日志包括确定在改变请求之间的依赖性以满足在改变集合中的请求之间的预计的序列。
在块713,定序器打开和初始化不同改变集合日志。为了打开日志,定序器可以分配不同存储器空间或者访问已经完成(成功地或者不成功地)的关闭的日志的存储器空间。定序器用初始时间戳初始化开放的改变集合日志。定序器也可以改写任何数据以清除改变集合日志或者允许另一进程处置在被打开之前清除日志。
在块715,定序器在初始化的开放的改变集合日志中指示请求。
图8描绘了用于处理关闭的改变集合日志的示例操作的流程图。该处理分析改变集合中的请求并且确定任何排序以维护数据的正确和一致查看。逻辑存储对象粒度维护改变集合以用原子方式实施改变集合并且符合指定的RPO。虽然图7示例操作描述产生的线程或者进程为处理关闭的改变集合日志,但是图8描述定序器为处理关闭的改变集合日志。
在块801,定序器确定在关闭的改变集合日志中的改变请求之间的任何依赖性并且根据依赖性指示定序。定序器维护数据,该数据指示作为改变请求的主题的端点的区域。例如,定序器可以维护用于文件的区域的位图。位图的第一维度根据文件系统和/或存储协议可以代表x字节的块。位图的另一维度可以代表改变请求中的每个改变请求。有了这一位图,定序器可以确定改变请求何时重叠。如果改变请求重叠,则定序器确定改变请求相互依赖并且保留它们的序列以满足这一依赖性。定序器也确定以逻辑存储对象为目标的任何改变请求是否具有以逻辑存储对象为目标的干预读取请求。在该情况下,定序器确定依赖性存在并且保留周围更新请求的序列或者顺序。定序器将定序信息写入到改变请求中的每个改变请求的元数据中。例如,定序器将定序信息写入到改变请求的头部中。
在块803,定序器在改变集合的每个改变请求中指示改变集合信息。与定序信息一样,定序器在改变请求中的每个改变请求的元数据中指示改变集合信息。定序信息包括改变集合的标识符和改变集合中的改变请求的数目。这帮助在与第二端点关联的节点的次写入器确定次写入器何时已经接收改变集合的所有改变请求。定序器也可以在改变请求中的每个改变请求的元数据中指示改变集合的开始时间。这可以帮助次写入器确定何时已经违反RPO约束。
在块805,定序器消除多余改变请求。如果改变请求以也被以后改变请求为目标的相同主端点和相同区域或者块为目标,则定序器确定改变请求多余。换而言之,定序器确定如下改变请求,这些改变请求做出超出改变集合以外没有持续的改变
在块807,定序器将每个改变请求与定序和改变集合的指示一起供应给群集同步引擎。定序器可以传递对已经用定序和改变集合信息的指示修改的改变请求的引用。负责向次端点节点传达这些改变的模块可以经由传递的引用获得实际数据。
图9描绘了用于处置来自用于在同步关系中的主端点的文件系统的响应的示例操作的流程图。描述这些示例操作如同由传播器实例执行。
在块901,传播器实例从主端点的文件系统接收响应。传播器实例先前已经向文件系统传递改变请求。改变请求将主端点(即,具有文件系统位置信息(比如文件句柄和文件块编号)的逻辑存储对象)和传播器实例指示为请求的源。文件系统现在在服务于(或者尝试服务于)改变请求之后提供响应。响应将指示成功或者失败。
在块903,传播器实例确定响应是否指示成功或者失败。如果响应指示成功,则控制流向块909。如果响应指示失败,则控制流向块905。
在失败的情况下,传播器实例在块905发起放弃对次端点的对应改变。无论主端点是在全同步关系中还是在半同步关系中,对次端点的改变不应成功地完成以避免在主和次端点之间的失同步状态。对于全同步关系,传播器实例向同步引擎提交用于放弃向次端点节点传达的改变请求的请求。同步引擎将执行用于放弃对次端点的改变并且保留在端点之间的同步的操作。对于半同步关系,传播器实例放弃改变集合。放弃改变集合可以包括标记在主端点节点的改变集合日志为失败或者放弃以及请求同步引擎请求次端点节点使改变集合的请求失败或者放弃这些请求。
在块907,传播器实例指示可以向请求者通知改变请求失败。传播器实例例如,可以改变来自主端点的文件系统的失败响应以指示实际请求者并且向网络模块传递改变的响应。网络模块然后可以向实际请求者传达失败。
如果改变请求成功,则传播器实例在块909更新跟踪数据以指示成功。传播器实例更新跟踪数据以指示请求已经在主端点完成。
在块911,传播器实例用跟踪数据确定对次端点的改变是否已经完成。如果不是,则控制流向块913。如果对次端点的改变已经成功地完成,则控制流向块921。
在块913,传播器实例确定是否已经达到超时。可以配置超时。这一超时假设应当在超时到期之前接收响应。否则,来自次端点节点的请求或者对该请求的响应可以被视为丢失。如果已经达到超时,则控制流向块917。如果尚未达到超时,则传播器实例在块915等待定义的等待时段。控制从块915流回到块911。
块917和919描绘了在超时场景中的操作。在块917,传播器实例指示次端点与主端点失同步。在块919,如配置的那样处理在端点之间的失同步状态。例如,如果允许重试,则失同步状态可以引起重试。失同步状态可以向管理模块触发通知。
在次端点的更新请求成功地完成时,然后传播器实例指示可以在块921向实际请求者通知改变请求的成功完成。传播器实例向网络模块供应响应用于向实际请求者传达。
在块923,清除跟踪数据。传播器实例可以清除这一数据或者标记跟踪数据用于由垃圾收集线程清除。
图9描绘了用于处置用于对主端点的改变的响应的示例操作,并且图10描绘了用于基于群集的同步引擎处理来自传播器和对等同步引擎的请求的示例操作的流程图。用于图10的描述将称动作者为同步引擎。
在块1001,同步引擎接收将在次端点上执行的改变请求的指示。可以引用地或者字面地向同步引擎传递改变请求。改变请求可以是改变集合的成员或者用于全同步关系的单独改变请求。同步引擎可以在改变请求的元数据中或者在与改变请求关联的分离结构中接收次端点的指示。
在块1003,同步引擎确定与次端点关联的群集节点。同步引擎访问跨群集维护的数据。可以使用数据作为用于端点和节点的目录。数据指示哪些节点与哪些逻辑存储对象关联(即,主控逻辑存储对象和/或管理对逻辑存储对象的访问)。可以实施这一数据为数据库。同步引擎用次端点的身份读取数据,该身份是逻辑存储对象标识符。
在块1005,同步引擎确定是否已经与在次端点节点的同步引擎建立通信会话。同步引擎维护通信会话以避免为每个请求建立通信会话的开销。然而,这不是必需的。同步引擎可以每端点对建立会话或者连接。如果尚未建立会话,则控制流向块1007。否则,控制流向块1009。
在块1007,同步引擎与在与次端点关联的群集节点的同步引擎建立通信会话。
在块1009,同步引擎根据改变请求创建以次端点为目标的复制请求并且将传播器实例指示为复制请求的源。同步引擎创建请求,该请求将次端点指示为请求的目标。同步引擎用将将向次端点写入的数据或者数据的指示创建请求。同步引擎也用群集节点的指示和接收的改变请求的元数据创建请求。
在块1011,同步引擎通过会话向与次端点关联的群集节点传达复制请求。从块1011到块1013的虚线代表在发送复制请求与接收请求之间的时间流逝。
在块1013,同步引擎从与次节点关联的群集节点接收对复制请求的响应。同步引擎从将传播器实例指示为请求者的响应确定传播器实例。同步引擎在块1015中向在响应中指示的适当传播器实例传递复制响应。可以设计同步引擎以通过维护将传播器实例标识符与复制请求标识符(例如,基于端点标识符生成的标识符)关联的数据来确定请求者。
图11描绘了用于传播器实例处置对次端点的改变请求的响应的示例操作的流程图。参照作为示例操作的动作者的传播器实例描述图11。如更早描述的那样,传播器实例向同步引擎传递已经成为复制请求的将对次端点做出的改变请求。同步引擎向与次端点关联的群集节点传达那些改变。
在块1101,传播器实例从同步引擎接收复制响应。复制响应指示响应对应于次端点和主端点。
在块1103,传播器示例确定在端点之间的同步关系是否为全同步或者半同步。如果同步关系是全同步,则控制流向块1105。如果同步关系是半同步,则控制流向块1123。
在块1105,传播器实例基于复制响应确定对次端点的改变请求是否成功。如果成功,则控制流向块1113。否则,控制流向块1107。
在块1107,传播器实例确定是否成功地完成对主端点的请求的改变。传播器实例读取进行中跟踪数据以确定是否成功地完成主端点改变。如果成功地完成对主端点的改变并且对次端点的改变没有成功,则端点失同步。如果成功地完成对主端点的改变,则控制流向块1121。如果对主端点的改变没有成功地完成,则控制流向块1109。
在块1121,回退对主端点的改变。回退对主端点的改变造成向请求者给予失败响应。请求者然后可以再次请求改变。传播器可以被编程为除了回退对主端点的改变之外还指示或者取而代之指示失同步状态。控制从块1121流向块1127。
在块1109,放弃对主端点的改变。虽然类似地罕见,但是与对次端点的改变关联的节点可以在传播器示例从用于主端点的下层存储单元接收响应之前服务于改变请求。
在块1111,编程器实例指示可以向实际请求器通知改变请求失败。例如,传播器实例基于来自用于主端点的下层存储单元的响应创建失败响应。传播器实例用从截获器传递的改变请求先前记录的请求者创建失败响应。
如果对次端点的改变在全同步关系中成功,则传播器实例在块1113确定请求的改变是否已经在主端点成功地完成。传播器实例访问进行中跟踪数据以确定主端点改变是否已经完成。如果主端点改变已经完成,则控制流向块1117。如果主端点改变尚未完成,则控制流向块1115。
在块1115,传播器实例更新进行中跟踪数据以指示次端点改变已经完成。
在块1117,传播器实例指示可以在改变已经在两个端点成功时向请求者通知请求完成。传播器实例基于来自主端点的下层存储单元的响应生成响应。响应指示成功服务于请求。传播器实例也用实际请求者的指示替换本身的指示作为请求者。传播器实例然后向截获器或者通信模块传达响应。
在块1119,清除用于请求的跟踪数据。传播器实例可以清除跟踪数据或者垃圾收集线程(或者另一数据维护线程)可以清除跟踪数据。
如果响应在半同步关系中用于次端点,则控制流向块1123。在块1123,传播器实例确定复制响应是否指示成功完成对次端点的改变集合。如果是这样,则控制流向块1125。如果不是,则控制流向块1127。
在块1125,传播器实例指示端点失同步。传播器实例可以访问在群集节点之中循环的同步关系数据。这一同步关系数据可以包括单个位字段,该字段可以由传播器实例设置以指示对应端点是否为失同步或者同步。传播引擎将如配置的那样处理包括失同步端点的请求。例如,传播引擎可以被配置为防护所有以指示为失同步的主端点为目标的所有请求直至与次端点或者备选次端点恢复同步。传播引擎可以被配置为在指示作为目标的端点失同步时用失败或者失服务类型相应做出响应。如果主端点已经成功地改变并且改变集合已经在次端点成功地完成,则控制流向块1129。否则,控制流向块1127。
在块1129,传播器实例清除改变集合日志。由于已经向请求者通知对主端点的成功改变,所以对在半同步关系中的次端点的成功改变没有向请求者触发通知。清除改变集合日志意味着改变集合已经成功地完成。传播器实例可以被编程为在清除或者去除之前标记改变集合日志为成功地完成。
图12描绘了用于次写入器处置复制请求的示例操作的流程图。如更早描述的那样,次写入器从同步引擎接收复制请求,二者正在与次端点关联的节点上运行。在与次端点有同步关系的主端点关联的节点上运行的同步引擎向在次端点节点的同步引擎传达复制请求。
在块1201,在与次端点关联的群集节点的同步引擎接收复制请求。复制请求指示主端点和次端点。主端点或者在主端点的传播器实例被指示为复制请求的源。复制请求也可以指示同步关系类型。
在块1203,同步引擎确定是否已经为主和次端点实例化次写入器。例如,可以已经为改变集合的更早请求实例化用于端点对的次写入器。如果已经实例化次写入器,则控制流向块1207。如果不是,则控制流向块1205。
在块1207,同步引擎向次写入器实例传递如果分离地传达的复制响应和关联元数据。可以在复制请求中指示元数据。
在块1205,同步引擎基于指示的端点对实例化次写入器。控制流从块1205和1207中的任一个块流向块1209。
在块1209,次写入器实例确定是否应当登台改变请求。登台用于改变集合的改变请求是指积累改变请求或者改变请求的指示上至限制。次写入器可以读取改变请求的元数据以确定改变请求是否在改变集合中。元数据可以指示改变集合。次写入器实例也可以基于半同步而不是全同步的指示如同改变请求在改变集合中一样继续。如果将登台改变请求,则控制流向块1215。如果不是,则控制流向块1211。
在块1211,次写入器实例记录用于跟踪复制请求的数据。次写入器实例使用跟踪数据以记录已经向下层文件系统传递请求。次写入器实例可以依赖于下层文件系统而不是记录用于跟踪复制请求的数据。
在块1213,次写入器实例向下层存储单元访问模块供应复制请求。与传播器实例一样,次写入器实例可以在向下层文件系统供应复制请求之前记录请求者的指示并且用次写入器实例的指示替换它。
如果次端点在半同步关系中,则次写入器实例将在块1215确定是否已经创建改变集合日志用于对接用于端点对的复制请求。如果已经创建改变集合日志,则控制流向块1217。如果尚未为端点对创建改变集合日志,则控制流向块1225。
在块1225,次写入器实例创建登台日志(即,在次端点节点的改变集合日志)。次写入器实例用复制请求初始化对接日志。
在块1217,次写入器实例在已经创建的登台日志中指示复制请求。
在块1219,次写入器实例确定改变集合日志是否完成。次写入器实例可以访问复制请求中的任何复制请求的元数据以确定在改变集合中的复制请求的总数。次写入器实例然后可以比较从元数据确定的数目与在改变集合日志或者登台日志中指示的复制请求的数目。如果登台日志没有完成,则次写入器实例等待接收附加复制请求。
在确定登台日志完成时,次写入器实例在块1221遍历登台日志。次写入器实例选择在登台日志中指示的第一未标记的复制请求并且向下层文件系统供应选择的复制请求。次写入器实例在接收对应响应时继续在登台日志中的下一未标记的复制请求。次写入器实例继续直至这一过程已经遍历登台日志,这在图13中更具体加以描述。
图13描绘了用于次写入器实例处置来自下层文件系统的响应的示例操作的流程图。图13仅描绘了用于处置用于在改变集合中的请求的响应的示例操作。换而言之,图13仅描绘了用于在半同步关系中的次端点的示例操作。在处置用于全同步关系的响应时,次写入器实例向同步引擎传递响应。次写入器实例将首先恢复原请求者的指示。
在块1301,次写入器实例从下层文件系统接收对复制请求的响应。
在块1303,次写入器实例确定响应是否指示对次端点的成功改变。如果响应指示对次端点的成功改变,则控制流向块1304。如果响应指示对次端点的失败改变,则控制流向块1305。
在块1305,次写入器实例确定是否配置重试。次写入器实例可以被配置为根据RPO符合配置重试在改变集合内的请求。例如,如果预定义的时间量仍然在RPO时间段中剩余,则次写入器实例可以被配置为重试改变集合。如果配置和允许重试,则控制流向块1307。否则,控制流向块1311。
在块1307,次写入器实例更新重试计数器。为了避免资源的可能浪费,重试限于配置的数目。
在块1309,次写入器实例再次向下层文件系统供应请求。
如果没有配置或者没有允许重试,则次写入器实例在块1311记录用于指示改变集合失败的数据。次写入器实例可以向用于登台日志的元数据写入失败指示。失败指示可以有助于在失败不能或者没有被传达回到主端点节点的情况下保留改变集合的这一失败状态。
在块1313,次写入器实例生成改变集合失败的通知。次写入器实例可以生成标识改变集合和失败指示的响应。然后经由同步引擎向请求节点(即,主端点节点)供应失败通知。从块1313到块1315的虚线指示时间流逝。在以后时间,次写入器实例可以标记改变集合日志用于丢弃。次写入器可以被编程为丢弃有失败指示的改变集合日志。
如果复制请求响应指示成功,则次写入器实例在块1304确定对应改变已经完成。如果整个改变集合已经完成,则控制流向块1317。如果整个改变集合尚未完成,则控制流向块1319。
在块1317,次写入器实例生成改变集合成功地完成的通知。次写入器实例可以生成标识改变集合和成功指示的响应。然后经由同步引擎向请求节点(即,主端点节点)供应成功指示。次写入器可以被编程为传递回对在改变集合中的复制请求之一的响应而不是生成改变集合成功通知。次写入器可以根据用于改变集合的定序信息向请求节点返回对在改变集合中的最后请求的响应。用于改变集合的最后改变请求的这一响应可以操作作为向在主端点节点的传播器实例的用于整个改变集合的成功通知。
在块1319,次写入器实例标记在登台日志中的特定请求为成功地完成。
在块1321,次写入器实例继续遍历登台日志。次写入器实例根据为在登台日志中的请求而被指示的排序选择在登台日志中的下一未标记的请求。次写入器实例向下层文件系统供应这一选择的请求。
从示例说明的变化
提供流体以辅助理解示例而没有用来限制权利要求的范围。流程图描绘了可以在公开内容的方面之中变化的示例操作。可以执行附加操作;可以执行更少操作;可以并行执行操作;以及可以按照不同顺序执行操作。例如,截获器可以仅向传播器传递请求。传播器可以被编程为确定改变请求的目标是否在同步关系中。作为另一变化示例,无论同步配置如何都可以执行块615。取代没有暗示半同步关系的跟踪数据和向请求者供应回响应,可以维护用于每个请求的跟踪数据。流程图的操作中的一些操作描述是否已经为端点对实例化线程或者进程。可以设计没有使用持续线程的架构。取而代之,每端点对存储状态数据。这一状态数据持续直至在对应请求完成或者失败之后被清除。这避免在等待状态中的消耗资源的线程。作为另一示例,传播器实例可以跟踪向次端点节点而不是定序器的请求的状态或者除了向定序器之外还跟踪向次端点节点的请求的状态。无论改变集合的特定动作者跟踪状态如何,在改变集合中的个别请求的状态无碍于在已经在主端点执行改变之后向请求者做出响应。因此,无需跟踪在改变集合中的个别请求的状态。在图7中,块711描述向产生的进程线程传递关闭的改变集合日志。可以对处理开放的日志的架构进行编程或者设计。架构可以每当添加请求和更新定序信息、消除多余改变等时处理改变集合日志。在关闭改变集合日志时,它已经被排序和准备好向与次端点关联的节点传达。
可以用除了在流程图中描绘的方式之外的方式传达失败通信。例如,可以没有记录失败指示(例如,块1311),因为生成失败通知。对于失败的改变集合,次写入器实例可以传递回用于在改变集合中的请求之一的失败响应。在请求节点的传播器实例可以确定哪个关闭的改变集合日志对应于失败响应并且标记改变集合日志为失败。
此外,可以执行没有被描绘的附加操作。例如,可以产生监视改变集合日志的监视线程。监视线程可以比对定义的RPO评估改变集合的生命时间。活跃改变集合日志或者进行中改变集合日志是仍然等待来自主端点节点或者次端点节点的响应的关闭的改变集合日志。监视线程评估改变集合开始时间以确定RPO时间已经流逝。如果是,则监视线程可以提示定序器线程标记改变集合为失败或者自行标记改变集合为失败。
虽然本描述涉及被配对用于同步关系的个别逻辑存储对象,但是同步关系的“端点”可以是逻辑存储对象组。例如,一组文件或者一组LUN可以在与另一组逻辑存储对象的同步关系中。节点可以维护附加数据以将组标识符化解成作为组的成员的逻辑存储对象。
如本领域技术人员将认识的那样,可以实施公开内容的方面为系统、方法或者计算机程序产品。因而,公开内容的方面可以采用硬件方面、软件方面(包括固件、常驻软件、微代码等)或者一个组合软件和硬件方面的方面的形式,这些都可以这里一般地被称为“电路”、“模块”或者“系统”。另外,公开内容的方面可以采用在一个或者多个计算机可读介质中体现的计算机程序产品的形式,该一个或者多个计算机可读介质具有在其上体现的计算机可读程序代码。
可以利用一个或者多个计算机可读介质的任何组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质可以例如是但不限于电子、磁、光、电磁、红外线或者半导体系统、装置或者设备或者前述示例的任何适当组合。计算机可读存储介质的更多具体示例(非穷尽列表)可以包括以下各项:具有一个或者多个接线的电连接、便携计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或者闪存)、光存储设备、磁存储设备或者前述示例的任何适当组合。在本文的上下文中,计算机可读存储介质可以是任何可以包含或者存储用于由或者结合指令执行系统、装置或者设备使用的程序的有形介质。
计算机可读信号介质可以包括例如在基带中或者作为载波的部分的、传播的数据信号,该数据信号具有在其上体现的计算机可读程序代码。这样的传播的信号可以采用包括但不限于电磁信号、光信号、红外线信号或者其任何适当组合的多种形式中的任何形式。计算机可读信号介质可以是任何计算机可读介质,该计算机可读介质不是计算机可读存储介质并且可以传达、传播或者传送用于由或者结合指令执行系统、装置或者设备使用的程序。可以使用包括但不限于无线、有线、光纤线缆、射频或者前述示例的任何适当组合来传输在计算机可读介质上体现的程序代码。
可以用包括面向对象的编程语言、比如编程语言、C++等;动态编程语言、比如Python;脚本语言、比如Perl编程语言或者PowerShell脚本语言;以及常规过程编程语言、比如“C”编程语言或者相似编程语言的一个或者多个编程语言的任何组合编写用于实现用于公开内容的方面的操作的计算机程序代码。程序代码可以完全地在单独计算机上执行、可以用跨多个计算机的分布式方式执行以及可以在一个计算机上执行并且又在另一计算机上提供结果和/或接受输入。
参照根据公开内容的方面的方法、装置(系统)和计算机程序产品的流程图图示和/或框图描述了公开内容的方面。将理解,流程图图示和/或框图的每个块以及流程图图示和/或框图中的块组合可以由计算机程序指令实施。可以向通用计算机、专用计算机或者其它可编程数据处理装置的处理器提供这些计算机程序指令以产生机器,从而使得经由计算机或者其它可编程数据处理装置的处理器执行的指令产生用于实施由在流程图和/或框图的一个或者多个块中指定的功能/动作的部件。
这些计算机程序指令也可以被存储在计算机可读介质中,该计算机可读介质指引计算机、其它可编程数据处理装置或者其它设备以特定方式工作,从而使得在计算机可读介质中存储的指令产生包括指令的制造品,这些指令实施在流程图和/或框图的一个或者多个块中指定的功能/动作。
计算机程序指令也可以被加载到计算机、其它可编程数据处理装置或者其它设备上以使系列操作步骤在计算机、其它可编程装置或者其它设备上被执行以产生计算机实施的过程,从而使得在计算机或者其它可编程装置上执行的指令提供用于实施在流程图和/或框图的一个或者多个块中指定的功能/动作的过程。
图14描绘了具有基于存储群集的全同步和半同步传播引擎的示例计算机系统。计算机系统包括处理器单元1401(可能地包括多个处理器、多个核、多个节点和/或实施多线程化等)。计算机系统包括存储器1407。存储器1407可以是系统存储器(例如,高速缓存、SRAMDRAM、零电容器RAM、双晶体管RAM、eDRAM、EDO RAM、DDR RAM、EEPROM、NRAM、RRAM、SONOS、PROM等中的一项或者多项)或者机器可读介质的以上已经描述的可能实现中的任何一个或者多个实现。计算机系统也包括总线1403(例如,PCI、ISA、PCI-Express、总线、InfiniBand@总线、NuBus等)和网络接口1405(例如,ATM接口、以太网接口、帧中继接口、SONET接口、无线接口、iSCSI、光纤通道等)。计算系统也包括基于存储群集的粒度全同步和半同步传播引擎1411。基于存储群集的粒度全同步和半同步传播引擎1411如以上描述的那样处置以在同步关系中的端点为目标的文件系统改变请求对应的请求和响应。可以部分地(或者完全地)在硬件中和/或在处理单元1401上实施这些功能中的任何功能。例如,可以用专用集成电路、在处理单元1401中实施的逻辑中、在外围设备或者卡上的协同处理器中等实施功能。另外,实现可以包括比图14中所示更少或者附加的部件(例如,视频卡、音频卡、附加网络接口、外围设备等)。处理器单元1401、存储设备1409和网络接口1405耦合到总线1403。虽然被图示为耦合到总线1403,但是存储器1407可以耦合到处理器单元1401。
尽管参照各种实现方式和运用描述了公开内容的方面,但是将理解,公开内容的这些方面为说明性的并且本发明主题内容的范围不限于此。一般而言,可以用与任何一个或者多个硬件系统一致的设施来实施如这里描述的用于跨群集节点的逻辑存储对象粒度同步的技术。许多变化、修改、添加和改进是有可能的。
可以对于这里描述为单个实例的部件、操作或者结构提供多实例。最后,在各种部件、操作和数据存储库之间的边界有些任意,并且在具体示例配置的上下文中举例说明特定操作。其它功能分配被设想并且可以落入本发明主题内容的范围内。一般而言,可以实施在示例配置中呈现为分离部件的结构和功能作为组合的结构或者部件。相似地,可以实施呈现为单个部件的结构和功能作为分离部件。这些和其它变化、修改、添加和改进可以落入本发明主题内容的范围内。
Claims (20)
1.一种方法,包括:
在从存储协议输入/输出请求生成文件系统请求之后,确定被指示为所述存储协议输入/输出请求的目标的第一逻辑存储对象如在同步配置数据中被指示的那样与第二逻辑存储对象具有同步关系;
确定多个同步关系类型中的哪个同步关系类型针对所述同步配置数据中的所述同步关系而被指示;
对于所述多个同步关系类型中的第一同步关系类型,
记录所述文件系统请求的指示以用于跟踪所述文件系统请求;
向文件系统供应所述文件系统请求,其中所述文件系统访问主控所述第一逻辑存储对象的一个或者多个存储单元;
基于所述文件系统请求来生成请求,其中生成的所述请求将所述第二逻辑存储对象指示为目标;
供应生成的所述请求以用于向与所述第二逻辑存储对象关联的节点传输;以及
如果由所述存储输入/输出请求指示的改变被成功地对所述第一逻辑存储对象做出并且所述改变被成功地对所述第二逻辑存储对象做出,则向所述存储协议输入/输出请求的请求者供应指示所述存储输入/输出请求的成功的响应。
2.根据权利要求1所述的方法,还包括:
对于所述多个同步关系类型中的第二同步关系类型,
在预定义的时间间隔中积累以所述第一逻辑存储对象为目标的多个文件系统请求,其中所述多个文件系统请求包括所述文件系统请求;
向所述文件系统供应所述多个文件系统请求中的每个文件系统请求;
确定积累的所述多个文件系统请求中的指示将对所述第一逻辑存储对象做出的改变的文件系统请求之中的依赖性;
记录定序信息以保留确定的依赖性;以及
向与所述第二逻辑存储对象关联的所述节点供应所述定序信息和指示改变的积累的所述多个文件系统请求,以用于将对所述第二逻辑存储对象做出的那些改变。
3.根据权利要求2所述的方法,还包括消除所述多个文件系统请求中的指示将对所述第一逻辑存储对象做出的改变的多余文件系统请求。
4.根据权利要求2或者3所述的方法,还包括供应元数据,所述元数据指示所述多个文件系统请求的总数,所述多个文件系统请求指示将对所述第一逻辑存储对象做出的改变并且在所述预定义的时间间隔内被积累。
5.根据权利要求4所述的方法,还包括将所述元数据记录到将被供应给与所述第二逻辑存储对象关联的所述节点的所述多个文件系统请求中的每个文件系统请求中。
6.根据权利要求2至5中的任一权利要求所述的方法,其中所述记录所述定序信息包括将所述定序信息记录到具有依赖性并且指示将对所述第一逻辑存储对象做出的改变的所述多个文件系统请求中的每个文件系统请求中。
7.根据任一前述权利要求所述的方法,还包括如果由所述存储输入/输出请求指示的改变没有被成功地对所述第一逻辑存储对象或者所述第二逻辑存储对象做出,则向所述存储输入/输出请求的所述请求者供应指示所述存储输入/输出请求的失败的响应。
8.一种计算机程序,包括机器可读指令,所述机器可读指令在由一个或者多个计算机系统执行时,使得所述一个或者多个计算机系统实施根据任一前述权利要求所述的方法。
9.一种用于跨存储群集维护在逻辑存储对象之中的同步关系的计算机程序产品,所述计算机程序产品包括:
非瞬态机器可读介质,所述非瞬态机器可读介质具有随之体现的程序代码,所述程序代码被配置为:
在来自存储协议输入/输出请求的文件系统请求已经被生成之后,确定被指示为所述存储协议输入/输出请求的目标的第一逻辑存储对象如在同步配置数据中被指示的那样与第二逻辑存储对象具有同步关系;
确定多个同步关系类型中的哪个同步关系类型针对所述同步配置数据中的所述同步关系而被指示;
对于所述多个同步关系类型中的第一同步关系类型,
记录所述文件系统请求的指示以用于跟踪所述文件系统请求;
向文件系统供应所述文件系统请求,其中所述文件系统访问主控所述第一逻辑存储对象的一个或者多个存储单元;
基于所述文件系统请求来生成请求,其中生成的所述请求将所述第二逻辑存储对象指示为目标;
供应生成的所述请求以用于向与所述第二逻辑存储对象关联的节点传输;以及
如果由所述存储输入/输出请求指示的改变被成功地对所述第一逻辑存储对象做出并且所述改变被成功地对所述第二逻辑存储对象做出,则向所述存储协议输入/输出请求的请求者供应指示所述存储输入/输出请求的成功的响应。
10.根据权利要求9所述的计算机程序产品,还包括被配置为执行以下操作的程序代码:
对于所述多个同步关系类型中的第二同步关系类型,
在预定义的时间间隔中积累以所述第一逻辑存储对象为目标的多个文件系统请求,其中所述多个文件系统请求包括所述文件系统请求;
向所述文件系统供应所述多个文件系统请求中的每个文件系统请求;
确定积累的所述多个文件系统请求中的指示将对所述第一逻辑存储对象做出的改变的文件系统请求之中的依赖性;
记录定序信息以保留确定的依赖性;以及
向与所述第二逻辑存储对象关联的所述节点供应所述定序信息和指示改变的积累的所述多个文件系统请求,以用于将对所述第二逻辑存储对象做出的那些改变。
11.根据权利要求10所述的计算机程序产品,还包括用于消除所述多个文件系统请求中的指示将对所述第一逻辑存储对象做出的改变的多余文件系统请求的程序代码。
12.根据权利要求10或者11所述的计算机程序产品,还包括用于供应元数据的程序代码,所述元数据指示所述多个文件系统请求的总数,所述多个文件系统请求指示将对所述第一逻辑存储对象做出的改变并且在所述预定义的时间间隔内被积累。
13.根据权利要求12所述的计算机程序产品,还包括用于将所述元数据记录到将被供应给与所述第二逻辑存储对象关联的所述节点的所述多个文件系统请求中的每个文件系统请求中的程序代码。
14.根据权利要求10至13中的任一权利要求所述的计算机程序产品,其中用于记录所述定序信息的所述程序代码包括用于将所述定序信息记录到具有依赖性并且指示将对所述第一逻辑存储对象做出的改变的所述多个文件系统请求中的每个文件系统请求中。
15.根据权利要求9至14中的任一权利要求所述的计算机程序产品,还包括用于如果由所述存储输入/输出请求指示的改变没有被成功地对所述第一逻辑存储对象或者所述第二逻辑存储对象做出、则向所述存储输入/输出请求的所述请求者供应指示所述存储输入/输出请求的失败的响应的程序代码。
16.一种装置,包括:
处理器;以及
非瞬态机器可读介质,所述非瞬态机器可读介质具有被存储于其中的程序代码,所述程序代码由所述处理器可执行以使得所述装置:
在来自存储协议输入/输出请求的文件系统请求已经被生成之后,确定被指示为所述存储协议输入/输出请求的目标的第一逻辑存储对象如在同步配置数据中被指示的那样与第二逻辑存储对象具有同步关系;
确定多个同步关系类型中的哪个同步关系类型针对所述同步配置数据中的所述同步关系而被指示;
对于所述多个同步关系类型中的第一同步关系类型,
记录所述文件系统请求的指示以用于跟踪所述文件系统请求;
向文件系统供应所述文件系统请求,其中所述文件系统访问主控所述第一逻辑存储对象的一个或者多个存储单元;
基于所述文件系统请求来生成请求,其中生成的所述请求将所述第二逻辑存储对象指示为目标;
供应生成的所述请求以用于向与所述第二逻辑存储对象关联的节点传输;以及
如果由所述存储输入/输出请求指示的改变被成功地对所述第一逻辑存储对象做出并且所述改变被成功地对所述第二逻辑存储对象做出,则向所述存储协议输入/输出请求的请求者供应指示所述存储输入/输出请求的成功的响应。
17.根据权利要求16所述的装置,其中所述程序代码还包括由所述处理器可执行以使得所述装置执行以下操作的程序代码:
对于所述多个同步关系类型中的第二同步关系类型,
在预定义的时间间隔中积累以所述第一逻辑存储对象为目标的多个文件系统请求,其中所述多个文件系统请求包括所述文件系统请求;
向所述文件系统供应所述多个文件系统请求中的每个文件系统请求;
确定积累的所述多个文件系统请求中的指示将对所述第一逻辑存储对象做出的改变的文件系统请求之中的依赖性;
记录定序信息以保留确定的依赖性;以及
向与所述第二逻辑存储对象关联的所述节点供应所述定序信息和指示改变的积累的所述多个文件系统请求,以用于将对所述第二逻辑存储对象做出的那些改变。
18.根据权利要求17所述的装置,其中所述程序代码还包括由所述处理器可执行以使得所述装置消除所述多个文件系统请求中的指示将对所述第一逻辑存储对象做出的改变的多余文件系统请求的程序代码。
19.根据权利要求17或者18所述的装置,其中所述程序代码还包括由所述处理器可执行以使得所述装置供应元数据的程序代码,所述元数据指示所述多个文件系统请求的总数,所述多个文件系统请求指示将对所述第一逻辑存储对象做出的改变并且在所述预定义的时间间隔内被积累。
20.根据权利要求16至19中的任一权利要求所述的装置,其中所述程序代码还包括由所述处理器可执行以使得所述装置如果由所述存储输入/输出请求指示的改变没有被成功地对所述第一逻辑存储对象或者所述第二逻辑存储对象做出、则向所述存储输入/输出请求的所述请求者供应指示所述存储输入/输出请求的失败的响应的程序代码。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/473,621 US9571575B2 (en) | 2014-08-29 | 2014-08-29 | Granular sync/semi-sync architecture |
US14/473,621 | 2014-08-29 | ||
PCT/US2015/043159 WO2016032688A1 (en) | 2014-08-29 | 2015-07-31 | Granular sync/semi-sync architecture |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107111631A true CN107111631A (zh) | 2017-08-29 |
CN107111631B CN107111631B (zh) | 2021-06-08 |
Family
ID=53879789
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580059310.3A Active CN107111631B (zh) | 2014-08-29 | 2015-07-31 | 粒度同步/半同步架构 |
Country Status (5)
Country | Link |
---|---|
US (3) | US9571575B2 (zh) |
EP (1) | EP3186727A1 (zh) |
JP (1) | JP2017531250A (zh) |
CN (1) | CN107111631B (zh) |
WO (1) | WO2016032688A1 (zh) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10051052B2 (en) * | 2014-11-18 | 2018-08-14 | Red Hat, Inc. | Replication with adustable consistency levels |
US10951705B1 (en) | 2014-12-05 | 2021-03-16 | EMC IP Holding Company LLC | Write leases for distributed file systems |
US10936494B1 (en) | 2014-12-05 | 2021-03-02 | EMC IP Holding Company LLC | Site cache manager for a distributed file system |
US10430385B1 (en) | 2014-12-05 | 2019-10-01 | EMC IP Holding Company LLC | Limited deduplication scope for distributed file systems |
US9923768B2 (en) * | 2015-04-14 | 2018-03-20 | International Business Machines Corporation | Replicating configuration between multiple geographically distributed servers using the rest layer, requiring minimal changes to existing service architecture |
WO2016183545A1 (en) | 2015-05-14 | 2016-11-17 | Walleye Software, LLC | Distributed and optimized garbage collection of remote and exported table handle links to update propagation graph nodes |
US10068000B2 (en) * | 2015-10-01 | 2018-09-04 | International Business Machines Corporation | Synchronous input/output replication of data in a persistent storage control unit |
US10063376B2 (en) | 2015-10-01 | 2018-08-28 | International Business Machines Corporation | Access control and security for synchronous input/output links |
US10120818B2 (en) | 2015-10-01 | 2018-11-06 | International Business Machines Corporation | Synchronous input/output command |
US10291739B2 (en) * | 2015-11-19 | 2019-05-14 | Dell Products L.P. | Systems and methods for tracking of cache sector status |
US10872074B2 (en) * | 2016-09-30 | 2020-12-22 | Microsoft Technology Licensing, Llc | Distributed availability groups of databases for data centers |
US11169727B1 (en) * | 2017-03-10 | 2021-11-09 | Pure Storage, Inc. | Synchronous replication between storage systems with virtualized storage |
CN108733541A (zh) * | 2017-04-17 | 2018-11-02 | 伊姆西Ip控股有限责任公司 | 用于实时确定数据复制进度的方法和设备 |
US10002154B1 (en) | 2017-08-24 | 2018-06-19 | Illumon Llc | Computer data system data source having an update propagation graph with feedback cyclicality |
US10628447B1 (en) * | 2018-01-31 | 2020-04-21 | EMC IP Holding Company LLC | Systems and methods for updating data content |
US11132339B2 (en) | 2018-11-13 | 2021-09-28 | Netapp Inc. | Synchronous replication for synchronous mirror copy guarantee |
US11157455B2 (en) | 2019-03-19 | 2021-10-26 | Netapp Inc. | Inofile management and access control list file handle parity |
US11151162B2 (en) | 2019-03-19 | 2021-10-19 | Netapp Inc. | Timestamp consistency for synchronous replication |
US10852985B2 (en) | 2019-03-19 | 2020-12-01 | Netapp Inc. | Persistent hole reservation |
US11086551B2 (en) | 2019-03-19 | 2021-08-10 | Netapp, Inc. | Freeing and utilizing unused inodes |
US11334539B2 (en) * | 2019-07-30 | 2022-05-17 | Salesforce.Com, Inc. | Change-protected database system |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1472667A (zh) * | 2002-08-02 | 2004-02-04 | 无敌科技股份有限公司 | 具有延展性的客户数据系统及其方法 |
CN1794196A (zh) * | 2004-12-21 | 2006-06-28 | 日本电气株式会社 | 确保用于识别容错计算机中的异步原因的时间 |
US7395352B1 (en) * | 2004-03-12 | 2008-07-01 | Netapp, Inc. | Managing data replication relationships |
US20110066592A1 (en) * | 2009-09-14 | 2011-03-17 | International Business Machines Corporation | Real Time Data Replication |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5978813A (en) * | 1995-09-25 | 1999-11-02 | International Business Machines Corporation | System for providing synchronization between a local area network and a distributing computer environment |
JP4689137B2 (ja) * | 2001-08-08 | 2011-05-25 | 株式会社日立製作所 | リモートコピー制御方法、及びストレージシステム |
US6209032B1 (en) * | 1998-10-19 | 2001-03-27 | International Business Machines Corporation | Enabling target servers to control determination of full user synchronization |
US6269406B1 (en) * | 1998-10-19 | 2001-07-31 | International Business Machines Corporation | User group synchronization to manage capabilities in heterogeneous networks |
US7571391B2 (en) * | 2003-10-17 | 2009-08-04 | Sap Ag | Selective rendering of user interface of computer program |
US7149858B1 (en) * | 2003-10-31 | 2006-12-12 | Veritas Operating Corporation | Synchronous replication for system and data security |
US7039661B1 (en) * | 2003-12-29 | 2006-05-02 | Veritas Operating Corporation | Coordinated dirty block tracking |
US7490083B2 (en) | 2004-02-27 | 2009-02-10 | International Business Machines Corporation | Parallel apply processing in data replication with preservation of transaction integrity and source ordering of dependent updates |
US8214887B2 (en) * | 2005-03-20 | 2012-07-03 | Actividentity (Australia) Pty Ltd. | Method and system for providing user access to a secure application |
US7702851B2 (en) * | 2005-09-20 | 2010-04-20 | Hitachi, Ltd. | Logical volume transfer method and storage network system |
JP4842720B2 (ja) * | 2006-06-29 | 2011-12-21 | 株式会社日立製作所 | ストレージシステム及びデータ複製方法 |
JP5022773B2 (ja) * | 2007-05-17 | 2012-09-12 | 株式会社日立製作所 | ジャーナルを利用したリモートコピーのコピー先となるストレージシステムの消費電力を節約する方法及びシステム |
US8176363B2 (en) * | 2008-12-08 | 2012-05-08 | International Business Machines Corporation | Efficient method and apparatus for keeping track of in flight data in a dual node storage controller |
US8495250B2 (en) | 2009-12-16 | 2013-07-23 | International Business Machines Corporation | Asynchronous file operations in a scalable multi-node file system cache for a remote cluster file system |
US8381217B1 (en) * | 2010-04-30 | 2013-02-19 | Netapp, Inc. | System and method for preventing resource over-commitment due to remote management in a clustered network storage system |
US8452856B1 (en) * | 2010-08-04 | 2013-05-28 | Netapp, Inc. | Non-disruptive storage server migration |
US8667236B2 (en) * | 2010-09-29 | 2014-03-04 | Hewlett-Packard Development Company, L.P. | Host based write ordering for asynchronous replication |
US8868492B2 (en) * | 2011-06-15 | 2014-10-21 | Oracle International Corporation | Method for maximizing throughput and minimizing transactions response times on the primary system in the presence of a zero data loss standby replica |
JP5699852B2 (ja) * | 2011-08-12 | 2015-04-15 | 富士通株式会社 | 情報処理装置、ストレージ制御方法およびプログラム |
CN102739281B (zh) * | 2012-06-30 | 2015-04-15 | 华为技术有限公司 | 一种调度的实现方法、装置及系统 |
US9507843B1 (en) * | 2013-09-20 | 2016-11-29 | Amazon Technologies, Inc. | Efficient replication of distributed storage changes for read-only nodes of a distributed database |
-
2014
- 2014-08-29 US US14/473,621 patent/US9571575B2/en active Active
-
2015
- 2015-07-31 EP EP15751194.0A patent/EP3186727A1/en not_active Withdrawn
- 2015-07-31 WO PCT/US2015/043159 patent/WO2016032688A1/en active Application Filing
- 2015-07-31 CN CN201580059310.3A patent/CN107111631B/zh active Active
- 2015-07-31 JP JP2017511735A patent/JP2017531250A/ja not_active Ceased
-
2017
- 2017-02-13 US US15/431,063 patent/US9848043B2/en active Active
- 2017-12-18 US US15/844,705 patent/US10135922B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1472667A (zh) * | 2002-08-02 | 2004-02-04 | 无敌科技股份有限公司 | 具有延展性的客户数据系统及其方法 |
US7395352B1 (en) * | 2004-03-12 | 2008-07-01 | Netapp, Inc. | Managing data replication relationships |
CN1794196A (zh) * | 2004-12-21 | 2006-06-28 | 日本电气株式会社 | 确保用于识别容错计算机中的异步原因的时间 |
US20110066592A1 (en) * | 2009-09-14 | 2011-03-17 | International Business Machines Corporation | Real Time Data Replication |
Also Published As
Publication number | Publication date |
---|---|
US20170155716A1 (en) | 2017-06-01 |
JP2017531250A (ja) | 2017-10-19 |
US10135922B2 (en) | 2018-11-20 |
WO2016032688A1 (en) | 2016-03-03 |
US20160065670A1 (en) | 2016-03-03 |
CN107111631B (zh) | 2021-06-08 |
EP3186727A1 (en) | 2017-07-05 |
US9848043B2 (en) | 2017-12-19 |
US20180124172A1 (en) | 2018-05-03 |
US9571575B2 (en) | 2017-02-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107111631A (zh) | 粒度同步/半同步架构 | |
US11093139B1 (en) | Durably storing data within a virtual storage system | |
US11086555B1 (en) | Synchronously replicating datasets | |
US20210019093A1 (en) | Efficient transfers between tiers of a virtual storage system | |
US11349917B2 (en) | Replication handling among distinct networks | |
US11704044B2 (en) | Modifying a cloned image of replica data | |
US20220083245A1 (en) | Declarative provisioning of storage | |
US20220263897A1 (en) | Replicating Multiple Storage Systems Utilizing Coordinated Snapshots | |
US8161321B2 (en) | Virtual machine-based on-demand parallel disaster recovery system and the method thereof | |
WO2021011051A1 (en) | Data recovery in a virtual storage system | |
DE112020003423T5 (de) | Architektur von virtuellem speichersystem | |
WO2019226597A1 (en) | Asynchronous replication of synchronously replicated data | |
CN104081353A (zh) | 可缩放环境中的动态负载平衡 | |
CN104081354A (zh) | 在可缩放环境中管理分区 | |
US20220147490A1 (en) | Replica transitions for file storage | |
CN103593387A (zh) | 在多个阶段高效地存储和检索数据和元数据的方法和系统 | |
US20210303527A1 (en) | Mapping equivalent hosts at distinct replication endpoints | |
AU2022376963A1 (en) | Coordinated checkpoints among storage systems implementing checkpoint-based replication | |
US20230409540A1 (en) | End-to-end restartability of cross-region replication using a new replication | |
US20240094937A1 (en) | Concurrent and non-blocking object deletion for cross-region replications | |
US20240061814A1 (en) | Techniques for maintaining snapshot key consistency involving garbage collection during file system cross-region replication | |
US20240281413A1 (en) | Techniques for replication checkpointing during disaster recovery | |
US20240086417A1 (en) | Techniques for replication-aware resource management and task management of file systems | |
US20240134828A1 (en) | Techniques for efficient encryption and decryption during file system cross-region replication | |
US20240104062A1 (en) | Techniques for resolving snapshot key inter-dependency during file system cross-region replication |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |