远程异步数据复制系统和方法

文档序号:6477913阅读:292来源:国知局
专利名称:远程异步数据复制系统和方法
技术领域
本发明涉及一种远程数据复制系统和方法,尤其涉及的是远程异步的对等数据复 制。
背景技术
随着计算机时代的崛起和数字大容量存储系统的普及,在我们的日常生活中有越 来越多有价值数据被托付给了较脆弱的磁性介质。从我们的信用卡交易和医疗记录到音乐 收集以及照片的一切事物都被保存在了磁盘上。虽然为孩子的唯一照片估价不像确定银行 存款那么简单,但如果照片损毁,父母必然会感到非常痛苦。随着采用数字格式存储的信息的密度的增长,损毁的风险也在提升。将数据保存 在企业还是家中,类似于功率剧变的小事故,因为小火灾而导致的喷洒系统激活,或是一时 盗窃行为都有可能导致巨大的损失。针对这个问题的一个解决方案是数据备份。数据备份 包括将通常按日或按周累积的大量数据传送到离线的磁存储介质,然后将该存储介质迁移 到异地保存。这种将数据备份到更持久的离线介质的实践降低了一些损失风险,但需要严 格遵守时间表,并且无法防止丢失或损害在备份事件之间存储的数据。单靠备份不足以保护数据免受常见问题损害。随着小火灾的蔓延,很小的事故往 往会变大,暴风雨会变成洪水,功率剧变会变成电源故障。鉴于较大事件来快速恢复访问以 及恢复数据可用性的处理需要数据拷贝之间具有一定的地理分离度。虽然将备份移动到异 地可以缓解某些数据损失风险,但是恢复访问此类远程存储的数据的处理是一个冗长的易 出错过程,并且经常为商业运作招致很长的停业时间。—种更好的数据恢复方法是实施计算机存储系统的远程副本的自动更新处理。这 种实践被称为远程复制(通常也被称为复制)。备份不同于复制,因为它会在很长的时段中 保存数据拷贝不做改变,而复制则包含了频繁的数据更新和快速恢复。企业通常会使用远 程复制作为其容灾难恢复或持续营运规划的中心部分。远程复制既可以是同步的,也可以是异步的。同步远程数据复制系统会在多个位 置保存数据存储组件的多个相同拷贝,并且需要主机应用在相同变更被应用于所有副本之 后才接收成功变更应答。这个需要确保了数据在所有位置始终相同,并且某一个站点的故 障不会导致产生遗失数据。但是,这种可靠等级是以很高的代价得到的。在每次更新的时 候都要忍受传送数据的性能损失,并且所需要的网络硬件也是极其昂贵的。此外,随着站点 之间距离的增大,成本也会急剧提升。异步远程复制系统缓解了上述需求,由此允许在主机接收到应答之后在某些点执行远程更新。在异步复制中使用的方法有很多,但是它们通常包括由本地系统保持某种类 型的更新日志,该日志则被传送和应用于远程系统。何时以及如何传送这种日志对于复制 系统的可靠性特性具有显著的影响,因为保存在日志中的数据量同样也是本地站点发生灾 难时会丢失的数据量。就营运连续性而言,远程复制是一种非常强大的工具。此外,对于其他家庭和商业 应用来说,它同样有可能是一种强大的工具。但是,当前解决方案的成本和复杂度妨碍了其 被广泛采用。同步远程复制在网络定价和性能损失方面都具有过高的成本,而异步远程复 制也没有做得更好。

发明内容
一般来说,在一个方面中,本发明的特征是一种在复制集群内部实施的异步数据 复制方法,其中该集群包括至少一个主节点,并且至少包括第一客户机节点。主节点包括主 日志,第一客户机节点则包括第一客户机日志。该方法包括在主节点的数据卷中输入一个 更新,并且将该更新保存在主节点存储器中。接下来,在主日志中更新第一活动会话,然后 则将第一消息从主节点发送到第一客户机节点。第一消息包括第一消息内容和表明主日志 中的第一活动会话已被更新的第一“捎带”数据。接下来,第一客户机节点接收第一消息, 对主日志中的第一活动会话已被更新的状况进行登记,并且在内部用信号通告主日志中的 第一活动会话已被更新。接下来,从第一客户机节点向主节点发送一个更新请求,主节点则 对该更新请求进行处理,并且将其发送到第一客户机节点。最后,第一客户机节点接收该更 新,并且更新第一客户机日志中的第一活动会话。本发明这个方面的实施方式可以包括下列特征中的一个或多个。第一活动会话包 括一个或多个会话分段。主日志包括存储了所有集群节点的所有会话分段的主活动会话矩 阵,第一客户机日志则包括存储了所有集群节点的所有会话分段的第一客户机活动会话矩 阵。每一个会话分段都包含了一个索引和一个时间戳,并且会话矩阵显示了所有集群节点 的所有会话分段的索引和时间戳。更定第一活动会话的处理包括在一个范围结构(extent structure)中写入数据,并且将该范围结构输入第一活动会话。该范围结构的长度可以比 会话分段的长度更长,于是,该范围结构将被输入一个以上的会话分段。主节点的更新请求 处理包括在住活动会话矩阵中定位所有那些尚未被传送到第一客户机节点日志的会话分 段,并且将所识别的会话分段发送到第一客户机节点。尚未传送至第一客户机节点的会话 分段被识别成是注册在与第一客户机节点相对应的主会话矩阵的行中的会话分段,并且该 节点的时间戳要早于与在主节点相对应的主活动会话矩阵的行中最近更新的会话分段的 时间戳。复制集群可以包括第二客户机节点,并且第二客户机节点包括第二客户机日志,该 日志具有存储了所有集群节点的所有会话分段的第二客户机活动会话矩阵。该方法还可以 包括从第一客户机节点向第二客户机节点发送第二消息。该第二消息包括第二消息内容以 及表明第一活动会话已被更新的第二“捎带”数据。该方法还包括第二客户机节点接收第 二消息,对主日志和第一客户机日志中的第一活动会话已被更新的状况进行登记,并且在 内部用信号通告第一活动会话已被更新。接下来,从第二客户机节点向第一客户机节点发 送更新请求,第一客户机节点对该更新请求进行处理,并且将所述更新发送到第二客户机 节点,然后,第二客户机节点接收该更新,并且在第二客户机日志中更新第一活动会话。该消息可以是一个从主节点周期性发送到任何客户机节点的“健康检查”消息,或者是从任一 客户机节点周期性发送至主节点的“健康检查”消息,抑或是从任一客户机节点周期性发送 至复制集群内部的其他客户机节点的“健康检查”消息。该方法还可以包括在主日志以及 任何客户机日志中完成第一活动会话。主日志还包括用于每一个集群节点的授权和访问控 制协议。该访问控制协议则包含了读写、只读和纯复制中的一项。一般来说,在另一个方面中,本发明的特征是一种用于在复制集群中执行对等数 据复制的数据复制系统,其中该集群包括至少一个主节点,并且至少包括第一客户机节点。 该主节点包括计算设备、主存储器以及会话存储器。计算设备包括数据复制应用,它被配 置成在主节点的数据卷中输入一个更新,并且将这个更新保存在主节点的主存储器中,在 会话存储器存储的主日志中更新第一活动会话,将第一消息从主节点发送到第一客户机节 点,以及在接收到来自第一客户机节点的更新请求时处理更新请求,并且将所请求的更新 发送到客户机节点。第一消息包括第一消息内容和表明主日志中的第一活动会话已被更新 的第一“捎带”数据。第一客户机节点包括计算设备、主存储器和会话存储器。第一客户机 节点的计算设备包括数据复制应用,它被配置成接收主节点的第一消息,对主日志中的第 一活动会话已被更新进行登记,并且在客户机节点内部用信号通告主日志中的第一活动会 话已被更新,向主节点发送更新请求,从主节点接收更新,以及在会话存储器存储的第一客 户机日志中更新第一活动会话。本发明的优点可以是下列各项中的一项或多项。对等复制解决方案是可以范围和 简化的,与现有技术的复制解决方案相比,它还降低了成本。对等复制系统的架构支持多个 复制站点。这种能有效利用带宽的多路复制允许将数据从一个站点复制到多个站点,而不 会增大主站点的带宽需求。此外,这种多路复制还允许在一个会话日志中追踪多个站点的 复制状态,并且能在任一站点的图像均未完成的情况下重建数据图像。可调谐的数据复制 处理允许用户配置一组增量矩阵约束条件,并且在主站点可以认为数据分段已被安全复制 之前必须满足这些条件。在附图和后续描述中阐述了本发明一个或多个实施例的细节。从后续关于优选实 施例、附图和权利要求中可以清楚了解本发明的其他特征、目标和优点。


