CN106716380B - 以近似同步的频率在多个主机上的多流应用的快照和复制的方法和系统 - Google Patents

以近似同步的频率在多个主机上的多流应用的快照和复制的方法和系统 Download PDF

Info

Publication number
CN106716380B
CN106716380B CN201580051566.XA CN201580051566A CN106716380B CN 106716380 B CN106716380 B CN 106716380B CN 201580051566 A CN201580051566 A CN 201580051566A CN 106716380 B CN106716380 B CN 106716380B
Authority
CN
China
Prior art keywords
log
stage
switching
agency
request
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.)
Active
Application number
CN201580051566.XA
Other languages
English (en)
Other versions
CN106716380A (zh
Inventor
S·科塔基里
R·纽瓦斯卡
A·布哈弗
Y·乔希
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN106716380A publication Critical patent/CN106716380A/zh
Application granted granted Critical
Publication of CN106716380B publication Critical patent/CN106716380B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2094Redundant storage or storage space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2097Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements maintaining the standby controller/processing unit updated
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1471Saving, restoring, recovering or retrying involving logging of persistent data for recovery
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/815Virtual
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/82Solving problems relating to consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/825Indexing scheme relating to error detection, to error correction, and to monitoring the problem or solution involving locking

Abstract

从一个或多个应用接收存储访问请求。多个服务器根据存储访问请求指示更新多个虚拟盘。虚拟盘存储跨虚拟盘的依赖写顺序的数据。日志与虚拟磁盘相关联。与每个存储访问请求相关联的信息被存储在日志之一中。执行日志切换的循环。写命令一致性跟踪协调器与服务器处的代理协调日志切换以维持请求排序。复制协调器协调切换出的日志文件从主存储器到副本存储器的应用,在副本侧创建与主侧匹配的写顺序一致点,并且提供关于日志传送的故障弹性。复制日志可以在副本侧从主侧上的服务器单独接收,以实现日志的高度可扩展的并行/同时传输。

Description

以近似同步的频率在多个主机上的多流应用的快照和复制的 方法和系统
技术领域
本公开的实施例总体涉及数据存储,更具体地,涉及用于写顺序一致性跟踪的方法、系统和计算机程序产品。
背景技术
随着计算机已经变得越来越普遍,个人和企业已经变得越来越依赖于可靠的计算机系统。可以实现恢复机制以防止各种故障,诸如电源故障,硬件和/或软件错误等。计算机的操作系统和/或其他控制程序可以提供各种恢复机制。
存储复制可以用于防止所存储的数据的丢失。根据存储复制,多个存储单元可以用于冗余地存储相同的数据。以这种方式,在存储单元之一故障的情况下保持数据的冗余副本。存在各种类型的存储复制。例如,可以使用同步复制,其确保在主存储和备份(或“副本”) 存储两者中完成任何数据写入。备选地,可以使用异步复制,其中当数据的写入由主存储确认时,其通常被认为是完成的。数据也被写入到备份存储,但经常具有小的时滞。因此,不保证备份存储始终与主存储器同步。
高可用性集群(也称为HA集群或故障转移集群)是经常使用异步存储复制的计算机组。HA集群使用组或集群中的冗余计算机,它们在系统组件发生故障时提供持续服务。在没有集群的情况下,如果运行特定应用的服务器崩溃,应用将不可用,直到崩溃的服务器被修复。HA集群通过检测硬件/软件故障并立即在另一系统上重新启动应用而不需要管理干预(称为故障转移的过程)来解决这种情况。HA 集群通常用于关键数据库、网络上的文件共享、商业应用和客户服务 (如电子商务网站)。HA集群实现试图将冗余构建到集群中以消除单点故障,包括使用多个网络连接和经由存储区域网冗余连接的数据存储。
发明内容
提供本发明内容从而以简化的形式介绍下面在具体实施方式中进一步描述的概念的选集。本发明内容不旨在标识要求保护的主题的关键特征或必要特征,也不旨在用于限制要求保护的主题的范围。
提供了用于写顺序一致的跟踪的方法,系统和计算机程序产品。从一个或多个应用(例如,分布式应用)接收存储访问请求,诸如写请求。多个服务器处的存储请求处理模块按照存储访问请求的指示更新多个虚拟盘。虚拟盘是存储跨虚拟盘的依赖写顺序的数据的主存储。日志与虚拟磁盘相关联。复制管理模块将与每个存储访问请求相关联的信息存储在与虚拟盘相关联的日志之一中。对日志执行日志切换循环。写顺序一致性跟踪协调器与服务器处的代理协调日志切换以维持请求排序。复制协调器协调切换出的日志文件对于副本存储的应用,以使副本存储与主存储同步。
下面参照附图详细描述本发明的其它特征和优点,以及本发明的各种实施例的结构和操作。注意,本发明不限于本文所描述的具体实施例。这些实施例在此仅出于说明的目的而呈现。基于本文包含的教导,其他实施例对于相关领域的技术人员将是显而易见的。
附图说明
并入本文中并且形成说明书的一部分的附图示出了本申请的实施例,并且与描述一起进一步用于解释实施例的原理,并且使得相关领域的技术人员技术能够制造和使用实施例。
图1示出了根据一个或多个实施例的当切换虚拟盘复制日志时实现请求排序支持的示例系统。
图2示出了根据一个或多个实施例的当切换虚拟盘复制日志时实现请求排序支持的另一示例系统。
图3示出根据一个或多个实施例的用于当切换虚拟盘复制日志时实现请求排序支持的示例架构。
图4是示出根据一个或多个实施例的用于当切换虚拟盘复制日志时实现请求排序支持的示例过程的流程图。
图5是示出根据一个或多个实施例的用于当切换虚拟盘复制日志时实现请求排序支持的示例状态的状态图。
图6是示出根据一个或多个实施例的用于当切换虚拟盘复制日志时实现请求排序支持的示例过程的流程图。
图7示出根据示例实施例的包括存储依赖写顺序的数据的多个虚拟盘的系统的框图,并且该系统以维持跨虚拟盘的写顺序依赖性的方式来实现虚拟盘复制日志的切换。
图8示出了根据示例实施例的提供用于以维持跨虚拟盘的写顺序依赖性的方式来切换虚拟盘复制日志的过程的流程图。
图9示出根据示例实施例的写顺序一致性跟踪协调器的框图。
图10示出根据示例实施例的提供用于发起日志切换的过程的流程图。
图11和图12示出根据示例实施例的使用锁定文件来协调日志切换的系统的框图。
图13示出根据示例实施例的提供用于协调日志切换阶段的过程的流程图。
图14示出根据示例实施例的用于使用控制代码来协调日志切换的过程。
图15示出根据示例实施例的提供用于使用控制代码来协调日志切换阶段的过程的流程图。
图16示出根据示例实施例的包括用于协调日志切换和将虚拟盘复制日志应用于副本存储的复制协调器的系统的框图。
图17示出根据示例实施例的提供用于协调日志切换和将虚拟盘复制日志应用于副本存储的过程的流程图。
图18示出了可以用于实现实施例的示例计算设备的框图。
从下面结合附图给出的详细描述中,本发明的特征和优点将变得更加明显,其中相同的附图标记始终标识相应的元件。在附图中,相同的附图标记通常指示相同、功能上相似和/或结构上相似的元件。元件首次出现的附图由相应附图标记中最左边的数字指示。
具体实施方式
I.介绍
本说明书和附图公开了并入本发明的特征的一个或多个实施例。本发明的范围不限于所公开的实施例。所公开的实施例仅仅例示本发明,并且本发明也包含所公开的实施例的修改版本。本发明的实施例由所附的权利要求限定。
说明书中对“一个实施例”,“实施例”,“示例实施例”等的引用指示所描述的实施例可以包括特定特征、结构或特性,但每个实施例可以不必包括该特定特征、结构或特性。此外,这样的短语不一定指的是相同的实施例。此外,当结合实施例描述特定特征、结构或特性时,将认为无论是否明确描述,结合其他实施例实现这样的特征在本领域技术人员的知识范围内。
下面描述了许多示例性实施例。注意,本文提供的任何章节/子章节标题并不旨在是限制性的。贯穿本文档描述了实施例,并且任何类型的实施例可以被包括在任何章节/子章节下。此外,在任何章节/子章节中公开的实施例可以以任何方式与在相同章节/子章节和/或不同章节/子章节中描述的任何其它实施例组合。
在本文中讨论了当切换虚拟盘复制日志时的请求排序支持。从虚拟机接收存储访问请求,例如写请求。存储请求处理模块根据存储访问请求中的每个存储访问请求的指示来更新多个虚拟盘之一。另外,复制管理模块在多个日志之一中存储与每个存储访问请求相关联的信息。日志可以以各种间隔和/或响应于各种事件被传送到恢复设备,这导致切换日志,使得复制管理模块将与每个存储访问请求相关联的信息存储在新日志中,并且先前的(旧的)日志被传送到恢复设备。在该切换期间,至少部分地通过阻止与每个存储访问请求相关联的信息的处理来维持针对依赖写顺序的请求的请求排序。
本文中关于虚拟机来讨论各种实施例。虚拟化通常指从物理资源的抽象。硬件仿真涉及代表操作系统通常将与之交互的硬件的软件的使用。硬件仿真软件可以支持客户操作系统,并且诸如管理程序的虚拟化软件可以建立客户操作系统在其上操作的虚拟机(VM)。本文中的许多描述是在虚拟机的上下文中描述的,但是本文讨论的技术同样适用于不采用虚拟化的物理机器。
为了在故障的情况下启用设备的恢复,将与该设备相关联的信息提供给恢复设备。在虚拟机的上下文中,可以提供基本复制,并且当虚拟机正在其主设备上运行时,可以提供对该基本复制的更新或改变。
本文讨论的技术支持其中不需要差分盘或其他类似机制来提供虚拟存储复制和虚拟机恢复的系统。在一个或多个实施例中,也称为复制日志的一个或多个日志(例如,日志文件)被创建,其捕获对包括虚拟盘的存储设备进行的改变。在一个虚拟机实施例中,可以通过保留排队以包括在虚拟盘中的改变请求的副本来创建日志。日志处理和更新可以与更新虚拟盘的处理并行地执行,使得复制的数据被创建而没有附加的延迟,并且可以以这样的方式来准备日志,该方式使得其可以容易地被传送到恢复设备,同时将对每秒输入/输出操作 (IOPS)的影响限制为正在运行的工作负载。因此,虽然除了当用于其它目的的诸如差分盘的技术之外可以使用本文所讨论的技术,但是根据本公开,可以在不存在任何差分盘的情况下实现复制。
在一个或多个实施例中,去往虚拟盘的虚拟机的写请求被复制到日志数据结构,诸如日志队列。日志条目从队列中被获取并被处理为日志。对日志的写入可以在与诸如虚拟盘、磁盘或其他物理存储的存储相对的存储器中被累积。写请求信息可以在写入物理盘之前在存储器中被累积,以便例如减少对虚拟机内的工作负载性能和响应时间的影响。对日志的写入可以与对虚拟盘文件(例如,虚拟硬盘或“VHD”文件)的写入等协调,促进虚拟机的应用一致性快照。此外,日志格式可以对于虚拟硬盘文件格式和类型是不可知的,使得其能够用于捕获对任何类型和格式的虚拟盘的改变。
以下章节描述用于切换与存储相关联的复制日志的实施例。针对新日志而切换出当前日志(例如,已用于存储并行地应用于主存储的存储请求的指示的日志文件)。然后可以将当前日志应用于副本存储以在保持写顺序依赖性的同时将副本存储与主存储同步。后续章节描述用于切换与多个主存储实例相关联的多个复制日志的实施例,其中写顺序依赖性是跨主存储实例(例如,由分布式应用写入的存储实例等)而存在的。接下来是又一章节,其描述了用于以维持跨复制存储的多个实例的写顺序依赖性的方式来将复制日志应用到复制存储的实施例。
II.切换虚拟磁盘复制日志时请求订购支持的示例实施例
图1示出了根据一个或多个实施例的当切换虚拟盘复制日志时实现请求排序支持的示例系统100。存储访问请求102可以由诸如虚拟机(VM)104的任何源提供。尽管被示为由虚拟机104提供,但是存储请求102可以附加地或备选地由其他组件或模块提供,诸如处理器或其他源。存储访问请求102可以是任何类型的存储访问请求,诸如写请求、用于扩展或收缩盘的请求、或可以导致对盘的改变的任何其他存储操作。在一个或多个实施例中,存储访问请求102表示用于存储数据的写请求。
在所示实施例中,数据被存储在一个或多个虚拟盘106中,每个虚拟盘106可以表示存储在物理存储介质上的一个或多个文件。存储请求处理模块108引导并处理到虚拟磁盘106的传入请求102。例如,请求102可以表示在存储请求处理模块108处临时缓冲直到它们能够用于更新虚拟磁盘106的写请求。每个虚拟盘106可以包括单个虚拟存储文件(例如,VHD文件)或多个文件(例如,VHD文件和一个或多个差分盘文件(也称为AVHD文件))。因此,例如,可以对表示虚拟磁盘106的单个文件进行对虚拟磁盘106的改变,并且为了复制的目的可以使用本文所讨论的日志来代替差分盘或虚拟磁盘106 的类似状态。
复制管理模块110接收在存储请求处理模块108处正被接收的相同存储访问请求102。存储访问请求102可以以不同的方式被接收,诸如从虚拟机104、从中间模块(未示出)、从存储请求处理模块108 本身等。在一个或多个实施例中,复制管理模块110与存储请求处理模块108集成地实现。在这种情况下,复制管理模块110可以当在存储请求处理模块108处接收到请求102时接收存储访问请求102的副本,或存储请求处理模块108可以创建存储访问请求102的副本并将其提供给复制管理模块110。应当注意,诸如存储请求处理模块108和复制管理模块110的模块可以以不同的方式实现。例如,模块108 和/或模块110可以在虚拟机104内被提供,可以由管理程序提供,可以由父分区操作系统或其他操作系统等提供。
复制管理模块110可以与存储请求处理模块108对存储访问请求 102的缓冲和/或处理并行地缓冲存储访问请求102。缓冲的存储访问请求102被写入一个或多个日志112,诸如日志文件,以用于复制目的并且通常不会显著影响存储IOPS。典型地,每个虚拟盘106具有相应的日志112。当响应于虚拟机104处理而对写请求或其他存储访问请求102进行处理以更新虚拟盘106时,复制管理模块110在一个或多个日志112中跟踪对虚拟盘106的改变。
以各种间隔和/或响应于各种事件,日志112可以诸如经由发射器 114被传输到别处(例如,到恢复设备),其中恢复系统或虚拟机可以被实例化以复制虚拟机器104。可以是独立的发射器或与另一设备 (例如,收发器、网络接口模块等)相关联的发射器114可以将日志 112提供给作为虚拟磁盘106的至少一部分的恢复副本的、诸如恢复系统或服务器的目的地。当一个日志被传输到别处时,正被传送的日志被称为旧日志,并且新日志被创建。然后将缓冲的存储访问请求写入新日志,而不是旧日志。从将存储访问请求存储在新日志中而不是在旧日志中的改变的该过程也被称为日志切换。
图2示出了根据一个或多个实施例的当切换虚拟盘复制日志时实现请求排序支持的另一示例系统200。系统200类似于图1的系统100,包括存储(例如,写)请求102、一个或多个虚拟盘106、存储请求处理模块108和复制管理模块110。在系统200中,虚拟机或其他源发出写请求102,其将最终改变数据被写入其中的一个或多个虚拟盘 106。存储请求处理模块108和复制管理模块110两者都接收写请求 102。当存储请求处理模块108处理写请求102以用于包括在虚拟盘 106上时,复制管理模块110将写请求102排队以用于写入到一个或多个日志202。
在一个或多个实施例中,在存储器204(例如,随机存取存储器) 中捕获日志202以相对于涉及写入盘(诸如,差分盘)的解决方案减少输入/输出(I/O)处理并且提高IOPS。每个日志202可以以期望的规则或不规则间隔被写入存储206(例如,磁盘或光盘、闪速存储器驱动器等),期望的规则或不规则间隔例如固定间隔、随机间隔、基于触发事件的间隔(例如,存储器204中的所有日志202的大小、存储器204中的特定日志202的大小等)等。复制管理模块110包括存储写控制模块208,其确定如由一个或多个日志210所示存储器204 中的日志202何时将被写入存储206。在一个或多个实施例中,当已经针对日志202而分配的存储器达到阈值时,存储写控制模块208将日志202写入到存储器206作为日志210。每个日志210通常是存储 206中的单个文件,但是备选地可以是多个文件和/或文件的部分(例如,多个日志可以被存储在单个日志文件中)。例如,当针对日志202 所分配的存储器达到90%容量时,日志202从存储器204到存储器 206中的日志210的写入可以发生。在一个或多个实施例中,如下文更详细讨论的,当用于对应虚拟磁盘106的日志要被切换到新日志时,存储写控制模块208还将日志202写入存储器206作为日志210。通过在存储器204中累积写请求102并且不经常将日志写入物理存储器 206,可以减少对虚拟机工作负载性能和虚拟机内部的响应时间的影响。
以各种间隔和/或响应于各种事件,日志202和/或日志210可以例如经由发射器114被传输到别处,如上面参考图1所讨论的。当一个日志被传输到别处时,缓冲存储访问请求之后被写入新日志而不是旧日志。
在图1的系统100中和图2的系统200中,虚拟机或其他源可以发出具有特定排序要求的存储访问请求。例如,虚拟机中的数据库、邮件服务器或其他应用可以实现它们自己的恢复机制,并且作为那些恢复机制的一部分期望使特定存储访问请求(例如,特定写入)以特定顺序发生。如下面更详细地讨论的,复制管理模块110在切换日志时考虑这些排序要求。
图3示出了根据一个或多个实施例的当切换虚拟盘复制日志时实现请求排序支持的示例架构300。架构300可以实现例如图1的系统 100或图2的系统200。参考是I/O写请求的存储访问请求来讨论架构300,尽管各种其他类型的存储访问请求也可以由架构300处理。在示例架构300中,写请求被实现为小型计算机系统接口(SCSI)请求块(SRB)302。SRB302是其中I/O请求可以被提交给存储设备的代表性方式。SRB 302可以包括信息,诸如用于向设备发送的命令、缓冲器位置和大小等。在一个或多个实施例中,对虚拟盘的每个改变请求具有SRB 302的形式。虽然作为示例讨论了SRB,但应当注意,各种其它I/O请求类型可以与本文讨论的技术一起使用。
在所示示例中,SRB 302由到示出为虚拟硬盘(VHD)接口304 (例如,其可以在VHD解析器系统或.sys文件中实现)的上层的接口提供。在该示例中,VHD接口304表示到上层的内部接口,其执行内部转换并将SRB 302发送到复制管理模块,在图3中复制管理模块是虚拟盘解析器306的一部分。还可以经由VHD接口308提供存储请求,VHD接口308也是到上层的接口,其中存储请求可以经由输入/输出控制(IOCTL)调用310来被提供,输入/输出控制(IOCTL) 调用310由虚拟盘解析器306的IOCTL处理器312处理。IOCTL处理器312提供接口,通过该接口,虚拟机上的应用可以使用控制代码与设备驱动器直接通信。因此,可以经由一个或多个不同的输入类型来接收存储访问请求。
在一个或多个实施例中,虚拟盘解析器306可以是VHD迷你端口的适配,诸如可从华盛顿州雷德蒙德的微软公司获得的虚拟化系统中可用的VHDMP.sys。假设在该示例中虚拟盘由VHD文件314表示,则用于这样的VHD文件314的存储栈可以包括诸如VHDMP.sys的迷你端口驱动器,其表示VHD解析器306。VHD解析器306使得对存储316中的VHD文件314(例如,磁盘或光盘、闪存驱动器等)的I/O请求能够被发送到主机文件系统。主机文件系统被示为新技术文件系统(NTFS)318,尽管可以备选地使用各种其他主机文件系统。
为了示例的目的,在示例架构300的描述中假设SRB 302包括用于改变诸如VHD文件314的虚拟盘的写请求。源自虚拟机内部的SRB 302到达SRB请求处理器320处的虚拟盘解析器306。在一个或多个实施例中,SRB请求处理器320针对每个SRB 302创建定制数据结构的实例,并且将SRB 302嵌入到该实例内,其被添加到VHD请求队列322。VHD请求队列322维持对等待处理的VHD文件314的写请求。SRB请求处理器320将这些SRB 302添加到队列322,并且如下所述,VHD请求处理模块324从VHD请求队列322中移除写请求以处理写请求。多个代表性VHD请求队列322条目被描绘为V1 330、 V2 332、V3 334和V4 336。VHD请求队列322和VHD请求处理模块324一起可以是图1或图2的存储请求处理模块108。
在一个或多个实施例中,IOCTL处理器312还可以从管理模块接收请求,管理模块诸如作为虚拟化系统的一部分而提供的虚拟机管理服务(VMMS)340(例如,可执行文件或.exe文件)。 VMMS 340通常表示用作用于传入管理请求的交互点的管理服务。VMMS 340可以向IOCTL处理器312提供用于启用和禁用针对虚拟盘的改变跟踪的请求。例如,VMMS 340可以经由IOCTL调用310 向IOCTL处理器312发出请求,这使得日志请求队列342和日志请求处理模块344被初始化。VMMS 340还可以向IOCTL处理器312 提供用于在虚拟机运行时管理日志切换的请求。例如,如下面更详细地讨论的,VMMS 340可以通过切换日志的多个阶段来发出请求以推进虚拟盘解析器306。
当改变跟踪被启用时,针对被添加到VHD请求队列322的SRB 302的定制数据结构的另一实例被创建,并且作为条目被添加到日志请求队列342。在一个或多个实施例中,写请求(例如,SRB 302) 的数据缓冲器可以由用于VHD请求队列322和日志请求队列342两者中的SRB 302的定制数据结构实例共享。日志请求队列342维持等待处理的日志写请求。代表性日志请求队列342条目被描绘为L1 350、 L2 352、L3 354和L4 356。日志请求队列342和VHD请求队列322 的条目彼此对应——包括与VHD请求队列322的条目相同的SRB 302(或引用相同的共享SRB 302)的日志请求队列342的条目被称为对应于VHD请求队列322的条目或与之相关联。日志请求队列342 和日志请求处理模块344一起可以是图1或图2的复制管理模块110。
VHD请求处理模块324从VHD请求队列322的队列条目330-336 中移除排队的写请求以处理写请求。VHD请求处理模块324通过将所请求的数据写入VHD文件314来处理写请求。基于虚拟硬盘格式和类型,在一个或多个实施例中,VHD请求处理模块324经由NTFS 318向VHD文件314发送一个或多个I/O请求分组(IRP)以完成每个写请求。
日志请求处理模块344从日志请求队列342的日志队列条目 350-356中移除排队的写请求以处理该写请求。日志请求处理模块344 通过在日志364中存储包括写请求的日志队列条目350-356来处理写请求或日志队列条目。日志364可以是一个或多个日志文件,并且日志队列条目350-356可以经由NTFS 318被存储到一个或多个日志文件。因此,日志请求队列342被复制到日志364,在所示实施例中,日志364被存储在存储368(例如,磁盘或光盘、闪存驱动器等)中。存储368可以是与其中存储VHD文件的存储316相同或不同的存储。应当注意,在一个或多个实施例中,尽管日志364可以被存储在某些存储器368中,但是日志被高速缓存或以其他方式缓冲在存储器(例如,随机存取存储器)中,直到日志将被发送到存储368时。处理写请求或日志队列条目的日志请求处理模块344包括将包括写请求的日志队列条目350-356存储在这样的高速缓存或缓冲器中。
用于写请求的新日志条目针对每个新的存储请求而被创建,并且被放置在日志请求队列342中,通常基本上与在VHD请求队列322 中针对写请求创建和放置新的VHD请求队列条目并行。类似地,日志请求队列342中的下一写请求被移除并且被复制到日志364,通常基本上与从VHD请求队列322中移除并由VHD请求处理模块324 处理针对写请求的相应条目并行。VHD请求队列322和日志请求队列342通常是先进先出(FIFO)队列,尽管可以备选地使用其它排队技术。
响应于满足两个条件,特定的排队写请求(例如,队列条目 330-336之一中的请求)被认为是完成的:1)针对写请求向VHD文件314发出的IRP中的所有IRP被完成,以及2)与包括写请求的 VHD请求队列条目相对应的日志请求队列条目被写入日志364。被写入日志364的日志请求队列条目指的是被添加到日志的日志请求队列条目,无论日志是否被高速缓存或以其它方式缓冲在存储器中(例如,即使日志并且因此日志请求队列条目正被维持在缓冲器或除存储368 之外的其他存储器中,日志请求队列条目也能够被写入日志364)。响应于特定写请求被完成,VHD解析器306向虚拟机返回针对特定写请求的完成响应,该特定写请求从该虚拟机被接收。完成响应可以由虚拟解析器306的各种组件或模块中的任何组件或模块返回到虚拟机。
在一个或多个实施例中,如以上所讨论的,日志可以被存储(至少临时地)在存储器中。存储在存储器中的日志可以从存储器被直接传输到一个或多个恢复设备。备选地,日志可以被写入物理存储介质 (例如,磁盘或光盘、闪存盘等),并且随后从物理存储介质被传输到别处(例如,到一个或多个恢复设备)。无论日志是从存储器还是从物理存储介质被传输,各种条件可以指示日志何时将被传输到别处。条件可以是例如时间、持续时间、触发事件等。例如,条件可以是特定时间间隔(例如,五分钟)、特定事件(例如,日志文件达到阈值大小和/或具有阈值数量的条目)等。恢复设备可以是各种不同的恢复服务器和/或恢复存储设备中的任一种。
当被称为旧日志的日志被传输到别处(例如,到恢复设备)时,新日志被创建。日志请求处理模块344然后进行至将日志请求队列 342中的条目存储到新日志中。从将日志请求队列342中的条目存储到新日志而不是旧日志的改变的过程也被称为日志切换。
恢复设备是与实现架构300的设备和/或与存储316(和存储368) 分离的存储设备的单独的计算设备。恢复设备接收经传输的日志并且维持或以其他方式使用经传输的日志以用于恢复目的。例如,如果故障将在实现架构300的设备中发生,则由恢复设备接收到的日志可以用于重新创建VHD文件314。恢复设备可以以不同的方式维持或以其它方式使用经传输的日志。在一个或多个实施例中,恢复设备存储日志,如果期望VHD文件314的恢复,则其允许日志中的请求随后被应用于VHD文件314的先前存储的副本(不包括在日志中指示的改变并且被存储在恢复设备或别处的VHD文件314的副本),以便恢复VHD文件314。备选地,日志中的请求可以被处理并应用于VHD 文件314的先前存储的副本(不包括在日志中指示的改变并且被存储在恢复设备或别处的VHD文件314的副本),允许VHD文件314 的复制副本被维持在恢复设备处。日志中的请求可以以与由VHD请求处理模块324如以上所讨论的在处理VHD请求队列322中的请求中所执行的方式类似的方式被处理并应用于VHD文件314的先前存储的副本。
日志364包括来自日志请求队列342的存储请求以及要被恢复和 /或复制的针对VHD文件314的足够的附加数据。日志364可以包括关于来自日志请求队列342和VHD文件314的存储在日志364中的存储请求的各种数据和/或元数据。在一个或多个实施例中,日志364包括报头部分、一个或多个元数据部分、和一个或多个数据部分。一个或多个数据部分包括来自日志请求队列的条目(或者备选地来自日志请求队列的条目的数据),其包括写请求或其他存储请求。
报头部分包括例如用于标识日志的信息、用于指示一个或多个元数据部分的大小的信息、用于指示多少元数据部分被包括在日志中的信息、以及用于指示日志的最后有效数据的位置(日志的结束或EOL) 的信息。报头部分可以包括各种其他信息,诸如日志的版本标识符、指示日志何时被创建(和/或最后修改)的时间戳、日志的大小、用于日志的校验和、错误代码(例如,指示在创建或接收日志中是否发生错误)等。
每个元数据部分包括例如元数据头部和一个或多个元数据条目。元数据提供例如描述对虚拟盘(VHD文件)的改变的信息。例如,元数据头部可以包括元数据头部的大小的指示、日志中先前元数据部分的位置的指示、日志中下一元数据部分的位置的指示、元数据部分中的元数据条目的数量的指示、用于元数据部分的校验和值等。每个元数据条目提供例如关于被修改的虚拟盘地址范围的信息。例如,每个元数据条目可以包括指示虚拟盘上被修改的实际物理地址的字节偏移量、用于元数据条目的校验和值、指示数据部分中的数据的大小的数据长度、指示导致数据部分中的数据的存储请求由VHD解析器接收的时间和/或日期的时间戳值、数据部分中的数据的元操作(例如,写操作、无操作(NOOP)等)等。
在示例架构300中,虽然示出了一个VHD文件314和一个日志 364,但是在一个或多个实施例中,架构300包括多个VHD文件314 (存储在相同和/或不同的存储316中)以及多个日志364(存储在相同和/或不同的存储368中)。VHD解析器306可以包括针对每个VHD 文件的单独的VHD请求队列,其中每个VHD请求队列对应于单个 VHD文件,或者备选地单个VHD请求队列可以对应于多个不同的 VHD文件(并且因此包括针对多个不同的VHD文件的条目)。VHD 解析器306还可以包括针对每个日志的单独的日志请求队列,其中每个日志请求队列对应于单个日志,或者备选地单个日志请求队列可以对应于多个不同的日志(并且因此包括针对多个不同的日志的条目)。
在系统(例如,图1的系统100和/或图2的系统200)或架构(例如,图3的架构300)包括多个日志的情况下,日志切换包括在大约相同时间切换多个日志中的所有日志。然而,通常不存在日志被切换的保证排序,通常不存在一个日志在另一日志之前被切换的依赖性,并且通常不存在日志被切换的保证速度。因此,虚拟机不能依赖于日志以特定顺序被切换。
图4是示出根据一个或多个实施例的用于当切换虚拟盘复制日志时实现请求排序支持的示例过程400的流程图。过程400例如由图1 的系统100、图2的系统200和/或图3的架构300执行,并且可以以硬件、或者硬件与软件和固件中的一者或两者的组合来被实现。过程 400被示为一组动作,并且不限于用于执行各种动作的操作的所示出的顺序。过程400是用于在切换虚拟盘复制日志时实现请求排序支持的示例过程;在此参考不同的附图包括在切换虚拟盘复制日志时实现请求排序支持的附加讨论。
通常,过程400在两个部分中被执行。在第一部分402中,新日志被初始化,并且新日志队列条目的处理被阻止。新日志队列条目的阻止是指日志队列中的条目不被处理(例如,由图3的日志请求处理模块344)并被存储在日志文件中;然而,当新日志队列条目的处理被阻止时,可以将新条目添加到日志请求队列。在第二部分404中,新日志被改变为,新日志队列条目的处理被解除阻止,并且日志的切换被完成。在新日志队列条目的处理被解除阻止之后,日志队列中的条目可以被处理(例如,由图3的日志请求处理模块344)并且被存储在新日志中。
更具体地,第一部分402包括其中新日志被初始化的第一阶段 412。对于被切换的每个日志(例如,每个当前日志),新日志被初始化。初始化新日志是指为新日志生成适当的数据结构、创建适当的头部等。在第一阶段412期间,日志队列条目继续被处理(例如,由图3的日志请求处理模块344),并且VHD请求队列条目继续被处理(例如,由图3的VHD请求处理模块324)。
第一部分402还包括其中新日志队列条目的处理被阻止的阶段 414。阶段414在所有新日志被初始化之后发生(尽管备选地可以在少于所有新日志被初始化之后发生)。在阶段414中,日志队列条目可以被添加到日志请求队列,VHD队列条目可以被添加到VHD请求队列,并且VHD队列条目可以被处理(例如,由图3的VHD请求处理模块324),但日志队列条目不被处理(例如,由图3的日志请求处理模块344)。如上所述,存储请求不被指示为完成,直到VHD 队列条目被处理并且对应的日志队列条目被处理。因此,尽管当新日志队列条目的处理被阻止时VHD队列条目可以被处理,但是因为对应的日志队列条目尚未被处理,所以这样经处理的VHD队列条目中的请求不被指示为已完成。
第二部分404包括阶段416,其中对新日志的改变发生并且新日志队列条目的处理被解除阻止。对于被切换的每个日志,在阶段416 中改变为新日志(在阶段412中被初始化)。改变为新日志是指要被使用的日志的任何指针或其他指示被改变为新日志而不是旧日志(从其切换的日志,并且在阶段414中阻止新日志队列条目的处理之前日志队列请求被存储于其中)。对于正被切换的所有日志,在已经改变为新日志之后,新日志队列条目的处理被解除阻止。在新日志队列条目的处理被解除阻止之后,系统或架构的操作如上所述恢复—— VHD队列条目可以被添加到VHD请求队列并且被处理(例如,由图 3的VHD请求处理模块324),并且日志队列条目可以被添加到日志请求队列并被处理(例如,由图3的日志请求处理模块344)。
第二部分404还包括其中日志的切换被完成的阶段418。完成日志的切换包括用于将旧日志传送到别处(例如,到恢复设备)的各种操作。完成日志的切换可以包括例如将存储器中的旧日志的任何队列条目冲刷至存储、将附加信息添加到旧日志的头部、将旧日志传输到别处等。阶段418通常发生在新日志队列条目的处理被解除阻止之后,尽管阶段416和阶段418可以备选地至少部分地在相同时间被执行 (因此,当在阶段416中正在改变为新日志并且新日志队列条目的处理正被解除阻止时,阶段418中的完成的至少一些完成可以被执行)。
图5是示出根据一个或多个实施例的用于当切换虚拟盘复制日志时实现请求排序支持的示例状态的状态图500。状态图500示出了 VHD解析器(例如,图3的VHD解析器306)的组件或模块或者复制管理模块(例如,图1和图2的模块110)转换经过的不同状态。状态图500参考实现状态图500的开关管理器来被讨论。开关管理器可以是图3的IOCTL处理器312、VHD解析器的另一组件或模块或者或复制管理模块等。用于转换到不同状态的命令或请求由开关管理器从管理服务(或其他模块)接收,例如图3的VMMS 340。3,管理程序的另一组件或模块等。
当启用改变跟踪(例如,启用了本文所述的日志和日志请求队列的使用)时,开关管理器转换到新日志准备好初始化状态502。开关管理器在状态502中等待直到从管理服务接收到初始化新日志命令。如上所述,在某间隔过去、事件放生等之后初始化新日志命令被接收。
响应于初始化新日志命令,开关管理器转换到新日志被初始化状态504。在状态504中,开关管理器初始化(或与一个或多个其他模块或组件通信以初始化)新日志。图4的第一阶段412在新日由处于状态504中的开关管理器实现。在新日志被初始化之后,开关管理器向管理服务通知(例如,向其通信响应)新日志被初始化。
响应于新日志被初始化的通知,管理服务向开关管理器发送块写请求响应。响应于块写请求响应,开关管理器转换到新日志写入被阻止状态506。在状态506中,开关管理器阻止新日志队列条目的处理 (例如,通过通知日志请求处理模块344停止日志队列条目的处理),并且从旧日志改变为新日志。该改变可以是例如向日志请求处理模块 344提供新日志的指示(例如,标识符)。当处于状态506时,图4 的第二阶段414以及第三阶段416的一部分(向新日志的改变)由开关管理器实现。在新日志队列条目的处理被阻止并且向新日志的改变被完成之后,开关管理器向管理服务通知(例如,向其通信响应),新日志队列条目的处理被阻止并且向新日志的改变被完成。
响应于新日志队列条目的处理被阻止并且对新日志的改变被完成的通知,管理服务向开关管理器发送解除阻止写请求响应。响应于解除阻止写请求响应,开关管理器转换到新日志写入被解除阻止状态 508。在状态508中,开关管理器解除阻止新日志队列条目的处理(例如,通过通知日志请求处理模块344恢复日志队列条目的处理),并且完成日志的切换。如上所述,可以在完成日志的切换中执行各种操作。当处于状态508时,图4的第四阶段418由开关管理器实现。在新日志队列条目的处理被解除阻止并且日志的切换被完成之后,开关管理器向管理服务器通知(例如,向其通信响应)新日志的处理队列条目被解除阻止并且日志的切换被完成。
响应于新日志队列条目的处理被解除阻止并且日志的切换被完成的通知,管理服务向开关管理器发送完成旧日志请求。响应于完成旧日志请求,开关管理器转换到新日志准备好初始化502。
当处于状态502、504或506时,开关管理器可以接收到意外的请求。接收到的意外请求是指除了将允许开关管理器转换到下一状态以继续日志切换的请求之外的请求(例如,当处于状态502时除了初始化新日志请求之外的任何请求,当处于状态504时除了块写请求响应之外的任何请求,当处于状态506时除了解除阻止写请求响应之外的任何请求)。响应于意外的请求,开关管理器转换到新日志清除状态510。在新日志清除状态510中,开关管理器执行各种操作以撤销作为日志切换的一部分而做出的任何改变。这些操作可以包括例如删除被创建的新日志、防止旧日志被改变等。在完成各种操作以撤消作为日志切换的一部分而做出的任何改变之后,开关管理器转换到新日志准备好初始化502。
类似地,当处于状态508时,开关管理器可以接收到意外请求。意外请求是指除了将允许开关管理器转换到下一状态以继续日志切换的请求之外的请求(例如,除了完成旧日志请求之外的任何请求)。响应于意外请求,开关管理器转换到改变跟踪被禁用状态512。在状态512中,改变跟踪(例如,如本文所讨论的日志和日志请求队列的使用)被禁用。如果在状态508处接收到意外请求,则开关管理器假定重大问题已经发生,并且因此禁用改变跟踪,而非进入新日志清除状态510。
在一个或多个实施例中,可能出现其中管理服务在日志切换期间发生故障(例如,崩溃或以其它方式停止正常操作)的情况。为了避免这样的故障导致新日志队列条目的处理被无限地阻止(例如,由于因为故障而未从管理服务接收到解锁阻止写请求响应),当初始化新日志请求被接收时,开关管理器维持用于管理服务的上下文。该上下文被标识为初始化新日志请求的一部分,并且通常被称为由管理服务打开的句柄或由操作系统分配(或向操作系统报告)的其他标识符。如果管理服务发生故障,则管理服务的任何这样的句柄或标识符被操作系统关闭,并且向开关管理器通知这样的关闭。因此,如果作为用于管理服务的上下文由开关管理器维持的句柄在具有相同句柄的完成旧日志请求被关闭之前被关闭,则开关管理器确定管理服务在日志切换期间发生故障。开关管理器进而采取适当的补救动作(例如,转换到新日志清除状态510和/或改变跟踪被禁用状态512),包括解除阻止对新日志队列条目的处理。因此,管理服务中的故障将不会导致新日志队列条目的处理被无限地阻止。
本文讨论的技术支持各种不同的使用场景。通过阻止新日志队列条目的处理但允许在日志切换期间的VHD队列条目的处理,由于 VHD队列条目可以继续被处理,因此减少了由于日志切换所造成的性能影响。如上所述,被阻止的新日志队列条目的处理可以是日志队列条目向存储器而非存储的写入,因此当新日志队列条目的处理被解除阻止时,新日志队列条目能够相对于VHD队列条目向存储的写入被快速处理。
此外,本文讨论的技术允许日志切换发生,同时维持针对依赖写顺序的请求的请求排序。在一些情况下,从虚拟机发出的存储访问请求具有特定排序请求。例如,虚拟机的应用可以使用写前日志记录 (WAL)协议,其中向一个VHD的一个写请求(例如,写入数据库)不被发出,直到向另一VHD的另一写请求(例如,向由应用维护的日志记录的写入)的完成的确认被接收。本文讨论的技术允许在保持这种排序约束的同时进行日志切换。
例如,假设由虚拟机发出两个写请求W1接着是W2,并且要保持写请求的顺序(W2要在W1之后被执行)。在W1被写入VHD文件和日志文件两者之后,返回指示W1的完成的响应,并且响应于该指示,虚拟机发出W2。通过在日志切换时阻止用于W1的日志队列条目的处理,W1向日志文件的写入以及因此W1的完成的指示被延迟直到日志切换被完成。这种阻止允许这样的情况,其中W1和W2 在一个日志文件被切换之后但在另一日志文件被切换之前被接收,从而导致W1被写入新日志文件(并且因此尚未被传送到恢复设备)而W2被写入旧日志文件(随着日志切换完成其被传送到恢复设备)。其中W2被传送到恢复设备但W1未被传送的这种情况将违反对恢复系统中的针对W1和W2的请求排序,但是使用本文所讨论的技术被避免。
图6是示出根据一个或多个实施例的用于当切换虚拟盘复制日志时实现请求排序支持的示例过程600的流程图。过程600例如由图1 的系统100、图2的系统200和/或图3的架构300执行,并且可以被实现在软件,固件,硬件或其组合中。过程600被示为一组动作,并且不限于用于执行各种动作的操作的所示出的顺序。过程600是用于当切换虚拟盘复制日志时实现请求排序支持的示例过程;在此参考不同的附图包括在切换虚拟盘复制日志时实现请求排序支持的附加讨论。
在过程600中,从虚拟机接收存储访问请求(动作602)。这些存储访问请求可以是写请求和/或如上所述的其他请求。
根据存储访问请求的指示更新多个虚拟硬盘之一(动作604)。更新可以是例如如上所述将数据写入虚拟硬盘。每个存储访问请求通常指示要一个虚拟硬盘要被更新,但是可以备选地指示多个虚拟硬盘要被更新。
与存储访问请求相关联的信息也被存储在多个日志之一中(动作 606)。也称为复制日志的每个日志(例如,日志文件)可以对应于如上所述的虚拟硬盘之一。
在维持针对依赖写顺序的请求的请求排序的同时切换多个日志 (动作608)。如上所述,该切换可以在多个部分和/或多个阶段中进行。如上所述,作为该切换的一部分,旧日志(从其切换的日志)可以被传送到恢复设备。如上所述,至少部分地通过阻止对与每个存储访问请求相关联的信息的处理,诸如通过阻止将日志请求队列条目存储在日志中来针对写顺序依赖的请求维持请求排序。
III.用于切换用于在多个主机上快照多流应用的复制日志的示例实
施例
如上所述,复制日志可以被维持并且被切换出以被用于利用对主存储器做出的改变来更新副本存储。在一些情况下,多个存储实例(例如,虚拟盘,物理盘,存储器设备等)可以存储相关的数据。例如,多个虚拟机可以各自操作同一分布式应用的相应部分,使得对它们相应的主存储进行的写入具有当应用于相应的副本存储时需要维持的写顺序。换句话说,关于对副本存储器进行的相同写入,可能需要维持由第一虚拟机对其主存储进行的写入的顺序和由第二虚拟机向其主存储进行的写入的顺序,因为第一虚拟机和第二虚拟机可以彼此通信,影响它们对存储的相应写入的时序和内容,从而创建写顺序依赖的问题。
因此,前面章节中描述的实施例可以被修改为协调复制日志的切换的时序,以维持写顺序一致性。这样的实施例可以以各种方式被实现。例如,图7示出根据示例实施例的系统700的框图,该系统700 包括存储依赖写顺序的数据并且维持跨虚拟盘的写顺序依赖性的多个虚拟盘。例如,系统700可以被包括在计算机网络中,诸如实现分布式应用并且结合存储网络的计算机集群(一起工作的被连接的计算机)或者包括将相关的数据存储在存储中的多个计算设备(例如,计算机、服务器等)的任何其他计算机网络。
如图7所示,系统700包括计算设备702、计算设备704a和计算设备704b。计算设备702包括写顺序一致跟踪(WOCT)协调器706。计算设备704a包括第一虚拟机(VM)104a、第一存储请求处理模块 (SRPM)108a、第一复制管理模块(RMM)110a、第二VM 104b、第二SRPM108b、第二RMM 110b和第一代理708a。计算设备704b 包括第三VM 104c、第三SRPM 108c、第三RMM 110c、第四VM 104d、第四SRPM 108d、第四RMM 110d和第二代理708b。系统700的这些特征/元件被描述如下。
注意,出于说明的目的,在图7中示出分别包括两个虚拟机的两个计算设备。在其他实施例中,更多数量的计算设备可以存在,包括数十、数百、数千和更大数量的计算设备,并且其他数量的虚拟机可以存在,其中每个计算设备包括一个或多个虚拟机。此外,存储710a、 710b、710c和710d是物理存储设备,并且可以包括存储器设备、硬盘驱动器和/或其他形式的物理存储。此外,注意,尽管在图7中示出了WOCT协调器706在与包含虚拟机和代理的计算设备分离的计算设备中,但是在另一实施例中,WOCT协调器706可以与代理和一个或多个虚拟机在同一计算设备中。
第一VM 104a、第一SRMP 108a和第一RMM 110a是在前面章节中描述的VM 104、SRPM 108和RMM 110的相应示例。类似地,第二VM 104b、第二SRMP 108b和第二RMM 110b,第三VM 104c、第三SRMP 108c和第三RMM 110c,以及第四VM 104d、第四SRMP 108d和第四RMM110d都是VM 104、SRPM 108和RMM 110。此外,以与上述类似的方式,第一VM 104a通过SRPM108a将数据存储在一个或多个VD 106a中的存储710a中,并且对应于VD 106a的一个或多个日志112a由RMM 110a生成并被存储在存储710a中,以存储来自第一VM 104a的存储访问请求以用于复制目的。类似地,第二VM 104b使用第二SRMP 108b和第二RMM 110b以将数据存储在存储710b中的VD 106b中,并且生成被存储在存储710b中的日志112b,第三VM 104c使用第三SRMP 108c和第三RMM 110c以将数据存储在存储710c中的VD 106c中,并且生成被存储在存储710c中的日志 112c,并且第四VM 104d使用第四SRMP 108d和第四RMM 110d以将数据存储在存储710c中的VD 106d中,并且生成被存储在存储710d 中的日志112c。因为图7的这些特征在本文别处(例如,前面的章节) 被描述,为了简洁的目的在本章节中不再完全提供该描述。
在实施例中,计算设备702中的WOCT协调器706被配置为协调跨计算设备704a、704b等的复制日志的切换,以维持写顺序一致性。例如,WOCT协调器706可以与包含虚拟机的计算设备处的代理 (诸如代理708a和708b)进行通信。WOCT协调器706可以指示代理为它们相应的计算设备处的所有虚拟机发起日志切换,并且将所得的旧日志(被切换出的日志)提供给WOCT协调器706或别处以被应用于副本存储。
例如,在一个实施例中,WOCT协调器706可以根据图8操作。图8示出了根据示例实施例的以维持跨虚拟盘的写顺序依赖性的方式来切换虚拟盘复制日志的过程的流程图800。流程图800关于图7和图9被描述如下。图9示出了根据示例实施例的WOCT协调器900 的框图。WOCT协调器900是图7的WOCT协调器706的示例。基于以下描述,其他结构和操作实施例对于相关领域的技术人员将是显而易见的。
流程图800开始于步骤802。在步骤802中,发起与多个计算设备处的多个虚拟盘相关联的多个日志的日志切换的循环,虚拟盘存储在虚拟盘之间依赖写顺序的数据。例如,在实施例中,WOCT协调器 900(图9)的日志切换发起器902可以发起针对计算设备处的存储实例的日志切换的循环。例如,在实施例中,日志切换902可以通过网络(例如,局域网、广域网、诸如因特网的网络的组合、存储区域网等),和/或可以以另一种方式发起日志切换循环。下面描述用于根据步骤802发起日志切换的循环的其它示例实施例。
在步骤804中,在多个计算设备处的多个日志的日志切换的循环跨虚拟盘被协调以维持针对依赖写顺序的请求的请求排序。在实施例中,WOCT协调器900(图9)的日志切换管理器904可以被配置为协调由日志切换发起器902发起的日志切换的循环。日志切换管理器 904可以被配置为通过与代理通信来协调日志切换的周期的一个或多个阶段,使得每个阶段在使得下一阶段能够被执行之前由每个代理执行和确认。例如,在实施例中,日志切换902可以传输指令或控制代码,可以使用排它锁,和/或可以使用其它技术来协调日志切换循环。下面描述根据步骤804的用于协调日志切换的循环的其它示例实施例。
因此,在实施例中,WOCT协调器900的日志切换发起器902可以以各种方式发起日志切换的循环(步骤802)。例如,图10示出根据示例实施例的提供用于发起日志切换的过程的流程图1000。在实施例中日志切换发起器902可以根据流程图1000来操作。以下关于图5、图7、图9、图11和图12来描述流程图1000。图11和图12示出根据示例实施例的使用锁定文件来协调日志切换的系统1100的框图。图11和图12分别示出日志切换发起器902、日志切换管理器904、代理708a、代理708b以及可由日志切换发起器902、日志切换管理器904、代理708a、代理708b中的每一个访问的存储1102。存储1102 包括第一开始阶段锁定文件1106a至第四开始阶段锁定文件1106d以及第一结束阶段锁定文件1108a至第四结束阶段锁定文件1108d。基于以下描述,其他结构和操作实施例对于相关领域的技术人员将是显而易见的。
流程图1000开始于步骤1002。在步骤1002中,在多个开始阶段锁定文件中的每个开始阶段锁定文件上采用排它锁,每个开始阶段锁定文件与日志切换的循环的多个阶段中的对应阶段相关联。在实施例中,可以在任何数量的阶段中执行日志切换的循环。例如,日志切换可以针对根据图4的虚拟机被执行,其中在一个循环中使用四个阶段412、414、416和418。在其他实施例中,可以使用其他数量的阶段。各种机制可以被用于控制/协调从一个阶段到另一阶段的切换。例如,在实施例中,可以在每个阶段处使用一个或多个锁定文件来协调日志切换的阶段。锁定文件是其内容可能不相关(除了文件中的锁的持有者的标识符等之外)的文件,但是被用于信号表示资源被锁定。在实施例中,锁定文件是否被锁定可以是阶段是否可以开始、协调器或过程是否已经在阶段中执行其功能、或者与阶段相关的一些其他任务是否已经或能够被执行的指示符。在一个示例实施例中,如下面进一步描述的,每个阶段可以具有对应的开始阶段锁定文件和结束阶段锁定文件。
例如,如图11所示,开始阶段锁定文件1106a和结束阶段锁定文件1108a是可以与第一阶段(例如,第一阶段412)相关联的第一阶段锁定文件1104a。同样,开始阶段锁定文件1106b和结束阶段锁定文件1108b是可以与第二阶段(例如,第二阶段414)相关联的第二阶段锁定文件1104b,开始阶段锁定文件1106c和结束阶段锁定文件1108c是可以与第三阶段(例如,第三阶段416)相关联的第三阶段锁定文件1104c并且开始阶段锁定文件1106d和结束阶段锁定文件 1108d是可以与第四阶段(例如,第四阶段418)相关联的第四阶段锁定文件1104d。
在图11的示例中,在开始时,开始阶段锁定文件1106a-1106d 和结束阶段锁定文件1108a-1108d可以没有由代理或协调器放置在它们上的锁。在一个实施例中,日志切换发起者902可以验证在开始级锁定文件1106a-1106d和结束级锁定文件1108a-1108d上没有采用锁 (例如,没有由代理在锁定文件中的锁定条目等)。日志切换发起器 902在开始阶段锁定文件1106a-1106d中的每个开始阶段锁定文件上采用排它锁,如由排它锁1110a-1110d所表示的(例如,将排它锁条目写入锁定文件等)。以这种方式,代理708a、708b和存在的任何其它代理被阻止对开始阶段锁定文件1106a-1106d采取锁定,并且由此被指示为不对任何阶段执行它们的功能。
参考回图10,在步骤1004中,日志切换发起指令被传输到计算设备处的多个代理。例如,如图11所示,日志切换发起器902可以传输日志切换发起指令1116。日志切换发起指令1116可以通过如本文别处描述的网络来被传输,以由代理708a、708b等接收。日志切换发起指令1116向代理708a、708b等指示日志切换的循环将开始,并且指示代理708a、708b等应当为日志切换的循环作好准备并且提供用于指示日志切换的准备就绪的响应。
因此,在接收到日志切换发起指令1116时,代理708a、708b等分别为日志切换作好准备。代理可以执行用于日志切换的一个或多个准备过程。例如,如图11所示,每个代理708a、708b等可以在结束阶段锁定文件1108a-1108d中的每个结束阶段锁定文件上采用共享锁,如由代理706a采用的共享锁1112a-1112d(例如,将共享锁条目写入锁定文件等)、由代理706b采用的共享锁1114a-1114d等所表示的。
在步骤1006中,从代理中的每个代理接收响应,从多个代理中的代理接收到的每个响应指示代理在多个结束阶段锁定文件中的每个结束阶段锁定文件上采用共享锁,每个结束阶段锁定文件与多个阶段中的相应阶段相关联。在实施例中,如图12所示,在采用共享锁之后,代理708a、708b等可以传输相应的准备就绪响应1202a、1202b 等。准备就绪响应1202a、1202b等可以通过如本文别处描述的网络被传输,以由日志切换指示符902接收。以这种方式,代理708a、708b 和存在的任何其它代理向日志切换协调器902指示它们准备就绪以针对每个阶段执行它们的功能。
注意,如果代理发生故障,如果代理不能够在结束阶段锁定文件上采用共享锁中的所有共享锁,或者如果代理存在另一问题,则代理可能不发送其准备就绪响应和/或准备就绪响应可能不被日志切换协调器902接收。日志切换协调器902可以以各种方式被配置为处理其中没有从一个或多个代理接收到准备就绪响应的情况。例如,日志切换协调器902可以被配置为中止日志切换的循环,并且可以向代理传输中止命令。在另一实施例中,日志切换协调器902可以决定在没有代理的情况下继续日志切换的循环。这样的结果可能是特定的无响应代理不会导致针对其计算设备处的虚拟机的日志的切换。在假定代理可以赶上日志切换的随后循环期间和/或基于任何其他合适的考虑的情况下这可能是可接受的。
因此,以流程图1000的方式,WOCT协调器900的日志切换发起器902可以发起日志切换的循环(步骤802)。如上所述,WOCT 协调器900的日志切换管理器904可以被配置为协调日志切换的循环 (图8的步骤804)。例如,图13示出根据示例实施例的提供用于协调日志切换的阶段的过程的流程图1300。在实施例中,日志切换管理器904可以根据流程图1300操作。以下关于图9和图11以及图12 来描述流程图1300。基于以下描述,其他结构和操作实施例对于相关领域的技术人员将是显而易见的。
流程图1300开始于步骤1302。在步骤1302中,释放相关联的开始阶段锁定文件上的排它锁,以向代理信号通知该阶段的开始。在实施例中,为了向代理706a、706b信号通知阶段的开始,日志切换管理器904可以释放该阶段上的排它锁。例如,关于图11,可以期望第一阶段(例如,图4的第一阶段412)被执行。在这种情况下,日志切换管理器904可以释放开始阶段锁定文件1106a上的排它锁1110a。日志切换管理器904可以直接释放排它锁(例如,通过从开始阶段锁定文件中移除排它锁条目),或者可以指示日志切换发起器902释放锁。
一旦在阶段的开始阶段锁定文件上释放排它锁,则这向代理发信号通知可以执行该阶段的功能。例如,在日志切换的循环的发起(例如,图8中的步骤802)之后,代理708a、708b等可以周期性地检查开始阶段锁定文件1106a-1106d以确定每个阶段是否已经开始。当代理确定在开始阶段锁定文件上不存在排它锁时,这向代理指示该阶段已经开始。在这种情况下,代理可以使该阶段的功能针对与其虚拟机相关联的日志文件被执行。
例如,如果当前阶段是第一阶段,如图12所示,日志切换管理器904可以使得开始阶段锁定文件1106a上的(图11的)排它锁1110a 被释放,并且因此在图12中未示出。代理706a、706b等可以确定排它锁1110a已经被释放,并且因此第一阶段可以被执行。例如,关于图4,第一阶段412可以被执行,其中如上所述可以初始化新日志。如果该阶段是第二阶段,则代理可以确定开始阶段锁定文件1106b上的排它锁1110b已经被释放,并且第二阶段(例如,图4的第二阶段 414)可以被执行。如果该阶段是第三阶段,则代理可以确定开始阶段锁定文件1106c上的排它锁1110c已经被释放,并且第三阶段(例如,图4的第三阶段416)可以被执行。如果该阶段是第四阶段,则代理可以确定开始阶段锁定文件1106d上的排它锁1110d已经被释放,并且第四阶段(例如,图4的第四阶段418)可以被执行。
从图13的步骤1302,操作进行到步骤1304。
在步骤1304中,排它锁被尝试以被采用在相关联的结束锁定文件上,当代理已经释放了在相关联的结束锁定文件上的所有共享锁时,使得排它锁能够被采用,以由代理信号通知该阶段的完成。在实施例中,当每个代理已经确认当前阶段已经针对其计算设备处的虚拟机而被完成时,该代理在用于该阶段的结束阶段锁定文件上释放其共享锁(例如,从锁定文件中移除相应的条目)。当所有代理已经释放了用于该阶段的结束阶段锁定文件上的它们的共享锁(例如,从结束阶段锁定文件移除的所有共享锁条目)时,日志切换管理器904被使得能够在结束阶段锁定文件上采用排它锁,指示阶段已完成。
例如,参考图12,日志切换管理器904尝试对结束阶段锁定文件 1108a采取锁定。如果任何共享锁被维持在结束阶段锁定文件1108a 上,则日志切换管理器904不能对结束阶段锁定文件1108a采用排它锁。如图12所示,代理708a已经完成了第一阶段,并且因此释放了结束阶段锁定文件1108a上的共享锁1112a(如图11所示)。代理 708b尚未完成第一阶段,因此共享锁1112b仍然存在于结束阶段锁定文件1108a上,并且日志切换管理器904仍然不能采用排它锁。当代理708b释放共享锁1112b,并且任何其他代理释放结束阶段锁定文件1108a上的任何其他共享锁时,日志切换管理器904能够对结束阶段锁定文件1108a采用被示出为排它锁1204的排它锁。
从图13的步骤1304,操作进行到步骤1306。
在步骤1306中,确定是否采用了步骤1304的排它锁。如果能够由日志切换管理器904在用于该阶段的结束阶段锁定文件上采用排它锁,则代理已经信号通知他们已经完成该阶段的功能,并且操作进行到步骤1308。如果排它锁不能够由日志切换管理器904在用于该阶段的结束阶段锁定文件上采用,则代理中的一个或多个代理尚未完成该阶段的功能,并且操作返回到步骤1304。
在步骤1308中,确定当前阶段是否是日志切换循环的最后阶段。如果当前阶段是日志切换循环的最后阶段(例如,图4的四阶段过程 400的第四阶段418),则操作进行到步骤1310.如果当前阶段不是日志切换的最后阶段循环,操作进行到步骤1312。
在步骤1310中,转换到下一阶段。当当前阶段被完成时,操作进行到步骤1302,其中日志切换管理器904发起日志切换循环的下一阶段。
在步骤1312中,日志切换循环完成。当已经执行日志切换循环的所有阶段时,日志切换循环完成。
因此,以流程图1300的方式,WOCT协调器900的日志切换管理器904可以协调日志切换的循环(图8的步骤804)。如上所述, WOCT协调器900的日志切换管理器904可以被配置为以其他方式协调日志切换的循环,诸如通过控制代码和/或除控制代码之外的其他类型的消息的使用。例如,图14示出根据示例实施例的用于使用控制代码来协调日志切换的步骤1402。步骤1402是针对图8的步骤804 的示例实施例。在步骤1402中,控制代码被传输到计算设备处的多个代理以制定多个阶段。WOCT协调器可以被配置为使用控制代码来以任何方式协调日志切换过程的阶段。
例如,参考7,系统700可以是集群计算系统或网络。集群计算网络包括一起工作的一组松散连接或紧密连接的节点/计算机(例如,计算设备702、704a、704b等),使得在许多方面它们能够被视为单个系统。集群的组件通常通过快速局域网(“LAN”)彼此连接,快速局域网可称为专用集群通信网络,其中每个节点运行其自己的操作系统实例。计算机集群是高性能分布式计算的使能者。“高可用性集群”(也称为故障转移集群或HA集群)是一种包括冗余节点的计算机集群,冗余节点然后被用于在系统组件发生故障时提供服务。在计算机集群中,心跳网络可以存在,其是由集群节点共享的专用网络,并且被使用以使得集群节点能够监视彼此的状态,并且彼此通信(例如,使用控制代码或“集群代码”)。根据心跳机制,每个节点在给定间隔中发送被称为增量的消息(“心跳”),以确认该节点是活动的。称为“槽(sink)”的接收器节点维持消息的有序列表。一旦从每个节点接收到具有晚于标记时间的时间戳的消息,则系统确定所有节点都正在工作。
因此,在实施例中,WOCT协调器706可以被配置为使用心跳网络上的控制代码与代理708a、708b等通信。换句话说,如图11所示,日志切换发起指令1116可以由日志切换发起器902通过集群网络的心跳网络被传输到代理706a、706b等。此外,可以由代理706a、706b等通过心跳网络将响应1202a、1202b等传输到日志切换发起者902。此外,日志切换发起器902和代理706a、706b等可以使用控制代码和/或消息而不是使用锁定文件(如图10-12中以及本文中的相关文本)来通过心跳网络彼此通信,以协调日志切换的循环的阶段的性能。
例如,图15示出根据示例实施例的提供用于使用控制代码来协调日志切换的阶段的过程的流程图1500。在实施例中,日志切换管理器904(图9)可以执行流程图1500(例如,执行图14的步骤1402)。以下关于图5来描述流程图1500。基于以下描述,其他结构和操作实施例对于相关领域的技术人员将是显而易见的。
流程图1500从步骤1502开始。在步骤1502中,发起用于执行日志切换的时间段。步骤1502(和步骤1508)是可选的。在实施例中,日志切换管理器904可以维持预定时间段,该预定时间段是要执行日志切换的完整循环的时间的长度,否则该循环被中止(不发生日志切换)。该时间段可以被预先配置为具有适合于特定网络配置的任何长度的时间(例如,100微秒等)。操作从步骤1502进行到步骤 1504。
在步骤1504中,控制代码被传输到多个代理。在步骤1504中,控制代码可以由日志切换管理器904通过集群网络发送到代理708a、 708b等。控制代码被代理识别以表示阶段的开始。在一个实施例中,相同的控制代码用于发起所有阶段。在另一实施例中,每个阶段可以具有其自己的控制代码,其被配置为在代理处发起阶段。
例如,可能期望第一阶段(例如,图4的第一阶段412)被执行。在这种情况下,日志切换管理器904可以向代理708a、708b等传输控制代码。当代理接收到控制代码时,这向代理信号通知第一阶段的功能可以被执行。在这种情况下,代理可以使第一阶段的功能关于与其虚拟机相关联的日志文件而被。以类似的方式,切换管理器904可以向代理708a、708b等传输控制代码以向代理信号通知第二阶段、第三阶段、第四阶段等的功能可以被执行。
在步骤1506中,等待来自多个代理中的每个代理对所传输的控制代码的响应。在实施例中,日志切换管理器904可以等待来自代理 708a、708b等中的每个代理对所传输的控制代码的响应。代理708a、 708b等可以以任何形式(例如,作为响应控制代码等)通过集群网络向日志切换管理器904传输响应。当来自所有代理的响应被日志切换管理器904接收到,指示在各种计算设备处执行阶段中的成功时,操作进行到步骤1506。如果没有从代理接收到响应,则这可以指示在对应的计算设备处执行阶段的故障,或者可以指示一些其他故障(例如,通信故障、代理发生故障等)。在这种情况下,操作可以可选地进行到步骤1510,其中日志切换周期被中止,或者操作可以进行到步骤 1506,其中在任何无响应代理(和/或利用阶段故障响应的代理)的计算设备处的日志可能不在当前日志切换循环期间被切换。
在步骤1508中,确定在接收到对所传输的控制代码的所有响应之前该时间段是否已经超时。如上述步骤1502所示,步骤1508是可选的。在实施例中,在日志切换循环的执行期间,日志切换管理器904 可以周期性地检查在步骤1502中发起的时间段是否已经超时。如果时间段已经超时,则操作进行到步骤1510。如果时间段尚未超时,则操作进行到步骤1512。
在步骤1510中,如果代理中的至少一个代理未在预定时间段内利用等待的响应来响应,则日志切换被中止。在实施例中,步骤1510 可以由日志切换管理器904执行,以结束日志切换循环而不切换任何日志。在步骤1510之后,流程图1510的操作完成。
在步骤1512中,确定当前阶段是否是日志切换循环的最后阶段。如果当前阶段是日志切换循环的最后阶段(例如,图4的四阶段过程 400的第四阶段418),则操作进行到步骤1516。如果当前阶段不是日志切换循环的最后阶段,则操作进行到步骤1514。
在步骤1514中,转换到下一阶段以用于制定。当当前阶段被完成时,操作进行到步骤1504,其中日志切换管理器904发起日志切换循环的下一阶段。
在步骤1516中,日志切换循环被完成。当已经执行日志切换循环的所有阶段(在可选时间段内)时,日志切换循环完成。
注意,尽管锁定文件和控制代码被呈现为用于协调日志切换的示例技术,但是根据本文的教导,用于协调日志切换的其他技术对于相关领域的技术人员来说是显而易见的,这些技术被涵盖作为实施例。此外,实施例可以以任何方式被组合。例如,在实施例中,WOCT协调器可以在计算机网络中同时实现锁定文件技术(例如,图10-13) 和控制代码技术(例如,图14和图15)。在这样的实施例中,对于每个阶段,可以使用更快速工作的方法(例如,更快地提供阶段完成的指示)以更快地移动到下一阶段。例如,在一些情况下,锁定文件方法可能比控制代码方法能够完成该阶段(例如,响应于接收到的控制代码的代理)更快地完成阶段(例如,代理在结束阶段锁定文件上释放共享锁)。在其他情况下,控制代码方法可能能够比锁定文件方法能够完成阶段更快地完成阶段。
因此,根据实施例,通过引入不同服务器中的改变跟踪机制之间的同步来增强日志切换以实现跨多个服务器的写顺序保持。为了对服务器具有最小的影响,同步在不暂停VM操作并且不必在同步期间执行IO的情况下被实现,并且在相对短的时间量内被完成。同步以不连续的方式被执行,但是以由期望的产品复制频率指定的特定时间间隔被执行。在实施例中,同步成功率可以仅由服务器之间的通信速度和由产品指定的超时来限制。因此,通用框架被定义以使得服务器之间的多个通信信道能够尽可能快地实现同步。
IV.基于复制日志的多流应用的复制的示例实施例
如上所述,提供了用于多流应用(例如,生成可以被单独存储的多个单独数据流的应用)的复制的实施例。根据实施例,通过在特定时间处将在先前章节中生成的切换出的日志应用于副本存储,应用的经存储的数据可以被复制和被保持与主存储数据同步。这样的实施例可以以各种方式被实现。
例如,图16示出根据示例实施例的系统1600的框图,系统1600 包括用于协调日志切换和虚拟盘复制日志向副本存储的应用的复制协调器。如图16所示,系统1600类似于图7,包括计算设备702和计算设备704a(为了便于说明,计算设备704b和任何其他计算设备未在图16中示出)。计算设备702包括如图7中的WOCT协调器706,并且计算设备704a被配置为如图7所示。在实施例中,如本文别处所描述的,WOCT协调器706可以通过与代理708a通信来协调计算设备704a处的日志的切换,以及通过与对应代理进行通信来协调在另外的计算设备处的日志的切换。此外,在图16中,系统1600包括计算设备1602、计算设备1604a(以及可选的另外的计算设备)、副本存储器1614a和副本存储器1614b。另外,计算设备702包括第一复制协调器1606,计算设备1604a包括日志文件处理代理1612a,副本存储1614a包括至少一个虚拟盘1616a,并且副本存储1614b包括至少一个虚拟盘1616b。
在图16中,计算设备702、计算设备704a、存储710a和存储710b 被认为是由主侧1624指示的主侧或主站点组件,并且计算设备1602、计算设备1604a、副本存储1614a和副本存储1614b是被认为是由副本侧1626指示的辅助侧、辅助站点或副本侧组件。这是因为副本存储1614a是用于存储710a的副本存储,其中虚拟盘1616a是虚拟盘 106a的副本,并且副本存储1614b是用于存储710b的副本存储,其中虚拟盘1616b是虚拟盘106b的副本。与主侧1624上的计算设备处的虚拟机相关联的每个存储实例在副本侧1626上具有对应副本存储。此外,计算设备1604a(例如,服务器等)是计算机设备704a的副本侧副本。
在实施例中,第一复制协调器1606和第二复制协调器1608一起工作,以使用根据本文中别处描述的技术生成的复制日志将主侧1624 上的数据复制到副本侧1616。因此,存储相关数据的多个存储实例(例如,虚拟盘)可以被同时复制到副本侧1616,这有助于维持写顺序一致性。
第一复制协调器1606和第二复制协调器1608可以以各种方式操作以执行它们的功能。例如,图17示出根据示例实施例的提供用于协调日志切换和虚拟盘复制日志向副本存储的应用的过程的流程图1700。在实施例中,第一复制协调器1606可以根据流程图1700操作,第二复制协调器1608可以根据流程图1700操作,或者复制协调器 1606和1608可以协作以执行流程图1700。基于以下描述,其它结构和操作实施例对于相关领域的技术人员将是显而易见的。
流程图1700从步骤1702开始。在步骤1702中,指令被传输以执行与多个计算设备处的第一多个虚拟盘相关联的多个日志的日志切换的循环。例如,如图16所示,计算设备1602(副本侧1626)处的复制协调器1608可以生成由计算设备702(主侧1624)处的复制协调器1606通过网络接收的日志切换指令1628。日志切换指令1628 是用于在包含与跟踪日志相关联的存储的各种计算设备处执行日志切换的指令。日志切换指令1628可以以诸如控制代码(例如,通过集群网络)、HTTP请求(例如,通过LAN。WAN等)的任何方式或以另一形式被传输。
如图16所示,响应于接收到日志切换指令1628,复制协调器1606 可以生成由WOCT协调器706接收的第二日志切换指令1618。日志切换指令1618指示WOCT协调器706执行日志切换的循环。响应于接收到日志切换指令1618,WOCT协调器706可以使得日志切换的循环将以本文所述的任何方式被执行,诸如根据流程图800(图8) 等。
注意,在另一实施例中,复制协调器1606可以在没有已经从复制协调器1608接收到日志切换指令1628的情况下生成日志切换指令 1618。在实施例中,复制协调器1606和/或复制协调器1608可以使得日志切换的循环在任何时间被执行(例如,通过生成日志切换指令),该执行可以是周期性的、在随机的时间、在预定的时间(例如,根据调度)、当VHD请求队列322和/或日志请求队列342(图3)变满时、基于存储业务量(例如,当数据存储时间更经常地发生时更频繁地执行日志切换)、和/或以其他形式。
在步骤1704中,响应于日志切换的循环的执行,从计算设备接收多个日志。例如,如图16所示,计算设备1602(副本侧1626)处的复制协调器1608从计算设备704a接收复制日志1622a,从计算设备704b(图7;图16中未示出)接收复制日志1622b,并且可以从主侧1624上的另外的计算设备接收另外的复制日志。复制日志是响应于步骤1702由于本文别处描述的日志切换的执行而被切换出的日志。因此,复制日志与跨多个计算设备和虚拟盘被存储在主存储中的数据有关,并且该数据可能需要在存储范围内维持的写顺序依赖性。
可以从计算设备处的代理(例如,代理708a等)、从计算设备处的日志请求处理模块344和/或从计算设备处的其他源接收复制日志。在这样的实施例中,通过多个信道直接和单独地从其中日志被生成并被切换出的计算设备接收复制日志,而不是在一个点处收集复制日志。这可以实现复制日志向复制协调器1608(副本侧1626)的更快的提供,而不是在复制协调器1606(主侧1624)收集复制日志并且然后将它们传递到复制协调器1608,尽管这可以在备选实施例中被实现。从各个计算设备接收日志实现针对系统1600的更大可伸缩性。
参考回图17,在步骤1706中,接收到的多个日志中的每个日志被标记以至少指示日志切换的循环。在实施例中,复制协调器1608 可以包括日志文件标记器1610。日志文件标记器1610被配置为至少利用标识日志切换的特定循环的信息(例如,利用循环标识符/代码) 来标记每个接收到的复制日志。以这种方式,可以将特定循环的复制日志同时应用于副本存储以使得写顺序能够被维持。日志文件标记器 1610可以以任何方式标记复制日志,诸如通过在日志文件的头部中、在日志文件的主体中、作为与日志文件相关联的元数据、在日志文件的文件名、和/或以任何其他方式提供日志切换循环的指示。
注意,在另一实施例中,每个代理708a等可以包括日志文件标记器1610,其在从主侧1624被传输之前标记复制日志1622a、1622b 等。在又一实施例中,每个计算设备704a等可以包括与计算设备处的对应代理708a等分离的日志文件标记器1610。
在步骤1708中,经标记的多个日志被提供以启用第二多个虚拟盘中的写顺序一致存储点。在实施例中,如图16所示,复制协调器 1608可以传输经标记的复制日志1624,其包括已经利用日志切换循环标识符来标记的复制日志1622a、1622b等的版本。在实施例中,计算设备1604a处的日志文件处理代理1612a以及另外的计算设备处的另外的日志文件处理代理可以接收经标记的复制日志1624。经标记的复制日志1624可以以任何方式被传输到日志文件处理代理,诸如通过集群网络、通过LAN、WAN等或以其他形式被传输。
在实施例中,每个计算设备接收适用于与其相关联的副本存储的经标记的复制日志1624中的一个或多个经标记的复制日志。例如,在图16的示例中,在其中副本存储1614a的虚拟盘1616a对应于存储710a的虚拟盘106a并且副本存储器1614b的虚拟盘1616b对应于存储710b的虚拟盘106b的情况下,计算设备1604a可以接收从计算设备704a切换出的复制日志112a和112b的经标记的版本。
在实施例中,在相应计算设备处的日志文件处理代理1612a等将被包括在接收到的经标记的复制日志中的存储访问请求应用于虚拟存储中的对应虚拟盘。复制协调器1608协调复制日志的应用,使得以相同循环标记的复制日志被日志文件处理代理1612a等并行应用。复制协调器1608可以要求日志文件处理代理1612a等全部向复制协调器1608传输确认/响应,在复制协调器1608将允许来自主侧1624 上的日志切换的下一循环的经标记的日志开始由日志文件处理代理应用到副本侧1626上的副本存储之前,日志文件处理代理1612a等的复制日志中的每个复制日志被成功应用于它们的副本存储。
以这种方式,在时间点(例如,针对循环发起日志切换的时间) 处,虚拟盘中的数据被更新并与主存储中的相应虚拟盘同步。例如,从存储710a切换出的复制日志112a的经标记的版本可以包括被应用于虚拟盘106a之一的存储访问请求。日志文件处理代理1612a被配置为将存储访问请求(例如,数据写入)应用到副本存储器1614a中的虚拟盘1616a中的对应虚拟盘。以这种方式,虚拟盘1616a的副本虚拟盘在时间上被提前以与虚拟盘106a的对应主虚拟盘同步(假设在主虚拟盘上尚未执行另外的写入)。因此,多VM写顺序一致点被创建在副本侧1626上的副本存储1614a、1614b等中。标记使得能够在副本侧1626上对在主侧1626上的相同日志切换循环中创建的所有日志的聚集/收集。跨副本侧1626上的计算设备的日志文件处理代理在它们的副本存储上执行类似的操作,以使它们相应的虚拟盘与主存储中的对应虚拟盘同步。
因此,实施例为跨多个主机分布的应用提供一致的时间点,以编排数据流从主站点主机到辅助站点(副本)主机的复制。用于主站点上的每个多流应用的协调器(例如,复制协调器1606)与辅助站点上的其副本(例如,复制协调器1608)协调,以发起和驱动复制循环。为了实现接近同步的RPO(恢复点目标),编排机制施加相对小的开销并通过卸载每个数据流的主主机和辅助主机之间的实际数据传输来提供复制信道的高并行性。在一个应用中,可以利用先前章节的日志切换技术来产生跨数据流的写顺序一致时间点。存储改变根据当前章节的实施例被复制到目标副本存储,并且创建用于故障转移/测试、故障转移等目的的时间点副本。对于一组计算设备,期望标识恢复跨属于相同复制循环的所有计算设备的复制流的时间点。辅助站点上的协调器(复制协调器)保持对在复制循环期间在主侧上的组的所有计算设备处接收到的改变的跟踪,确定是否可以产生恢复点,并且保持对适合于辅助站点上对应的计算设备组的故障转移的这样的恢复点的跟踪。编排器还对落在后面或完全失效的一个或多个计算机设备具有弹性,并且提供用于组中的所有计算设备的复制被同步的框架。
注意,在实施例中,主侧和副本侧复制协调器可以被配置为处理每个阶段处的故障,诸如在日志切换期间写顺序一致日志的生成期间的故障、向副本侧传输子集/全部日志的故障、在副本侧上应用日志的故障等。此外,当主侧计算设备的子集未能参与日志切换/复制循环时,复制协调器可以被配置为支持(未发生故障的)主侧计算设备的日志的传输或者来自(未发生故障的)主侧计算设备的日志的传输,而发生故障的子集自动恢复(或被手动恢复)。当存在时,这些特征使得多流复制方案能够是容错的,具有从分布式系统中常见和/或预期的这种故障中恢复的能力(其可以自动的)。
V.示例移动和固定设备实施例
虚拟机104、SRPM 108、RMM 110、存储写控制模块208、VHD 接口304、VHD解析器306、VHD接口308、IOCTL处理器312,VHD 请求处理模块324、日志请求处理模块344、VMMS340、WOCT协调器706、代理708a、代理708b、WOCT协调器900、日志切换发起器902、日志切换管理器904、复制协调器1606、复制协调器1608、日志文件标记器1610、日志文件处理代理1612a、过程400、状态图500、过程600、流程图700、流程图800、流程图1000、流程图1300、步骤1402、流程图1500和流程图1700可以被实现在硬件或与软件和/或固件结合的硬件中。例如,虚拟机104、SRPM 108、RMM 110、存储写控制模块208、VHD接口304、VHD解析器306、VHD接口 308、IOCTL处理器312、VHD请求处理模块324、日志请求处理模块344、VMMS 340、WOCT协调器706、代理708a、代理708b、 WOCT协调器900、日志切换发起器902、日志切换管理器904、复制协调器1606、复制协调器1608、日志文件标记器1610,日志文件处理代理1612a、过程400、状态图500、过程600、流程图700、流程图800、流程图1000、流程图1300、步骤1402、流程图1500和/ 或流程图1700可被实现为计算机程序代码/指令,其被配置为在一个或多个处理器中被执行并被存储在计算机可读存储介质中。备选地,虚拟机104、SRPM 108、RMM 110、存储写控制模块208、VHD接口304、VHD解析器306、VHD接口308、IOCTL处理器312、VHD 请求处理模块324、日志请求处理模块344、VMMS 340、WOCT协调器706、代理708a、代理708b、WOCT协调器900、日志切换发起器902、日志切换管理器904、复制协调器1606、复制协调器1608、日志文件标记器1610,日志文件处理代理1612a、过程400、状态图500、过程600、流程图700、流程图800、流程图1000、流程图1300、步骤1402、流程图1500和/或流程图1700可以被实现为硬件逻辑/电子电路。
例如,在一个实施例中,虚拟机104、SRPM 108、RMM 110、存储写控制模块208、VHD接口304、VHD解析器306、VHD接口308、 IOCTL处理器312、VHD请求处理模块324、日志请求处理模块344、 VMMS 340、WOCT协调器706、代理708a、代理708b、WOCT协调器900、日志切换发起器902、日志切换管理器904、复制协调器1606、复制协调器1608、日志文件标记器1610,日志文件处理代理1612a、过程400、状态图500、过程600、流程图700、流程图800、流程图1000、流程图1300、步骤1402、流程图1500和/或流程图1700中的一项或多项可以在任何组合中一起被实现在SoC中。SoC可以包括集成电路芯片,其包括处理器(例如,中央处理单元(CPU)、微控制器、微处理器、数字信号处理器(DSP)等)、存储器、一个或多个通信接口、和/或其它电路中的一项或多项,并且可以可选地执行接收到的程序代码和/或包括用于执行功能的嵌入的固件。
图18描绘了其中可以实现实施例的计算设备1800的示例性实现。例如,系统100、系统200、计算设备702、计算设备704a、计算设备704b、计算设备1602和/或计算设备1604a可以被实现在类似于移动或固定计算机实施例中的计算设备1800的一个或多个计算设备中,包括计算设备1800的一个或多个特征和/或备选特征。本文提供的对计算设备1800的描述出于说明的目的而被提供,并且不旨在限制。如相关领域的技术人员所知,实施例可以被实现在其他类型的计算机系统中。
如图18所示,计算设备1800包括被称为处理器电路1802的一个或多个处理器、系统存储器1804和将包括系统存储器1804的各种系统组件耦合到处理器电路1802的总线1806。处理器电路1802是电子和/或光学电路,其作为中央处理单元(CPU)、微控制器、微处理器和/或其他物理硬件处理器电路而被实现在一个或多个物理硬件电子电路设备元件和/或集成电路设备(半导体材料芯片或模具)中。处理器电路1802可以执行存储在计算机可读介质中的程序代码,诸如操作系统1830的程序代码、应用1832、其他程序1834等。总线1806 表示几种类型的总线结构中的任一种类型的总线结构中的一个或多个,包括存储器总线或存储器控制器、外围总线、加速图形端口、以及使用各种总线架构中的任一种总线架构的处理器或局部总线。系统存储器1804包括只读存储器(ROM)1808和随机存取存储器(RAM) 1810。基本输入/输出系统1812(BIOS)被存储在ROM 1808中。
计算设备1800还具有以下驱动器中的一个或多个:用于从硬盘读取和向其写入的硬盘驱动器1814、用于从可拆卸磁盘1818读取或向其写入的磁盘驱动器1816、以及用于从可拆卸光盘1822读取或向其写入的光盘驱动器1820,诸如CD ROM,DVD ROM或其他光学介质。硬盘驱动器1814、磁盘驱动器1816和光盘驱动器1820分别通过硬盘驱动器接口1824、磁盘驱动器接口1826和光驱动器接口1828 连接到总线1806。驱动器及其相关联的计算机可读介质为计算机提供计算机可读指令、数据结构、程序模块和其他数据的非易失性存储。尽管描述了硬盘、可拆卸磁盘和可拆卸光盘,但是其它类型的基于硬件的计算机可读存储介质也可以用于存储数据,诸如闪存卡、数字视频盘、RAM、ROM和其他硬件存储介质。
大量程序模块可以被存储在硬盘、磁盘、光盘、ROM或RAM上。这些程序包括操作系统1830、一个或多个应用1832、其他程序1834 和程序数据1836。应用1832或其他程序1834可以包括例如计算机逻辑(例如,计算机程序代码或指令),该计算机逻辑用于实现虚拟机104、SRPM 108、RMM 110、存储写控制模块208、VHD接口304、 VHD解析器306、VHD接口308、IOCTL处理器312、VHD请求处理模块324、日志请求处理模块344、VMMS 340、WOCT协调器706、代理708a、代理708b、WOCT协调器900、日志切换发起器902、日志切换管理器904、复制协调器1606、复制协调器1608、日志文件标记器1610、日志文件处理代理1612a、过程400、状态图500、流程图700、流程图800、流程图1000、流程图1300、步骤1402、流程图1500和/或流程图1700(包括过程400、600、状态机500、流程图700、 800、1000、1300、1500、1700的任何合适的步骤),和/或本文所述的其它实施例。
用户可以通过诸如键盘1838和定点设备1840的输入设备将命令和信息输入到计算设备1800中。其他输入设备(未示出)可以包括麦克风、操纵杆、游戏板、卫星天线、扫描仪、触摸屏和/或触摸板、用于接收语音输入的语音识别系统、用于接收手势输入的手势识别系统等。这些和其他输入设备通常通过耦合到总线1806的串行端口接口1842被连接到处理器电路1802,但是可以通过诸如并行端口、游戏端口或通用串行总线(USB)等其他接口被连接。
显示屏1844还经由诸如视频适配器1846之类的接口被连接到总线1806。显示屏1844可以在计算设备1800的外部或被结合在计算设备1800中。显示屏1844可以显示信息,以及作为用于接收用户命令和/或其他信息(例如,通过触摸、手指手势、虚拟键盘等)的用户界面。除了显示屏1844之外,计算设备1800可以包括诸如扬声器和打印机的其他外围输出设备(未示出)。
计算设备1800通过适配器或网络接口1850、调制解调器1852或用于通过网络建立通信的其它装置被连接到网络1848(例如,因特网)。如图18所示,可以是内部或外部的调制解调器1852可以经由串行端口接口1842被连接到总线1806,或者可以使用包括并行接口的另一接口类型被连接到总线1806。
如本文所使用的,术语“计算机程序介质”,“计算机可读介质”和“计算机可读存储介质”通常用于指代物理硬件介质,诸如与硬盘驱动器1814相关联的硬盘、可拆卸磁盘1818、可拆卸光盘1822、其他物理硬件介质(诸如RAM、ROM、闪存卡、数字视频盘、压缩盘、MEMS、基于纳米技术的存储设备的其他物理硬件介质)以及其他类型的物理/有形硬件存储介质。这样的计算机可读存储介质与通信介质区分开并且不重叠(不包括通信介质)。通信介质通常在诸如载波的经调制的数据信号中体现计算机可读指令、数据结构、程序模块或其他数据。术语“经调制的数据信号”意指具有以在信号中编码信息的方式使其特性中的一个或多个特性被设置或改变的信号。通过示例而非限制的方式,通信介质包括诸如声学、RF、红外和其他无线介质的无线介质以及有线介质。实施例还涉及这样的通信介质。
如上所述,计算机程序和模块(包括应用1832和其他程序1834) 可以被存储在硬盘、磁盘、光盘、ROM、RAM或其它硬件存储介质上。这样的计算机程序还可以经由网络接口1850、串行端口接口1842 或任何其它接口类型被接收。这样的计算机程序当由应用执行或加载时,使得计算设备1800能够实现这里讨论的实施例的特征。因此,这样的计算机程序表示计算设备1800的控制器。
实施例还涉及包括存储在任何计算机可读介质上的计算机代码或指令的计算机程序产品。这样的计算机程序产品包括硬盘驱动器、光盘驱动器、存储器设备包,便携式存储棒,存储卡和其他类型的物理存储硬件。
VI.示例实施例
在一个实施例中,提供了一种写顺序一致跟踪(WOCT)协调器中的方法,包括:发起与多个计算设备处的多个虚拟盘相关联的多个日志的日志切换的循环,所述虚拟盘存储在所述虚拟盘之间依赖于写顺序的数据,所述多个计算设备中的每个计算设备包括以下至少一项:所述多个虚拟盘中的、从应用接收存储访问请求的虚拟盘,所述存储访问请求包括写请求,和多个日志中的与所述虚拟盘相对应的日志,所述日志接收与所述存储访问请求相对应的日志队列条目;以及跨所述虚拟盘协调所述多个计算设备处的所述多个日志的所述日志切换的所述循环,以维持针对写顺序的请求的请求排序。
在实施例中,所述协调包括:制定多个阶段以引起所述多个计算设备处的所述多个日志的所述切换。
在实施例中,所述发起包括:在多个开始阶段锁定文件中的每个开始阶段锁定文件上采用排它锁,每个开始阶段锁定文件与所述多个阶段中的对应阶段相关联;以及将日志切换发起指令传输到所述计算设备处的多个代理,每个计算设备包括所述多个代理中的对应代理。
在实施例中,所述发起还包括:从所述代理中的每个代理接收响应,从所述多个代理中的代理接收到的每个响应指示所述代理在多个结束阶段锁定文件中的每个结束阶段锁定文件上采用共享锁,每个结束阶段锁定文件与所述多个阶段中的对应阶段相关联。
在实施例中,所述多个阶段中的每个阶段通过执行以下操作来被制定:释放相关联的开始阶段锁定文件上的所述排它锁以向所述代理信号通知所述阶段的开始,尝试在相关联的结束阶段锁定文件上采用排它锁,当由已经释放所述相关联的结束阶段锁定文件上的所有共享锁的代理启用时,在所述相关联的结束阶段锁定文件上采用所述排它锁,以由所述代理表示所述阶段的完成,以及转换到制定下一阶段,直到所述多个阶段中的最后阶段被完成。
在实施例中,所述制定多个阶段包括:制定第一阶段,在所述第一阶段期间新日志在所述多个计算设备中的每个计算设备处被初始化;制定第二阶段,在所述第二阶段期间接收到的日志队列条目被阻止由所述多个计算设备处的所述日志接收;制定第三阶段,在所述第三阶段期间所述新日志被配置为被用于在所述多个计算设备中的每个计算设备处接收所述日志队列条目,并且接收到的日志队列条目由被解除阻止所述多个计算设备处的所述日志接收;以及制定第四阶段,在所述第四阶段期间所述日志切换被完成。
在实施例中,所述协调包括:向所述计算设备处的多个代理传输控制代码和/或消息以制定所述多个阶段,每个计算设备包括所述多个代理中的对应代理。
在实施例中,所述多个阶段中的每个阶段通过执行以下操作被制定:向所述多个代理传输控制代码;等待来自所述多个代理中的每个代理对所传输的所述控制代码的响应;如果所述代理中的至少一个代理未在预定时间段内利用所等待的所述响应来针对要被完成的所述多个阶段做出响应,则中止所述日志切换;以及如果所有代理在所述预定时间段内做出响应,则转换到制定下一阶段,所述转换包括当所述多个阶段中的最后阶段被完成时完成所述日志切换。
在另一实施例中,一种写顺序一致跟踪(WOCT)协调器包括:日志切换发起器,其被配置为与多个计算设备处的多个代理通信,以发起与所述多个计算设备处的所述多个虚拟盘相关联的多个日志的日志切换的循环,所述日志切换的循环包括针对对应新日志切换出每个当前日志,所述多个计算设备中的每个计算设备包括以下至少一项:所述多个虚拟盘中的、从应用接收存储访问请求的虚拟盘,所述存储访问请求包括写请求,和多个日志中的与所述虚拟盘相对应的日志,所述日志接收与所述存储访问请求相对应的日志队列条目;以及日志切换管理器,其被配置为协调所述多个计算设备处的所述多个日志的所述日志切换的循环,以维持针对跨虚拟盘的依赖写顺序的请求的请求排序。
在实施例中,日志切换管理器被配置为制定多个阶段以引起所述多个计算设备处的所述多个日志的所述切换的循环。
在实施例中,对于所述日志切换的循环,所述日志切换发起器被配置为:在多个开始阶段锁定文件中的每个开始阶段锁定文件上采用排它锁,每个开始阶段锁定文件与所述多个阶段中的对应阶段相关联;以及将日志切换发起指令传输到所述计算设备处的所述多个代理以发起所述日志切换。
在实施例中,所述日志切换发起器被配置为从所述代理中的每个代理接收响应,从所述多个代理中的代理接收到的每个响应指示所述代理在多个结束阶段锁定文件中的每个结束阶段锁定文件上采用共享锁,每个结束阶段锁定文件与所述多个阶段中的对应阶段相关联。
在实施例中,为了制定所述多个阶段中的每个阶段,所述日志切换管理器被配置为:释放由所述日志切换发起器在相关联的开始阶段锁定文件上采用的所述排它锁以向所述代理信号通知所述阶段的开始,尝试在相关联的结束阶段锁定文件上采用排它锁,当由已经释放所述相关联的结束阶段锁定文件上的所有共享锁的代理启用时,在所述相关联的结束阶段锁定文件上采用所述排它锁,以由所述代理表示所述阶段的完成,以及转换到制定下一阶段,直到所述多个阶段中的最后阶段被完成。
在实施例中,为了制定所述多个阶段中的每个阶段,所述日志切换管理器被配置为:向所述多个代理传输控制代码;等待来自所述多个代理中的每个代理对所传输的所述控制代码的响应;如果所述代理中的至少一个代理未在预定时间段内利用所等待的所述响应来针对要被完成的所述多个阶段做出响应,则中止所述日志切换;以及如果所有代理在所述预定时间段内做出响应,则转换到制定下一阶段,当所述多个阶段中的最后阶段被完成时所述日志切换被完成。
在另一实施例中,提供了一种复制协调器中的方法,包括:传输指令以执行与主侧上的多个计算设备处的第一多个虚拟盘相关联的多个日志的日志切换的循环,所述第一多个虚拟盘存储分布式应用的数据,所述多个日志中的每个日志与所述第一多个虚拟盘中的虚拟盘相关联,所述第一多个虚拟盘中的每个虚拟盘被配置为从所述分布式应用接收存储访问请求,并且相应日志被配置为接收与所述存储访问请求相对应的日志队列条目;响应于所述日志切换的循环的执行,从所述计算设备接收多个日志;标记接收到的所述多个日志中的每个日志以至少指示所述日志切换的循环;提供经标记的所述多个日志以启用副本侧上的第二多个虚拟盘中的写顺序一致存储点,所述写顺序一致存储点是在时间点处在所述主侧上的所述第一多个虚拟盘的副本,所述存储访问请求适用于使所述第二多个虚拟盘与所述第一多个虚拟盘同步。
在实施例中,所述传输包括:指示写入一致性跟踪(WOCT)协调器协调所述日志切换的循环。
在实施例中,所述提供包括:将经标记的所述多个日志传输到第二复制协调器,所述第二复制协调器被配置为协调所述存储访问请求向所述第二多个虚拟盘的应用,所述第一复制协调器和所述第二复制协调器分别被配置为处理故障,包括处理所述多个日志的生成期间的故障、在所述副本侧用于接收所述多个日志的子集的故障、或者在所述副本侧将所述多个日志中的全部日志应用于所述第二多个虚拟盘的故障中的至少一个故障。
在实施例中,当所述主侧上的所述多个计算设备的子集无法参与所述日志切换的循环时,所述第一复制协调器和所述第二复制协调器支持当所述子集恢复时将所述多个计算设备中的其他计算设备的所述多个日志传输到所述副本侧。
在实施例中,所述提供包括:将经标记的所述多个日志提供给第二多个计算设备处的多个代理,以将所述存储访问请求应用于所述第二多个虚拟盘;并且所述方法还包括:等待来自所述多个代理的、经标记的所述多个日志被成功地应用于所述第二多个虚拟盘的确认;以及响应于从所述多个代理接收到所述确认,使得经标记的日志的第二集合能够被应用于所述第二多个虚拟盘。
在实施例中,响应于所述日志切换的循环的执行,所述从所述计算设备接收多个日志包括:从主侧上的所述多个计算设备中的对应计算设备单独地接收所述多个日志中的每个日志主侧。
VII.结论
虽然上面已经描述了本发明的各种实施例,但是应当理解,它们仅仅已经通过示例而非限制的方式被呈现。相关领域的技术人员将理解,在不脱离所附权利要求中限定的本发明的精神和范围的情况下,可以在形式和细节上做出各种改变。因此,本发明的宽度和范围不应被上述示例性实施例中的任何示例性实施例限制,而应当仅根据以下权利要求及其等同物来限定。