参考附图,其中相同的数字在附图中始终代表相同的部分图1是现有技术中的复制系统的框图;图2A是根据本发明的对等数据复制系统的示意性概要图;图2B是根据本发明的对等数据复制方法的概要框图;图3是图2A的复制应用的概要框图;图4是用于图2A中的主节点A的会话日志的框图;图5是用于图2A中的客户机节点B的会话日志的框图;图6A描述的是图4的会话日志中的范围结构的框图;图6B描述的是图4的会话日志中的会话结构的框图;图6C描述的是图4的会话日志中的会话矩阵的框图;图7是主节点的“写入日志会话”处理的流程图8是“更新活动会话”处理的流程图;图9是“向节点发送消息”处理的流程图;图10是“集群健康监视”处理的流程图;图11是节点上的“接收消息”处理的流程图;图12是客户机节点上的“更新会话”处理的流程图;图13是用于在节点上处理更新请求的流程图;图14是用于完成主节点上的活动会话的流程图;以及图15是用于完成客户机上的活动会话的流程图。
具体实施例方式参考图1,现有技术的复制系统80使用了集线器和轮辐类型的拓扑结构来将保存 在位于主节点82的卷83中的数据分别复制到位于客户机节点84、86、88的卷85、87、89。 主节点82的卷83中的数据更新通常会经由有线或无线网络连接而被分别“推送”到客户 机节点84、86、88放入卷85、87、89。如上所述,这种数据复制会受网络70的带宽的限制,通 常其速度很慢并且非常昂贵,对同步类型的复制来说尤为如此。参考图2A,根据本发明的改进型数据复制系统100使用了“对等”拓扑结构来将保 存在本地站点A的主存储器116中的数据分别复制到位于远端站点B、站点C和站点D的存 储系统126、136、146。站点C和D可以与站点A处于相同位置,或者也可以处于其他远程位 置。在“对等”复制拓扑结构中,数据时在数据网络的所有站点之间双向复制的。在图2的 示例中,保存在主存储器A 116中的数据分别经由连接90a、92a和90c而被复制到位于站 点8丄、0的存储器126、136、146。同样,保存在存储器B 126的数据分别经由连接90a、90b、 90c而被复制到位于站点A、C、D的存储器116、136、146。此外,保存在存储器C 136中的 数据分别经由连接92a、90c、90d而被复制到位于站点A、B、D的存储器116、126、146。更进 一步,保存在存储器D 146中的数据分别经由连接90c、92b和90d而被复制到位于站点A、 B、C的存储器116、126、136。连接90a-90d以及92a_92d顾及了相应站点之间的双向通信, 并且可以是有线或无线连接,这其中包括局域网(LAN)、广域网(WAN)、个人局域网(PAN)、 因特网以及无线广域网(WWAN)。每一个本地站点A、B、C、D都分别包括支持数据复制应用 114、124、134、144 的主机 112、122、132、142,本地存储设备 116、126、136、146 以及会话存储 器118、128、138、148。主机A、B、C、D可以是个人计算机、服务器、工作站、大型机、台式计算 机、膝上型计算机、计算电路或是其任何组合。在一个示例中,主机A112是个人计算机,并 且经由连至计算机小型计算机系统界面(SCSI)端口的电缆与主存储器116相连。主存储 器116是一个外部存储设备,例如光盘或磁带。主机A 112还与充当会话存储器A 118的 内部存储设备相连。在其他实施例中,本地站点C和D不包含主机设备。在图2A的实施例中,集群节点A 114在一开始被设置成是“主”节点或“源”,也就是发起数据“更新”的节点。在该实施例中,集群节点B 124是“客户机”节点或“目标”,也 就是接收和拷贝主节点A的“更新”的节点。在一个示例中,“更新”在一定程度上是在某个 范围、也就是文件中的连续存储区域中的写入/存储处理。复制应用114则捕捉数据“更 新”并且将其应用于会话日志。参考图3,复制应用114包括会话日志200、集群信息160以及消息传递系统150。主节点的会话日志200保持了已经在源中应用的更新集合。参考图4,主节点A的会话日 志200包括活动会话结构260、活动会话矩阵270,待决会话矩阵273,已完成会话矩阵280 以及已完成会话结构290。客户机节点的会话日志210保持了应用于目标的“更新”集合。 参考图5,客户机节点B的会话日志210包括活动会话矩阵274、待决会话矩阵275、待决会 话结构265、已完成会话矩阵285以及已完成会话结构295。活动会话是被应用了当前更新 的会话。已完成会话是到达远程稳定状态的会话。待决会话是不在主动接收更新但是尚未 达到远程稳定状态的会话。相应的会话矩阵(活动,待决和已完成)则分别显示了所有集 群节点的所有会话(活动,待决和已完成)。 如图6A所示,当前“更新”首先是在范围结构262中捕捉的。范围结构262包括 偏移261、长度263以及已捕获数据267。然后如图6B所示,该范围将被置入活动会话260。 每一个活动会话都包含了会话分段264,并且每一个会话分段都被指定了一个索引267和 一个时间戳266。在图6B的示例中,范围A是第一引入范围,并且被置入会话分段索引2。 逻辑时间戳被变更成与当前时间戳ltimStamp2相匹配。一个范围可以跨越一个以上的会 话分段。在图6B的示例中,范围A跨越了分段索引2,并且局部跨越了分段索引3。然后, 如图6C所示,所有集群节点的所有会话分段都会显示在活动会话矩阵270中。矩阵270的 顶行272显示的是会话分段索引1-n,并且左边的行271显示的是集群节点A-C。字段273 为每一个集群节点(即A,B,C)显示了每一个会话分段(1,2,3,4…η)的时间戳。集群信息160包括复制集群100的所有复制节点Α、B、C、d的目录162,节点状态 信息164,以及每一个节点166的授权和访问控制权限。节点状态信息164包含的是关于节 点状态的信息,这其中包括节点主存储器和日志会话存储器的状态。用于每一个节点的授 权访问控制权限和验证机制同样保存在集群信息卷166中。节点可以具有三种授权状态之 一读写、只读和纯复制。具有只读授权的节点对卷具有全部权限。具有只读权限的节点可 以创建视图并且提供有限制的回滚。只读授权不允许节点充当完全的故障切换站点,这是 因为主机更新是不允许复制的。具有纯复制授权的节点未必创建任何视图或伪视图,但是 它可以作为有限回滚站点使用。在只读回滚站点中,主机更新只被允许应用于数据伪视图。 对只读和纯复制回滚来说,所需要的是不积极复制主机更新,在纯复制回滚中,网络上任何 地方的主机更新都是不允许活动的。消息传递系统150在节点A、B、C、D之间提供了双向通信。消息传递系统150具 有“捎带”处理,在此期间,从任一节点发送到任一其他节点的消息都包括用于表明请求传 送的可用会话存在的元数据。如果没有在集群100内部工作的其他处理,则周期性发送一 个集群“健康检查”消息。“健康检查”消息还包括用于表明所要传送的可用会话存在的数 据。在一个示例中,主节点A 114发起“健康检查”消息,并且随机选择节点C 134作为接 收方。在将“健康检查”消息发送到节点C之前,处于节点A的消息传递系统150自动处理 节点A的会话矩阵,寻找在最后一次消息传递时起可能发生变化的行。在一个示例中,可以 注意到的是,在会话0矩阵中,节点A的条目的逻辑时间戳大于节点C的时间戳,并且将行 附加语“健康检查”查询。它会将查询发送到节点C,然后则接收响应,其中该响应还可以包 括来自节点C的捎带元数据。这种唯一的“捎带”消息传送机制是一种用于在复制集群100 中分发元数据的方法。与显性投票或发送更新不同,消息被随机地从一个节点发送到另一 个节点,以便防止任何单个处理或节点压倒网络或是其他节点处理器。在这种情况下,所有通信和处理都是完全异步的。
参考图2B,根据本发明的异步“对等”数据复制方法600包括下列步骤。首先,在 复制集群的主节点中输入更新。该更新被写入主节点的日志会话,并且主节点日志中的活 动会话将被更新(610)。接下来,主节点向客户机节点发送一个消息。该消息包含了用于 指示在主日志中存在已更新的活动会话的捎带元数据(620)。客户机节点接收具有捎带元 数据的消息,注意到主节点中的活动会话已经更新,并且在内部用信号通告主节点中存在 已更新的活动会话(630)。客户机节点向主节点发送一个更新请求(640)。主节点对更新 请求进行处理,并且将所请求的更新发送到客户机节点(650)。客户机节点接收该更新,并 且将其写入客户机节点的日志会话(660)。主节点完成主日志会话中的活动会话(670),然 后,客户机节点完成客户机日志会话中的活动会话(680)。对于每一个新的更新来说,该处 理都会重演。在操作中,举个例子,主机A 112的用户在PowerPoint演示文件中“写入”(也就 是保存)一些数据。主机A的操作系统通过将该数据封装在SCSI请求中来发布所述“写 入”,其中该请求同时包含了数据以及在主存储器A 116的数据卷中的位置。参考图7,写 入主节点A的会话日志的处理包括下列步骤。首先,主机A向复制应用114发送“写入”请 求,复制应用114则接收该请求(302)并且在内部将其发送到主存储器A 116(304)。如果 “写入”主存储器成功(306),则系统更新活动会话(308)。如果活动会话的更新成功,则系 统返回(311)。如果更新未成功,则系统用信号通告错误(312)。在完成了“写入”任务之 前或之后,在集群100内部不会立即发起其他通信。参考图8,主节点A中的活动会话的更新处理320包括下列步骤。复制应用114接 收“写入”请求(322),将其格式化成“写入”范围262 (如图6A所示),并且将其放在活动会 话结构260中(如图6B所示)。“写入”范围结构262中的数据267是保存在Powerpoint 演示文件中的数据。如果“写入”与现有范围重叠(324),并且“写入”与现有范围相适应 (326),则改写范围数据(327),并且更新活动会话结构260中的范围索引和逻辑时间戳 (324)。如果会话完成(344),则系统对此加以指示(345),如果会话未完成,则系统返回至 完成该会话(346)。如果“写入”不适合现有范围,则通过将其分割来适合第一范围(328), 以及改写第一范围(330),并且在活动会话结构260中更新其索引以及逻辑时间戳(332)。 对剩余“写入”数据来说,该处理将会重演。在图6A的示例中,范围A的结构在活动会话结 构260中是最前的,并且其被放置在了会话分段索引编号2。范围A的结构跨越了会话分段 索引2,并且部分跨越了会话分段索引3。会话分段索引2和3的逻辑时间戳255则被变更 成与逻辑时间相匹配。接下来,节点A上的消息传递系统150向节点C发送一个消息,并且在所发送的消 息中指示了已更新数据的存在。该消息可以是一个健康检查消息或是其他任何类型的消 息。参考图9,用于指示在集群节点A中存在已更新数据的处理350包括以下步骤。第一 节点A制定一个消息(352),然后在其日志会话矩阵270中扫描活动和非丢弃会话(354)。 对每一个会话矩阵来说,首先识别的是节点C的时间戳(364),然后识别的是时间戳高于节 点C的时间戳的所有行(366),并且随后会将所识别的这些行和会话索引(ID)附加于消息 (368)。接下来,具有附加的行和会话索引的消息被发送到节点C(358),并且节点A的日志 会话矩阵270中的节点C的时间戳将被更新到最近(362)。如果在节点A的会话矩阵270中没有尚未传送到节点C的已更新会话数据,则发送不带有附加信息的消息(358),并且更新节点A的会话矩阵270中的节点C的时间戳(362)。如上所述,即使在集群100内部没有待发送的消息或是其他任何待决处理,该系统都会发起一个周期性运行的集群健康监视处理380。参考图10,集群健康监视处理380包 括以下步骤。首先,节点A选择一个随机节点(即节点C) (382)并发送一个健康检查消息 (384)。同样,在这种情况下,如上所述,系统将会运行图9中的处理350,以便附加任何当前 更新。节点C接收健康检查消息,并且向节点A发送一个应答。节点A接收应答(386),并 且将节点C的状态标记为良好(387)。该系统则等待一个设定的时间间隔389,然后则重复 该处理(397)。如果节点A没有接收到来自节点C的应答,则它将节点C标记为可疑(388), 并且在集群内部选择三个别的节点(390),以及通过向这些节点发送请求来向节点C发送 健康检查消息(392)。如果响应于这个请求,节点A从节点C或是其他三个节点中的任一 节点接收到关于节点C的状态为良好的应答(394),那么它会将节点C的状态标记为良好 (396)。如果节点没有从节点C或其他三个节点中的任一节点接收到关于节点C的状态的 应答,那么它会将节点C的状态标记为当机(395)。在上述从节点C或其他任何集群节点到 节点A的任一响应中也可以包括用于指示在相应节点的会话矩阵中存在会话更新的附加 数据。参考图11,节点接收消息的处理400包括以下步骤。首先,节点C接收来自节点A 且带有附加更新的消息(402)。它会检查是否存在任何“捎带”数据,也就是关于节点A的 会话日志中的会话更新的指示(404)。如果没有任何“捎带”数据,则它对该消息进行处理 (406),并且向节点A返回一个响应(407)。如果存在“捎带”数据,则其为每一个数据条目 更新其会话矩阵(408)。在一个示例中,节点C接收的“捎带”数据包含了来自会话0矩阵 的节点A的行。对于会话0中的节点A来说,由于已更新的时间戳大于节点C的当前时间 戳,因此,节点C会将所述行应用于会话矩阵。然后,它会将所述行与用于会话0的节点C 的行相比较,并且发现至少有一个会话索引相对较新(409),由此,它会在内部用信号通告 更新可用(410)。对每一个数据条目(405)来说,节点C还会处理消息主体(411),并且向 节点A发送一个响应(412)。该响应同样包含了节点C的会话矩阵中的已更新会话。参考图12,在客户机节点C上更新会话的处理420包括以下步骤。一旦接收到关 于更新可用的内部信号(421),则客户机节点C进入更新处理。节点C上的系统定位具有可 用更新的最早会话矩阵(422)。它会识别行索引高于所述节点行索引的那些节点(424),并 且随机选择一个节点(426),以及向选定节点发送一个带有更新请求的消息(428)。在一个 示例中,节点C搜索其可用会话矩阵(也就是说,此时仅仅是会话0),并且会发现节点A具 有一个以上的行索引时间戳大于其自身(节点C)的行索引时间戳,然后,节点C向节点A 发送一个更新请求消息。如下文以及图13所述,节点A对这个更新请求进行处理,并且向 节点C发送已更新的会话数据。节点C接收已更新的会话数据,将该更新写入恰当的会话 结构(30),并且更新该会话的时间戳(432)。如果还有附加会话更新(434),则重复执行该 处理(436),直至在节点C中更新了所有会话(具有已更新数据)及其时间戳(435)。节点 C上的会话更新完成状况将被反向报告给节点A(437)。在一个示例中,节点A上的“写入” 跨越了四个会话索引2、3、4和5。节点C会将更新请求420运行四次,以便将其会话数据与 节点A的数据会话同步。
参考图13,关于节点更新请求的处理(450)包括以下步骤。首先,主节点A从客 户机节点C接收一个要求接收会话ο中的更新的请求(452),然后则尝试确定会话0中的 最佳组块,以便送回节点C。节点A上的系统将客户机节点C的行定位在其会话0矩阵中 (454),并且将其自身(节点A)的行定位在会话0矩阵中。节点A的系统将其自身在会话0 中的行与客户机节点C的行相比加送,并且发现比节点C的索引更近且最近最少使用的索 引(458),以及将其送回到节点C(459)。在上述关于跨越了会话索引2、3、4、5的节点A的 “写入”示例中,首先将会选择位于索引2的缓存分段,以便将其传送到节点C。如上所述,在正常操作过程中,节点C的健康监视处理是周期性触 发的。在这样一 种情况下,节点C向节点B发送一个健康检查消息,并且该消息现在包含了在会话0中处在 用于节点A的行以及用于节点C的行中的更新。节点B接收这个来自节点C的消息,并且 更新其自身的会话矩阵,以便反映这些变化。节点B将其自身在会话0矩阵中的行与节点 A和节点C的行相比较,并且注意到更新可用。在这种情况下,由于节点C和节点A具有已 经同步和更新的会话0,因此,节点B可以选择节点A或节点C来发送更新请求。假设节点 B向节点C发送第一更新请求,并且作为回报接收到了来自节点C的缓存索引2。如果我们 进一步假设节点C尚未完成其缓存索引3、4、5的更新,那么在下一个更新周期中,节点B会 再次检查这些行,发现节点A是具有索引3、4和5中的剩余更新的位移节点,以及向节点A 发送关于缓存索引3、4和5的更新请求、同时,节点D向节点A发送一个健康检查消息,并 且接收那些针对节点A和节点C在会话0矩阵中的行的更新。任何节点中的活动会话可能因为多种原因而在任何时间完成。参考图14,完成主 节点中的活动会话470的处理包括以下步骤。首先,主节点A中的活动会话0完成(472) 并且锁定(474)。随后将会计算(476)和存储(478)会话散列值。接着,该会话的状态被 设置成完成(480),并且范围会话1的逻辑时间戳将被更新(482)。接下来将会创建新的活 动会话(484),这个新会话是未锁定的(486),并且这个新会话将被返回(488)。接着,客户 机节点C向主节点A发布一个更新请求,并且接受来自会话0缓存索引1的数据、节点C注 意到会话的状态变为“已完成”,并且将其自身的会话0的行与节点A的会话0的行相比较。 如果这两个行相同,则节点C可以完成其自身会话0。在完成自身会话0之前,节点C将会 验证其会话数据的正确性。参考图15,在客户机节点C上完活动会话的处理490包括以下 步骤。首先,客户机节点C注意到主节点A中的会话0的状态是已完成,并且其自身会话0 的行与主节点A的会话0的行相等(491)。接下来,客户机节点C计算其会话0缓存的散 列值(492),并且将其与计算得到的主节点的散列值相比较。如果计算得到的客户机会话 散列值与主会话散列值相同(493),并且最旧的会话并不是待决的(495),则以安全的方式 保存客户机散列值(496)并且推迟存储器更新(497)。如果计算得到的客户机会话散列值 与主会话散列值相同(493)并且最旧的会话待决(495),则系统检查更新策略是否得到批 准。如果尚未批准更新策略,则以安全的方式存储客户机散列值(496),并且推迟存储器更 新(497)。如果更新策略得到批准,则重新构建范围(499),然后将这些范围反向应用于客 户机节点C的主存储器(写时拷贝)(500)。这时,如果主机A没有执行其他“写入”,则主 节点A的主存储器116中的数据卷与客户机节点C的主存储器136中的数据卷相同。只有 在节点B和C完成了其更新之后,该会话结构才会被丢弃。在图2A的示例中,集群节点A在一开始被表示为主节点,节点B、C和D则被表示为客户机节点。如果这些角色的交换对业务流程不具有破坏性,那么这些角色在别的时间 是可以改变的。在一个示例中,用户同时拥有主机A和主机B,并且从位置A移动到位置B, 然后则将节点B指定为主节点,并且将节点A、C、D指定为客户机。会话母机(master)被移 动到节点B,并且节点B会在丢弃了空的活动会话之后创建一个新会话。在节点B上的新会 话中接受新的读取和写入之前,节点B的主存储器126中的数据卷必须是最新的。在一个 示例中,关于主存储器126中的数据卷的更新处理包括从节点A检索索引3,从节点C检索 索引1,从节点D检索索引5,以及从节点A检索索引4。这些数据更新将会完成节点B中的 会话,并且将存储器126中的数据卷与剩余的集群节点同步。在集群节点内部可以执行三级同步。这些同步等级包括数据卷级同步,会话数据级同步,以及元数据级同步。在活动复制集群系统中并未保证在集群节点上完成同步了这 其中的任何等级。但在空闲的集群系统(也就是停止接收来自附着主机的更新的系统)中, 所有这些等级最终都会稳定在一个公共数值集合上。会话日志的接口指示的是在日志中是否成功应用了特定更新,或者是否发生了故 障。如果日志存在可靠性和其他性能方面的问题,那么将会返回一个警告值。这种情况会 在日志接近于填满、日志填充速率明显快过对其进行远程复制的速度、或是当前没有一个 复制目标处于活动的时候出现。在其他实施例中,日志以与此类状况相适应的方式来对其 自身进行配置,通过调整其性能特性来压制引入的更新,以及防止资源耗尽。由于所述更新 是同步应用于日志的,因此,压制日志将会减慢主机的性能,这既有可能是可接受的也有可 能是不可接受的。除了更新之外,日志还会接收检查点状况,以便指示输入/输出(IO)流中的重要 点。这些检查点由数据源提供,以便确保自动应用针对远程站点的特定更新集合,以及避免 因为应用不连续而导致的数据损坏。检查点可以是异步或同步的;异步检查点仅仅由日志 记录系统记录,并且是即时返回的;而同步检查点则仅仅在日志系统达到一种可以丢弃当 前日志结构的状态的时候才会返回。所有检查点都被指定了一个唯一标识符,并且通过某 些变化,可以允许将异步检查点转换成同步检查点,此外举例来说,我们也可以借助超时来 将同步检查点转换成异步。某些复制目标更新同样会被传送到源日志。目标日志状态更新传送的是关于目 标日志中的非预期变化的信息,例如目标的永久性日志存储设备的故障。目标卷状态更新 传送的是关于目标卷状态的非预期变化的信息,例如目标卷的永久性存储设备的故障或更 换。响应于此类状态更新,源日志对其自身状态和行为进行相应调整,并且可以将状态变化 传播到系统的剩余部分。将源卷初始化到图2A的复制协议中的处理既可以在将数据置入所述卷之前进 行,也可以在其后进行。如果卷上没有数据(也就是说,所述卷是空白的),那么源日志系统 可以仅仅创建必要数据结构,并且继续执行稳态复制过程。如果卷中已经存在数据,则源日 志系统会提供一种机制,以便将整个源卷复制到复制集群100的远程目标。在将远程目标节点添加在复制系统100中的时候,目标节点和源节点必须就其相 互状态达成一致。如果当前驻留在源卷上的所有数据同样存在于源日志系统的活动和待决 会话(也就是驻留于会话的数据)中,那么目标日志系统可以简单地加入复制协议。这种 情况通常仅仅会在对空白源卷进行初始化之前或是其后不久就添加远程目标的时候出现。
如果源卷包含了并非驻留于会话的数据,那么该系统必须创建一个建立会话。建 立会话是整个卷的简洁表示,它指示的是在远程目标上存储所述卷的哪些部分。远程目标 系统以一种与常规待决会话非常相似的方式来处理建立会话的复制处理,也就是说,它会 向源节点发送更新请求,从而接收更新并存储更新。但是,在建立会话中,这些更新是即时 存入目标卷的。具有当前活动的建立会话的节点还可以参与常规的待决和活动会话复制。但是, 在节点完成待决会话时,无论是否应用会话,已完成的待决会话的影响都应被记录在已建 立的会话中。在这里不需要从其他节点检索那些驻留在目标节点保存的已完成节点中的组 块。这种方法暗指的是在应用所有已完成的待决会话之前不能完成建立会话,这是因为目 标卷结构上的数据将会是不完整的。具有未完成建立会话的集群节点不能被认为具有完整 正确的副本,并且它们是不能用于任何时间点选项的。如果节点因为诸如磁盘或其他硬件故障之类的原因而遭遇到全部或部分数据丢 失,则可以将其视为正在初始化,但如果待决会话中的数据可用,那么也可以从待决会话中 恢复某些数据。如果节点遭遇到临时中断而没有数据丢失,那么它必须评估复制系统的状 态。它会将其最近的待决和活动会话与当前状态的待决和活动会话相比较。如果在网络中 存在充足的会话数据,那么节点仅仅更新其状态,并且重新键入正常的稳态复制,然是它仍 旧冒着落后很远的风险。如果确定它不会从网络上当前可用分的会话中恢复足够数据,那 么它必须创建建立会话。如果目标节点出现故障,那么源日志系统将会注意到所述故障,并且可以为发生 故障的节点创建一个建立会话。特别地,在丢弃待决会话之前,源必须把待决会话调入目标 节点的建立会话。一旦恢复,则目标节点可以发布一个经过扩展的日志更新请求,以便检索 已存储的建立会话。该处理减少了必须传送的数据量。有一种变体允许源日志系统为所有 目标节点保持建立会话,由此追踪最近待决会话与被目标应答成已被应用的最后一个待决 会话之间的差值。实际上,建立会话密切追踪的是特定节点在两个时间点之间的差别。同 样,其在故障切换和回滚灾难恢复实施方式方面都是很有价值的资产。故障切换会显著改变复制系统的配置。对源故障切换来说,该系统将一个新的集 群节点指定成源。旧源则承担了一个更加正规的复制角色。由此,复制系统的状态是在最 近的活动-待决会话变换时间点确定的。回滚是更牢固的故障切换形式。因此,对源回滚 来说,要想将具有特定时间点的另一个集群节点指定成新源,则需要所有其他集群节点将 自身恢复到该时间点。无论是因为故障切换还是回滚,被指定为新源卷的集群节点都必须具有处于恰当 时间点的完整卷副本。而在该时间点之前的所有待决会话都必须被完成和应用。一旦将新 的集群节点指定为源卷,则新的源节点必须创建一个包含了新时间点与前一个时间点之间 的所有已完成待决会话的建立会话。对于其他任何在新时间点之后还未完成或应用待决会 话的集群节点来说,这些节点只要通过删除无效会话即可继续进行处理。如果集群节点应 用了无效会话,则它必须与新的源节点创建一个建立会话,从而检索和合并恰当数据。如果 该节点是先前的源节点,那么它始终都需要创建建立会话,并且包含来自其最后一个活动 会话的数据。故障切换和回滚始终会导致当前活动的会话变换成待决会话,并且导致待决 会话无效化。关于这个规则的一个例外是在彻底的故障转换中发生的,其中针对源的主机更新将被中止,活动会话变换到待决,待决会话则变换成新源。在这种情况下,当活动会话为空时,建立会话同样为空,并且先前的源可以立即恢复正常复制。此外还提供了一种用于大量目标初始化的机制,在该机制中将会产生并且向目标 站点物理传送源卷拷贝或是卷集合。在这种情况下,物理拷贝是如下创建的,中止针对源卷 的主机更新,创建物理拷贝,用会话ID对其进行标记,以及创建与该会话ID相关联的建立 会话。一旦在目标站点接收到物理介质,则加载目标数据,并且通过使用已存储的会话ID 查询源日志登记系统来创建正常的建立会话。复制处理则以如上所述的方式进行。用于访问目标站点上的数据的优选方法使用的是一个或多个源卷在特定时间点 的完整副本。这个副本被称为视图。包括目标站点和源站点在内,在任何集群站点都可以 创建源卷的多个视图。复制集群内部的任何视图都可以充当复制处理的源,并且其告诫了 没有将其本源作为副本进行传播的信息。视图可以更新,以便与源卷数据的更近拷贝同步。 视图还可以从集群梳理,并且可以将其指定成是与原始源数据没有进一步关系的独立卷。 主机可被允许对视图执行全部读/写访问,但是要想使用视图更新功能,则通常需要与主 机管理协作。在视图更新过程中,任何本地主机更新被丢失了。初始创建视图的处理包括创建用于追踪将要从原件拷贝的数据总量和位置的本 地建立会话。在视图的初始建立过程中,初始集群站点可以继续进行正常的复制操作。在 此时间进行的任何更新同样会被应用于本地建立会话。如果在本地会话日志中留有漏洞, 则进行第二建立会话,并且在第二建立会话期间中止原始集群卷的更新。在第二建立会话 之后,初始集群卷可以恢复正常操作,并且视图将被认为是已经建立的。但是,本地建立会 话并没有被丢弃;取而代之的是,在会话应用期间将会使用它来追踪针对来自主机的视图 的更新以及针对初始集群卷的更新。在希望进行视图更新的任何时间点,原件都可以被中 止,并且可以重新应用本地建立会话。该操作将会导致先前所有的主机更新都被丢弃,并且 所有会话更新都会被应用,从而使视图达到预期时间点。这个初始化过程是为了把对于正常复制操作的干扰减至最小而设计的。由此,它 不具有在初始化时为视图规定精确时间点的能力。取而代之的是,视图将会代表第一建立 阶段完成时的时间点。以后的更新可以与特定的复制会话同步。如果该需求还不充分,则 可以在第一建立阶段的整个持续时间里中止初始集群卷上的会话应用,由此导致在中止时 间点准时产生完整的拷贝。当然,在中止期间,目标站点将会继续参与复制操作(而不应用 会话),但是这时它会冒着远远落在网络中的剩余部分之后以及需要其自身建立会话赶上 的风险。一种空间效率更高但有可能更具有破坏性的目标站点访问选项被称为伪视图。伪 视图仅仅是通过中止会话应用来创建的。同样,正常的复制协议操作仍旧会被观察,由此仍 旧会处理会话更新,但是此时不能应用会话,并且由此不能丢弃会话。如果像上文中的常规 视图建立处理那样,伪视图的访问需求是只读,那么则不需要附加步骤。主机可以任意访问 伪视图,例如出于备份到磁带的目的。如果创建的是可写入伪视图,则为所述伪视图创建一 个本地活动会话。来自主机的更新被发送到活动矩阵,相应地,读取处理也更为困难。在一 个变体中,更新会保持在缓冲区中,并且读取是从缓存和初始集群卷开始进行的。在另一个 变体中,日志结构被设计成支持快速重建来自多个书面来源的读本。在一些变体中,伪视图 可以升级成完整视图。
除了源(主)节点和目标(客户机)节点之外,集群可以具有中点节点。中点是 不包括集群主存储器的完整卷副本的节点。因此,它们需要的存储容量不如全部目标节点 多。它们只保持了从所述源检索的一组会话。中点是有用的,因为它们提供了一种廉价方 式来快速提升最近更新的冗余度,以及降低源网络上的预期负载。通过提升可被选择发送 更新请求的节点的数量,将请求发送到源的概率将会降低。虽然源网络始终向网络内部的 一个目标传送已更新数据的至少一个拷贝,但是,如果在网络中具有更多节点,则向所述源 发送用于同一数据的请求的概率将会降低。如果源节点发生故障或是出于其他任何原因, 源节点可以与目标节点交换角色。但是,这种交换不能与中间点进行,因为中点节点缺少源 的主存储器的完整列副本。此外,中点永远不会创建建立会话,因为它们未必保持完整的副本。它们可以有效任意地将其自身卷入集群以及从集群中脱离。
该日志系统还通过追踪足够的信息来描述其历史记录的合理窗口,这其中包括每 一个会话中发生的更新的数量统计,在会话中发生的更新的大小,待决和建立会话的数量, 为每一个会话传送的缓存器的数量和位置,丢弃待决会话的速率,以及当前应用的任何主 机抑制参数。 在这里描述了本发明的若干实施例。但是应该理解,在不脱离本发明的实质和范 围的情况下,各种修改都是可行的。相应地,其他实施例同样处于后续权利要求的范围以 内。
权利要求
一种异步数据复制方法,包括提供一个复制集群,其中包括至少一个主节点,并且至少包括第一客户机节点,其中所述主节点包括主日志,所述第一客户机节点包括第一客户机日志;在所述主节点的数据卷中输入更新,并且在主节点的存储器中保存所述更新;在所述主日志中更新第一活动会话;将第一消息从所述主节点发送到所述第一客户机节点,其中所述第一消息包括第一消息内容和第一“捎带”数据,该数据表明所述第一活动会话在所述主日志中已被更新;所述第一客户机节点接收所述第一消息,对所述主日志中的所述第一活动会话已被更新进行登记,并且在内部用信号通告所述主日志中的所述第一活动会话已被更新;从所述第一客户机节点向所述主节点发送更新请求;所述主节点对所述更新请求进行处理,并且将所述更新发送到所述第一客户机节点;以及所述第一客户机节点接收更新,以及更新所述第一客户机日志中的所述第一活动会话。
2.根据权利要求1所述方法,其中,所述第一活动会话包括一个或多个分段,并且所述 主日志包括存储了所有集群节点的所有会话分段的主活动矩阵,以及所述第一客户机日志 包括存储了所有集群节点的所有会话分段的第一客户机活动会话矩阵。
3.根据权利要求2所述方法,其中,每一个所述会话分段都包括索引和时间戳,并且其 中所述会话矩阵为所有集群节点显示所有所述会话分段索引以及时间戳。
4.根据权利要求3所述方法,其中,所述第一活动会话的所述更新包括在范围内容中 写入数据,以及将所述范围结构输入所述第一活动会话。
5.根据权利要求4所述方法,其中,所述范围结构包括大于会话分段长度的长度,并且 其中所述范围结构将被输入一个以上的会话分段。
6.根据权利要求5所述方法,其中,所述主节点对所述更新请求的所述处理包括在所 述主活动会话矩阵中定位所有尚未传送到所述第一客户机节点日志的会话分段,以及向所 述第一客户机节点发送所述所识别的会话分段。
7.根据权利要求6所述方法,其中,尚未传送至所述第一客户机节点的所述会话分段 被识别成是注册在与所述第一客户机节点相对应的所述主会话矩阵的行中的会话分段,并 且该节点的时间戳要早于与在所述主节点相对应的所述主活动会话矩阵的行中最近更新 的会话分段的时间戳。
8.根据权利要求7所述方法,其中,所述复制集群包括第二客户机节点,并且其中所述 第二客户机节点包括第二客户机日志,以及其中所述第二客户机日志包括第二客户机活 动会话矩阵存储所有集群节点的所有会话分段。
9.根据权利要求8所述方法,其中,所述方法还包括从所述第一客户机节点向所述第 二客户机节点发送第二消息,并且其中所述第二消息包括第二消息内容和表明所述第一活 动会话已被更新的第二“捎带”数据。
10.根据权利要求9所述方法,还包括所述第二客户机节点接收所述第二消息,对所述主日志和所述第一客户机日志中的所 述第一活动会话已被更新进行登记,并且在内部用信号通告所述第一活动会话已被更新;从所述第二客户机节点向所述第一客户机节点发送更新请求;所述第一客户机节点对所述更新请求进行处理,并且向所述第二客户机节点发送该更 新;以及所述第二客户机节点接收该更新,并且在所述第二客户机日志中更新所述第一活动会话。
11.根据权利要求10所述方法,其中,所述消息中的任何一个包括下列各项之一从所 述主节点周期性发送到所述客户机节点中的任何一个的“健康检查”消息,从所述客户机节 点中的任何一个周期性发送到所述主节点的“健康检查”消息,从所述客户机节点中的任何 一个周期性发送到复制集群内部的其他客户机节点的“健康检查”消息。
12.根据权利要求1所述方法,还包括在所述主日志中完成所述第一活动会话。
13.根据权利要求12所述方法,还包括在所述第一客户机日志中完成所述第一活动 会话。
14.根据权利要求13所述方法,其中,所述主日志还包括用于每一个集群节点的授权 和访问控制协议。
15.根据权利要求14所述方法,其中,所述访问控制协议包括读写、只读和纯复制之一.
16.一种用于在复制集群内部执行对等数据复制的数据复制系统,该复制集群包括至 少一个主节点,并且至少包括第一客户机节点,其中所述主节点包括计算设备、主存储器以 及会话存储器,并且其中所述计算设备包括数据复制应用,该应用被配置成在所述主节点 的数据卷中输入更新,并且在主节点的存储器中保存所述更新,在所述会话存储器存储的 主日志中更新第一活动会话,将第一消息从所述主节点发送到所述第一客户机节点,其中 所述第一消息包括第一消息内容和表明所述主日志中的所述第一活动会话已被更新的第 一“捎带”数据,以及在接收到来自所述第一客户机节点的更新请求时,对该更新请求进行 处理,并且将被请求的更新发送到客户机节点。
17.根据权利要求16所述数据复制系统,其中,所述第一客户机节点包括计算设备、主 存储器以及会话存储器,并且其中所述计算设备包括数据复制应用,它被配置成接收所述 主节点的所述第一消息,对所述主日志中的所述第一活动会话已被更新进行登记,并且在 所属客户机节点内部用信号通告所述主日志中的所述第一活动会话已被更新,向所述主节 点发送更新请求,接收来自所述主节点的更新,并且在所述会话存储器存储的第一客户机 日志中存储所述第一活动会话。
18.根据权利要求17所述数据复制系统,其中,所述第一活动会话包括一个或多个分 段,并且所述主日志包括存储了所有集群节点的所述会话分段的主活动会话矩阵,以及所 述第一客户机日志包含了存储所有集群节点的所有会话分段的第一客户机活动会话矩阵。
19.根据权利要求18所述数据复制系统,其中,每一个所述会话分段包括索引和时间 戳,并且其中所述会话矩阵显示所有集群节点的所有所述会话分段的索引和时间戳。
20.根据权利要求19所述数据复制系统,其中,所述第一活动会话的所述更新包括在 范围结构中写入数据,以及将所述范围结构输入所述第一活动会话。
21.根据权利要求20所述数据复制系统,其中,所述范围结构包括一个大于会话分段 长度的长度,并且其中所述范围结构被输入一个以上的会话分段。
22.根据权利要求21所述数据复制系统,其中,所述主节点对所述更新请求的所述处 理包括在所述主活动会话矩阵中定位所有那些尚未传送到所述第一客户机节点日志的会 话分段,以及将所述已识别的会话分段发送到所述第一客户机节点。
23.根据权利要求22所述数据复制系统,其中,尚未传送至所述第一客户机节点的所 述会话分段被识别成是注册在与所述第一客户机节点相对应的所述主会话矩阵的行中的 会话分段,并且该节点的时间戳要早于与在所述主节点相对应的所述主活动会话矩阵的行 中最近更新的会话分段的时间戳。
24.根据权利要求23所述数据复制系统,其中,所述复制集群包括第二客户机节点,并 且其中所述第二客户机节点包括计算设备、主存储器和会话存储器,以及其中所述计算设 备包括一个数据复制应用,该应用被配置成接收来自所述第一客户机节点的第二消息,其 中所述第二消息包括第二消息内容以及表明所述第一活动会话已被更新的第二“捎带”数 据,对所述主日志以及所述第一客户机日志中的所述第一活动会话已被更新进行登记,并 且在内部用信号通告所述第一活动会话已被更新,向所述第一客户机节点发送更新请求, 接收所述更新,以及在第二客户机日志中更新所述第一活动会话。
25.根据权利要求24所述数据复制系统,其中,所述消息中的任何一个包括下列各项 之一从所述主节点周期性发送到所述客户机节点中的任何一个的“健康检查”消息,从所 述客户机节点中的任何一个周期性发送到所述主节点的“健康检查”消息,从所述客户机节 点中的任何一个周期性发送到复制集群内部的其他客户机节点的“健康检查”消息。
26.根据权利要求25的数据复制系统,其中所述主日志还包括用于每一个集群节点的 授权和访问控制协议。
27.根据权利要求26所述数据复制系统,其中,所述访问控制协议包括读写、只读和纯 复制之一。
全文摘要
一种在复制集群内部实施的异步对等数据复制方法,其中该集群包括至少一个主节点,并且至少包括第一客户机节点,该方法包括在主节点的数据卷中输入一个更新,并且将该更新保存在主节点存储器中。接下来,在主日志中更新第一活动会话,然后则将第一消息从主节点发送到第一客户机节点。第一消息包括第一消息内容和表明主日志中的第一活动会话已被更新的第一“捎带”数据。接下来,第一客户机节点接收第一消息,对主日志中的第一活动会话已被更新的状况进行登记,并且在内部用信号通告主日志中的第一活动会话已被更新。接下来,从第一客户机节点向主节点发送一个更新请求,主节点则对该更新请求进行处理,并且将其发送到第一客户机节点。最后,第一客户机节点接收该更新,并且更新第一客户机日志中的第一活动会话。
文档编号G06F15/16GK101809558SQ200880100725
公开日2010年8月18日 申请日期2008年7月24日 优先权日2007年7月27日
发明者J·W·拜特斯 申请人:特文斯崔塔公司;J·W·拜特斯
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1