Claims (20)

1.一种写顺序一致跟踪协调器中的方法,包括:
发起多个计算设备处的与多个虚拟盘相关联的多个日志的日志切换的循环,所述发起包括在多个开始阶段锁定文件中的每个开始阶段锁定文件上采用排它锁,所述虚拟盘存储在所述虚拟盘之间依赖于写顺序的数据,所述多个计算设备中的每个计算设备包括以下至少一项:
所述多个虚拟盘中的从应用接收存储访问请求的虚拟盘,所述存储访问请求包括写请求,和
多个日志中的与所述虚拟盘相对应的日志,所述日志接收与所述存储访问请求相对应的日志队列条目;以及
跨所述虚拟盘协调所述多个计算设备处的所述多个日志的所述日志切换的所述循环,以维持针对依赖写顺序的请求的请求排序。
2.根据权利要求1所述的方法,其中跨所述虚拟盘协调所述多个计算设备处的所述多个日志的所述日志切换的所述循环包括:
制定多个阶段以引起所述多个计算设备处的所述多个日志的所述切换。
3.根据权利要求2所述的方法,其中每个开始阶段锁定文件与所述多个阶段中的对应阶段相关联;并且其中所述发起包括:
向所述计算设备处的多个代理传输日志切换发起指令,每个计算设备包括所述多个代理中的对应代理。
4.根据权利要求3所述的方法,其中所述发起还包括:
从所述代理中的每个代理接收响应,从所述多个代理中的代理接收到的每个响应指示所述代理在多个结束阶段锁定文件中的每个结束阶段锁定文件上采用共享锁,每个结束阶段锁定文件与所述多个阶段中的对应阶段相关联。
5.根据权利要求4所述的方法,其中所述多个阶段中的每个阶段通过执行以下操作被制定:
释放相关联的开始阶段锁定文件上的所述排它锁以向所述代理信号通知所述阶段的开始,
尝试在相关联的结束阶段锁定文件上采用排它锁,
当由已经释放所述相关联的结束阶段锁定文件上的所有共享锁的代理启用时,在所述相关联的结束阶段锁定文件上采用所述排它锁,以由所述代理表示所述阶段的完成,以及
转换到制定下一阶段,直到所述多个阶段中的最后阶段被完成。
6.根据权利要求2所述的方法,其中跨所述虚拟盘协调所述多个计算设备处的所述多个日志的所述日志切换的所述循环包括:
向所述计算设备处的多个代理传输控制代码和/或消息以制定所述多个阶段,每个计算设备包括所述多个代理中的对应代理。
7.根据权利要求6所述的方法,其中所述多个阶段中的每个阶段通过执行以下操作被制定:
向所述多个代理传输控制代码;
等待来自所述多个代理中的每个代理对所传输的所述控制代码的响应;
如果所述代理中的至少一个代理未在预定时间段内利用所等待的所述响应来针对要被完成的所述多个阶段做出响应,则中止所述日志切换;以及
如果所有代理在所述预定时间段内做出响应,则转换到制定下一阶段,所述转换包括当所述多个阶段中的最后阶段被完成时完成所述日志切换。
8.一种写顺序一致跟踪协调器中的方法,包括:
发起多个计算设备处的与多个虚拟盘相关联的多个日志的日志切换的循环,所述虚拟盘存储在所述虚拟盘之间依赖于写顺序的数据,所述多个计算设备中的每个计算设备包括以下至少一项:
所述多个虚拟盘中的从应用接收存储访问请求的虚拟盘,所述存储访问请求包括写请求,和
多个日志中的与所述虚拟盘相对应的日志,所述日志接收与所述存储访问请求相对应的日志队列条目;以及
跨所述虚拟盘协调所述多个计算设备处的所述多个日志的所述日志切换的所述循环,以维持针对依赖写顺序的请求的请求排序,其中跨所述虚拟盘协调所述多个计算设备处的所述多个日志的所述日志切换的所述循环包括制定多个阶段以引起所述多个计算设备处的所述多个日志的所述切换,所述制定多个阶段包括:
制定第一阶段,在所述第一阶段期间新日志在所述多个计算设备中的每个计算设备处被初始化;
制定第二阶段,在所述第二阶段期间接收到的日志队列条目被阻止由所述多个计算设备处的所述日志接收;
制定第三阶段,在所述第三阶段期间所述新日志被配置为被用于在所述多个计算设备中的每个计算设备处接收所述日志队列条目,并且接收到的日志队列条目被解除阻止由所述多个计算设备处的所述日志接收;以及
制定第四阶段,在所述第四阶段期间所述日志切换被完成。
9.一种写顺序一致跟踪协调器,包括:
至少一个处理电路;以及
存储器,所述存储器存储用于操作的指令,所述指令定义:
日志切换发起器,被配置为与多个计算设备处的多个代理通信,以发起与所述多个计算设备处的多个虚拟盘相关联的多个日志的日志切换的循环并且在多个开始阶段锁定文件中的每个开始阶段锁定文件上采用排它锁,所述日志切换的循环包括针对对应新日志切换出每个当前日志,所述多个计算设备中的每个计算设备包括以下至少一项:
所述多个虚拟盘中的从应用接收存储访问请求的虚拟盘,所述存储访问请求包括写请求,和
多个日志中的与所述虚拟盘相对应的日志,所述日志接收与所述存储访问请求相对应的日志队列条目;以及
日志切换管理器,被配置为协调所述多个计算设备处的所述多个日志的所述日志切换的循环,以维持针对跨虚拟盘的依赖写顺序的请求的请求排序。
10.根据权利要求9所述的写顺序一致跟踪协调器,其中所述日志切换管理器被配置为制定多个阶段以引起所述多个计算设备处的所述多个日志的所述切换的循环。
11.根据权利要求10所述的写顺序一致跟踪协调器,其中每个开始阶段锁定文件与所述多个阶段中的对应阶段相关联;并且其中对于所述日志切换的循环,所述日志切换发起器被配置为:
向所述计算设备处的所述多个代理传输日志切换发起指令以发起所述日志切换。
12.根据权利要求11所述的写顺序一致跟踪协调器,其中所述日志切换发起器被配置为从所述代理中的每个代理接收响应,从所述多个代理中的代理接收到的每个响应指示所述代理在多个结束阶段锁定文件中的每个结束阶段锁定文件上采用共享锁,每个结束阶段锁定文件与所述多个阶段中的对应阶段相关联。
13.根据权利要求12所述的写顺序一致跟踪协调器,其中为了制定所述多个阶段中的每个阶段,所述日志切换管理器被配置为:
释放由所述日志切换发起器在相关联的开始阶段锁定文件上采用的所述排它锁以向所述代理信号通知所述阶段的开始,
尝试在相关联的结束阶段锁定文件上采用排它锁,
当由已经释放所述相关联的结束阶段锁定文件上的所有共享锁的代理启用时,在所述相关联的结束阶段锁定文件上采用所述排它锁,以由所述代理表示所述阶段的完成,以及
转换到制定下一阶段,直到所述多个阶段中的最后阶段被完成。
14.一种写顺序一致跟踪协调器,包括:
至少一个处理电路;以及
存储器,所述存储器存储用于操作的指令,所述指令定义:
日志切换发起器,被配置为与多个计算设备处的多个代理通信,以发起与所述多个计算设备处的多个虚拟盘相关联的多个日志的日志切换的循环并且在多个开始阶段锁定文件中的每个开始阶段锁定文件上采用排它锁,所述日志切换的循环包括针对对应新日志切换出每个当前日志,所述多个计算设备中的每个计算设备包括以下至少一项:
所述多个虚拟盘中的从应用接收存储访问请求的虚拟盘,所述存储访问请求包括写请求,和
多个日志中的与所述虚拟盘相对应的日志,所述日志接收与所述存储访问请求相对应的日志队列条目;以及
日志切换管理器,被配置为:
协调所述多个计算设备处的所述多个日志的所述日志切换的循环,以维持针对跨虚拟盘的依赖写顺序的请求的请求排序;以及
制定多个阶段以引起所述多个计算设备处的所述多个日志的所述切换的循环;
其中为了制定所述多个阶段中的每个阶段,所述日志切换管理器被配置为:
向所述多个代理传输控制代码;
等待来自所述多个代理中的每个代理对所传输的所述控制代码的响应;
如果所述代理中的至少一个代理未在预定时间段内利用所等待的所述响应来针对要被完成的所述多个阶段做出响应,则中止所述日志切换;以及
如果所有代理在所述预定时间段内做出响应,则转换到制定下一阶段,当所述多个阶段中的最后阶段被完成时所述日志切换被完成。
15.一种第一复制协调器中的方法,包括:
传输指令以执行在主侧上的多个计算设备处的与第一多个虚拟盘相关联的多个日志的日志切换的循环,所述第一多个虚拟盘存储分布式应用的数据,所述多个日志中的每个日志与所述第一多个虚拟盘中的虚拟盘相关联,所述第一多个虚拟盘中的每个虚拟盘被配置为从所述分布式应用接收存储访问请求,并且对应日志被配置为接收与所述存储访问请求对应的日志队列条目;
响应于所述日志切换的循环的执行,从所述计算设备接收多个日志;
标记接收到的所述多个日志中的每个日志以至少指示所述日志切换的循环;以及
通过向第二复制协调器传输经标记的所述多个日志来提供经标记的所述多个日志,以启用在副本侧上的第二多个虚拟盘中的写顺序一致存储点,所述写顺序一致存储点是在时间点处在所述主侧上的所述第一多个虚拟盘的副本,所述存储访问请求可适用于将所述第二多个虚拟盘与所述第一多个虚拟盘同步。
16.根据权利要求15所述的方法,其中所述传输包括:
指令写顺序一致跟踪协调器以协调所述日志切换的循环。
17.根据权利要求15所述的方法,其中所述第二复制协调器被配置为协调所述存储访问请求到所述第二多个虚拟盘的应用,所述第一复制协调器和所述第二复制协调器各自被配置为处理故障,包括以下至少一项:处理所述多个日志的生成期间的故障、在所述副本侧接收所述多个日志的子集的故障、或者将所述多个日志中的全部日志应用于在所述副本侧上的所述第二多个虚拟盘的故障中。
18.根据权利要求17所述的方法,其中当在所述主侧上的所述多个计算设备的子集未能参与所述日志切换的循环时,所述第一复制协调器和所述第二复制协调器支持当所述子集恢复时向所述副本侧传输所述多个计算设备中的其他计算设备的所述多个日志。
19.根据权利要求15所述的方法,其中所述提供包括:
向第二多个计算设备处的多个代理提供经标记的所述多个日志,以将所述存储访问请求应用于所述第二多个虚拟盘;
所述方法还包括:
等待来自所述多个代理的、对经标记的所述多个日志被成功应用于所述第二多个虚拟盘的确认;以及
响应于从所述多个代理接收到所述确认,使得经标记的日志的第二集合能够被应用于所述第二多个虚拟盘。
20.根据权利要求15所述的方法,其中所述接收包括:
从所述主侧上的对应计算设备单独地接收所述多个日志中的每个日志。
CN201580051566.XA 2014-09-24 2015-09-22 以近似同步的频率在多个主机上的多流应用的快照和复制的方法和系统 Active CN106716380B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/495,685 2014-09-24
US14/495,685 US10073902B2 (en) 2014-09-24 2014-09-24 Snapshot and replication of a multi-stream application on multiple hosts at near-sync frequency
PCT/US2015/051293 WO2016048921A1 (en) 2014-09-24 2015-09-22 Snapshot and replication of a multi-stream application on multiple hosts at near-sync frequency

Publications (2)

Publication Number Publication Date
CN106716380A CN106716380A (zh) 2017-05-24
CN106716380B true CN106716380B (zh) 2019-09-20

Family

ID=54293344

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201580051566.XA Active CN106716380B (zh) 2014-09-24 2015-09-22 以近似同步的频率在多个主机上的多流应用的快照和复制的方法和系统

Country Status (5)

Country Link
US (2) US10073902B2 (zh)
EP (1) EP3198445B1 (zh)
CN (1) CN106716380B (zh)
BR (1) BR112017005450B1 (zh)
WO (1) WO2016048921A1 (zh)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8898668B1 (en) * 2010-03-31 2014-11-25 Netapp, Inc. Redeploying baseline virtual machine to update a child virtual machine by creating and swapping a virtual disk comprising a clone of the baseline virtual machine
US9092482B2 (en) 2013-03-14 2015-07-28 Palantir Technologies, Inc. Fair scheduling for mixed-query loads
US8490092B2 (en) 2011-07-06 2013-07-16 Microsoft Corporation Combined live migration and storage migration using file shares and mirroring
US9600206B2 (en) 2012-08-01 2017-03-21 Microsoft Technology Licensing, Llc Request ordering support when switching virtual disk replication logs
US20160283145A1 (en) * 2015-03-24 2016-09-29 Lenovo (Beijing) Co., Ltd. Electronic Device, Power Failure Protection Method and Data Recovery Method
US11423004B2 (en) * 2015-04-17 2022-08-23 Netapp Inc. Granular replication of volume subsets
US9910697B2 (en) 2015-10-13 2018-03-06 Palantir Technologies Inc. Fault-tolerant and highly-available configuration of distributed services
US11038960B1 (en) * 2015-10-20 2021-06-15 Amazon Technologies, Inc. Stream-based shared storage system
US10331546B2 (en) 2016-06-23 2019-06-25 Vmware, Inc. Determination of a culprit thread after a physical central processing unit lockup
US10331508B2 (en) 2016-06-23 2019-06-25 Vmware, Inc. Computer crash risk assessment
US10268563B2 (en) * 2016-06-23 2019-04-23 Vmware, Inc. Monitoring of an automated end-to-end crash analysis system
US10338990B2 (en) 2016-06-23 2019-07-02 Vmware, Inc. Culprit module detection and signature back trace generation
US10365959B2 (en) 2016-06-23 2019-07-30 Vmware, Inc. Graphical user interface for software crash analysis data
US9836402B1 (en) 2016-07-22 2017-12-05 Red Hat, Inc. Guest ordering of host file system writes
US10872074B2 (en) * 2016-09-30 2020-12-22 Microsoft Technology Licensing, Llc Distributed availability groups of databases for data centers
US10866963B2 (en) 2017-12-28 2020-12-15 Dropbox, Inc. File system authentication
US11030216B2 (en) 2018-01-08 2021-06-08 International Business Machines Corporation Replicating non-supported data types using an existing supported replication format
CN110058962B (zh) * 2018-01-18 2023-05-23 伊姆西Ip控股有限责任公司 确定虚拟机快照的一致性级别的方法、设备和计算机程序产品
TWI737189B (zh) * 2019-02-23 2021-08-21 國立清華大學 易於從固態儲存裝置之故障中還原的方法、電腦系統,及固態儲存裝置
US11010146B2 (en) * 2019-06-18 2021-05-18 Vmware, Inc. Unified management of heterogeneous applications
US11636071B2 (en) * 2020-01-10 2023-04-25 Salesforce.Com, Inc. Database replication error recovery based on supervised learning
CN113032344B (zh) * 2020-08-25 2021-08-27 广州锦行网络科技有限公司 一种远程登录日志记录的清理方法
US11809449B2 (en) * 2021-09-20 2023-11-07 EMC IP Holding Company LLC Granular data replication
CN114244859B (zh) * 2022-02-23 2022-08-16 阿里云计算有限公司 数据处理方法及装置和电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1492324A (zh) * 2002-09-17 2004-04-28 �Ҵ���˾ 多处理器存储器一致性的高效仿真方法和系统
CN101127879A (zh) * 2007-10-10 2008-02-20 张福泉 智能化存取数据的流媒体点播系统
US7356679B1 (en) * 2003-04-11 2008-04-08 Vmware, Inc. Computer image capture, customization and deployment
US8285956B2 (en) * 2009-10-22 2012-10-09 Symantec Corporation Efficient logging for asynchronously replicating volume groups
CN103493028A (zh) * 2011-04-26 2014-01-01 微软公司 虚拟盘存储技术

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6065018A (en) 1998-03-04 2000-05-16 International Business Machines Corporation Synchronizing recovery log having time stamp to a remote site for disaster recovery of a primary database having related hierarchial and relational databases
JP2008108227A (ja) * 2006-09-25 2008-05-08 Hitachi Ltd ストレージシステム及び監査ログ管理方法
US8131723B2 (en) 2007-03-30 2012-03-06 Quest Software, Inc. Recovering a file system to any point-in-time in the past with guaranteed structure, content consistency and integrity
US8364648B1 (en) 2007-04-09 2013-01-29 Quest Software, Inc. Recovering a database to any point-in-time in the past with guaranteed data consistency
WO2009108579A2 (en) * 2008-02-26 2009-09-03 Vmware, Inc. Extending server-based desktop virtual machine architecture to client machines
US8046550B2 (en) 2008-07-14 2011-10-25 Quest Software, Inc. Systems and methods for performing backup operations of virtual machine files
US8554737B2 (en) 2010-09-28 2013-10-08 International Business Machines Corporation Dynamic consistency group formation and systems using the same
US8689047B2 (en) 2011-07-22 2014-04-01 Microsoft Corporation Virtual disk replication using log files
US8839031B2 (en) 2012-04-24 2014-09-16 Microsoft Corporation Data consistency between virtual machines
US9600206B2 (en) 2012-08-01 2017-03-21 Microsoft Technology Licensing, Llc Request ordering support when switching virtual disk replication logs
US9582297B2 (en) * 2013-05-16 2017-02-28 Vmware, Inc. Policy-based data placement in a virtualized computing environment

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1492324A (zh) * 2002-09-17 2004-04-28 �Ҵ���˾ 多处理器存储器一致性的高效仿真方法和系统
US7356679B1 (en) * 2003-04-11 2008-04-08 Vmware, Inc. Computer image capture, customization and deployment
CN101127879A (zh) * 2007-10-10 2008-02-20 张福泉 智能化存取数据的流媒体点播系统
US8285956B2 (en) * 2009-10-22 2012-10-09 Symantec Corporation Efficient logging for asynchronously replicating volume groups
CN103493028A (zh) * 2011-04-26 2014-01-01 微软公司 虚拟盘存储技术

Also Published As

Publication number Publication date
US20160085837A1 (en) 2016-03-24
EP3198445B1 (en) 2018-06-27
US10073902B2 (en) 2018-09-11
BR112017005450B1 (pt) 2022-12-20
CN106716380A (zh) 2017-05-24
BR112017005450A2 (pt) 2017-12-12
EP3198445A1 (en) 2017-08-02
WO2016048921A1 (en) 2016-03-31
USRE47852E1 (en) 2020-02-11

Similar Documents

Publication Publication Date Title
CN106716380B (zh) 以近似同步的频率在多个主机上的多流应用的快照和复制的方法和系统
CN103608786B (zh) 在恢复站点处管理复制的虚拟储存器
US8407435B2 (en) Efficiently creating a snapshot of a large consistency group using multiple commands including a snapshot preparation command
JP5661176B2 (ja) 遠隔仮想計算機全体にわたって耐故障チェックポインティングを達成するための方法及びシステム
US9798792B2 (en) Replication for on-line hot-standby database
US8468313B2 (en) Asynchronous replication with write concurrency grouping
US10614096B2 (en) Disaster recovery of mobile data center via location-aware cloud caching
US8020041B2 (en) Method and computer system for making a computer have high availability
JP5258019B2 (ja) アプリケーション・プロセス実行の範囲内での非決定論的オペレーションを管理、ロギング、またはリプレイするための予測方法
CN109493223B (zh) 一种记账方法及装置
EP2304569B1 (en) Performing a data write on a storage device
US7254685B1 (en) Method for maintaining high performance while preserving relative write I/O ordering for a semi-synchronous remote replication solution
US10055307B2 (en) Workflows for series of snapshots
WO2014197963A1 (en) Failover system and method
US9672165B1 (en) Data management tier coupling primary storage and secondary storage
US7996716B2 (en) Containment and recovery of software exceptions in interacting, replicated-state-machine-based fault-tolerant components
US10691353B1 (en) Checking of data difference for writes performed via a bus interface to a dual-server storage controller
US10719388B2 (en) Decoupled maintenance and repository synchronization error detection
US20170235600A1 (en) System and method for running application processes
JP2009080705A (ja) 仮想計算機システム及び同システムにおける仮想計算機復元方法
Scales et al. The design and evaluation of a practical system for fault-tolerant virtual machines
US7636821B2 (en) Asynchronous hybrid mirroring system
EP3811227B1 (en) Methods, devices and systems for non-disruptive upgrades to a distributed coordination engine in a distributed computing environment
US7334096B1 (en) Architecture and apparatus for atomic multi-volume operations
US7328318B1 (en) System and method for atomic multi-volume operations

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant