用于同步镜像文件系统的方法及其存储设备与流程

文档序号:25442722发布日期:2021-06-11 22:02阅读:141来源:国知局
用于同步镜像文件系统的方法及其存储设备与流程
本文所描述的本主题一般涉及存储
技术领域
以及存储系统中的数据复制方法。更具体地,本主题涉及应用于存储设备的用于在同步复制环境中处理镜像文件系统的高效聚合的方法。
背景技术
:为了在2中心容灾系统中存储和保护数据,可以采用同步复制环境,将各自站点处的两个数据中心的数据卷相互镜像。因此,在正常操作下,站点a的主动数据中心的文件系统将读写文件系统导出到客户端,如果站点a的主动数据中心发生故障,则站点b的被动数据中心的镜像文件系统将被制作为主动读写文件系统,并开始为客户端操作服务。文件系统架构基于对象。每个文件作为对象,每个文件系统是对象的集合。通常,在建立站点a和站点b的数据中心之间的同步复制关系之前,站点a的数据中心包括主动文件系统(activefilesystem,简称afs),站点b的数据中心具有空文件系统。图1a示出了在建立本文描述的同步复制关系之前存在于数据中心a和b的文件系统的示例性场景。如图1所示,站点a的数据中心包括afs,以及几个用户快照“快照3、快照2和快照1”。快照可以理解为数据集的副本,该副本包括特定时间点(复制的起始时间点)对应数据的图像,或者该快照可以理解为一个时间点的数据集的副本。此外,站点a的数据中心存在的afs从客户端接收写入站点a的数据中心的存储设备的缓存中的与afs的对象相关的io操作/io事务。当前正在进行到站点a的io操作可以称为前台io事务(或简单称为前台io)。这里,站点b的数据中心显示为空,因为在站点a和站点b的数据中心之间尚未建立同步关系。图1b示出了在建立了本文所述的同步复制关系之后,在站点a的afs初始同步到站点b的数据中心期间,存在于数据中心a和b的文件系统的示例性场景。在建立了同步复制关系之后,首先需要将站点a的afs同步到站点b。如图1b所示,站点a和站点b的两个数据中心相互建立了同步复制关系,前台io仍然仅写入站点a。此外,图1b示出了当快照3被复制到站点b时用户快照快照1和快照2已经被复制。应理解,在同步复制环境中运行的数据中心支持创建快照,以将afs(称为源文件系统)从站点a的数据中心复制到站点b的目标(称为目标文件系统)。在复制用户快照(快照1、快照2和快照3)后,在站点a的afs顶部周期性地创建新的快照,并将新创建的快照复制到站点b的目标文件系统,以将afs同步到站点b的目标文件系统。为了将afs同步到目标文件系统而进行的新快照的创建和创建的快照的复制持续到为每个快照传输的数据量低于预定义的阈值,例如小于100mb为止。在这样的场景中,可以说站点a的afs和站点b的目标文件系统即将达到聚合状态,此时,站点b的目标文件系统快与站点a的afs达到数据一致性。在达到聚合状态时,通过双写操作,从主机接收的前台io开始在站点b的目标文件系统中与站点a的afs接收的前台io同步地进行复制。在聚合期间,当在站点a和站点b执行双写操作模式时,待与目标文件系统同步的afs的少量数据(称为afs增量)也被复制为后台io事务(或简单称为后台io)。当afs增量完全传输到站点b时,可以说站点a和站点b的数据中心是同步的。图2示出了聚合状态期间在站点a和站点b之间执行前台io的双写模式操作并同时将afs增量复制到站点b作为后台io时的应用场景。如上所述,在预聚合阶段,即在达到聚合状态之前,通过在afs上创建新快照(cstsnap)在站点b的目标文件系统上周期性地复制afs。这是有必要的,由于正在复制用户快照(快照1、快照2和快照3)时,前台io正在进行中,因此正将更多的数据写入afs。当最后一个复制快照(即创建的快照)传输到目标文件系统的数据小于阈值(例如100mb)时,执行双写模式操作以启动聚合并将前台io写入站点a的afs和站点b的目标文件系统中。在这种聚合状态下,afs增量也作为后台io传输至目标文件系统。为了理解在后台io中传输的数据,图2示出了在afs上创建的两个快照“cstsnap”和“snapconv”,afs用于将afs的数据复制到站点b的目标文件系统。创建新的快照(snapconv)以获得afs的数据和最后一个快照复制的数据之间的差异。新快照(snapconv)是在启动双写模式后创建的,以便不会丢失从主机接收的主动io。后台io是snapconv和cstsnap之间的差异,需要将其传输到站点b以完成站点a的afs和站点b的目标文件系统之间的同步。因此,在同步复制环境中,可以同时将前台io和后台io传输至站点b的目标文件系统,并且可选地修改其它并行io可以使用的相同元数据。在具有主动快照的数据存储系统中,占用一部分内存块的特定块可以接收两个并发非重叠子块写入。如果该块在当前快照生命周期中未接收到io请求,但之前已接收到io请求,则有必要为第一个写入执行读-修改-写周期。如果不存在同步机制,则两个子块io将开始独立的读-修改-写操作,而不知道另一个io正在同一个块上操作。因此,这两个操作将转换为不一致的块写入,其中一个将覆盖另一个,从而导致数据损坏。在当前情况下,由于前台io和后台io都在进行中,因此它们在写入到目标时可能会重叠,而导致损坏。但是,由于并行执行,同一对象的前台io(fgio)和后台io(bgio)可以按照任意顺序写入。当聚合期间在站点b的目标文件系统接收到fgio时,fgio为每个事务都采取锁。事务可能涉及对许多对象(包括文件、其父目录、固定表等)的更改。fgio同时对每个对象采取单独的锁。如果有任何锁失效,则重试整个锁定过程,事务可能在超时后失败且将错误返回到客户端。持有锁一直到io写入目标并返回ack。每个锁都指对象id、偏移量和长度。fg锁阻止任何可能间接引用相同父对象、固定表等的不相关前台io。fg锁也将阻止尝试在同一时刻复制相同对象的bgio。bgio还为每个正在复制的对象采取锁。如果bgio为特定对象采取锁,则直到接收到ack才释放锁。所有fgio都可能因此被阻止。锁是在执行读操作之前采取的,因此读取延迟增加了持有锁的时间。fgio事务在字节级粒度上影响更改,例如,对象1的更改偏移量为512,128个字节发生更改。如果客户端发送的fgio修改了文件元数据,则它将导致具有两个对象、文件更改和目录更改的事务。然而,bgio事务影响更改时,总是在8k内存范围内,或者在固定内存范围内,对于同一对象,该更改的长度总是显著大于对应的fgio。bgio单独获得每个对象,即单独文件、单独父目录的更改。差异由与bgio相关联的对象id、偏移量和长度获得。图3示出了在fgio中更改对象id为0x1234的对象但bgio正在从afs将同一对象以相同的偏移量以及8k的粒度传输时的示例性场景。双写fgio总是复制在bgio上,因此应被视为对象的最新事务。fgio和bgio对整个事务采取锁以序列化该事务。与获取fgio或bgio为每个对象采取的锁相关联的许多缺点中的一些缺点要么阻止了前台io要么阻止了后台io。持有锁一直到从目标接收到ack并且无法将受影响的阻止io写入源。这反过来,将阻止任何后续的前台和后台io事务,并将阻止前台读取io。例如,如果两个数据中心存储系统的平均延迟为1毫秒,则每个锁将被持有至少1毫秒从而延迟后续从属事务,因为这些事务将被阻止而等待锁。发送到远程执行的io事务,没有预定义的执行顺序。此外,锁的引入使事务按顺序执行并降低性能。由2中心存储系统定义的最大超时可能为22秒,这意味着在取消io之前持有锁22秒。在现有的2中心数据存储系统150k的最大iops支持下,这种锁定显著降低了吞吐量,增加了延迟并导致了主机侧的超时/错误。锁定导致“聚合阶段延迟”和io吞吐量大幅降低,直到聚合完成或聚合本身失败,且两个站点从未实现完全同步状态。这可能会延迟在聚合阶段触发的快照创建操作。例如,fgio在聚合阶段不断修改大文件,因此锁会产生问题。在同步复制环境中使用两个数据中心的当前存储系统的工作原理是上述锁定机制,这种锁定机制延迟了针对高吞吐量工作负载的聚合阶段。因此,现有的数据存储解决方案需要提高存储系统在镜像文件系统聚合期间的性能。技术实现要素:本
发明内容用于引入与应用于存储设备的用于在同步复制环境中处理镜像文件系统的高效聚合的方法和系统相关的概念。相应地,本发明一方面提供了一种用于在第一存储设备和第二存储设备之间的通信网络中同步输入/输出(input/output,简称io)事务的方法。所述方法由所述第二存储设备执行。所述方法包括:识别从所述第一存储设备接收的io事务对应的第一对象。所述方法还包括:识别所述第一对象的执行状态。当所述执行状态指示当前基于从所述第一存储设备接收的后台快照对所述第一对象进行更新时,所述方法还包括:将后台io事务提交至所述第二存储设备的缓存;以及在完成将所述后台io事务提交至所述缓存时,向所述缓存的内存块的页面附加更改,其中,所述附加页面在所述后台io事务更改的所述缓存的固定内存块范围内。根据本发明一方面,当所述执行状态指示当前未基于从所述第一存储设备接收的后台快照对所述第一对象进行更新时,所述方法包括:将同步期间接收的所述io事务提交至所述第二存储设备的缓存;以及在完成将所述io事务提交至所述缓存时,向所述缓存提交所述bgio事务,其中,所述bgio事务更改的缓存的固定内存块范围包括所述io事务更改的内存块的页面更改。相应地,本发明另一方面提供了一种用于在第一存储设备和第二存储设备之间的通信网络中同步io事务的第二存储设备。所述第二存储设备包括存储控制器和缓存。所述存储控制器用于识别同步期间从所述第一存储设备接收的io事务对应的第一对象。所述存储控制器还用于识别所述第一对象的执行状态。当所述执行状态指示当前基于从所述第一存储设备接收的后台快照对所述第一对象进行更新时,所述存储控制器还用于将所述第一对象对应的后台(background,简称bg)io事务提交至所述第二存储设备的缓存;以及在完成将所述bgio事务提交至所述缓存时,向所述缓存的内存块的页面附加更改,其中,所述附加页面在所述bgio事务更改的所述缓存的固定内存块范围内。根据本发明一方面,当所述执行状态指示当前未基于从所述第一存储设备接收的后台快照对所述第一对象进行更新时,所述存储控制器用于将同步期间接收的所述io事务提交至所述第二存储设备的缓存;以及在完成将所述io事务提交至所述缓存时,向所述缓存提交所述bgio事务,其中,所述bgio事务更改的缓存的固定内存块范围包括所述io事务更改的内存块的页面更改。本发明的其它方面和特征将在本领域普通技术人员结合附图回顾本发明的具体实施例的以下描述后变得显而易见。附图说明该详细描述是参考附图描述的。显然,以下描述中的附图仅仅示出了本发明的部分实施例。图1为建立站点a与站点b之间的同步关系前后2中心存储系统的应用场景示意图;图2为从主机接收前台io进行双写操作的2中心存储系统的应用场景示意图;图3为从源站点a接收bgio到目标站点b的2中心存储系统的应用场景示意图;图4为本发明实施例提供的2中心存储系统的应用场景示意图;图5示出了本发明实施例提供的用于在第一存储设备和第二存储设备之间同步io操作的方法;图6示出了本发明实施例提供的用于在第一存储设备和第二存储设备之间同步io操作的方法;图7示出了本发明实施例提供的执行表的示例;图8示出了本发明实施例提供的用于在第一存储设备和第二存储设备之间同步io操作的方法;图9示出了本发明实施例提供的的示例性应用场景;图10示出了本发明实施例提供的一种存储设备的示意性结构。应理解,附图是为了说明本发明的概念,并且可能不是按比例绘制。具体实施方式本发明可以有多种方式实现,包括实现为过程、装置、系统、计算机可读介质例如计算机可读存储介质,或者其中程序指令经由光学或电子通信链路发送的计算机网络。在本说明书中,这些实施方式或者本发明可以采取的任何其它形式可以称为技术。一般情况下,所公开过程的步骤顺序可以在本发明的范围内进行更改。下面提供了本发明的一个或多个实施例的详细描述以及说明本发明原理的附图。本发明是结合这些实施例进行描述,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限制,并且本发明包括许多替代方案、修改和等同物。为了提供对本发明的透彻理解,下文描述中阐述了许多具体细节。提供这些细节用于举例,本发明可以根据权利要求书实现,不需要部分或者所有这些具体细节。为了清楚描述,没有对与本发明相关
技术领域
中已知的技术材料进行详细描述,从而避免对本发明造成不必要地模糊。下文描述中陈述许多具体细节,以对本发明各实施例进行通彻理解。然而,本领域的技术人员将明白可以在没有这些具体细节的情况下实践本发明。在其它实例中没有详细描述众所周知的方法、流程、部件,以免对本发明造成模糊。尽管本发明实施例对此不作限制,但是利用“处理”、“计算”、“确定”、“建立”、“分析”以及“检查”等术语进行的讨论可以指计算机、计算平台、计算系统或其它电子计算设备的操作和/或处理,其将表示为计算机寄存器和/或存储器中的物理(例如,电子)量的数据操作和/或转换为类似地表示为计算机寄存器和/或存储器中的物理量的其它数据或可以存储执行操作和/或处理指令的非瞬时性存储介质中的其它信息。尽管本发明实施例对此不作限制,但本文使用的术语“多个”可以包括“两个或更多个”。术语“多个”可以在整个说明书中使用来描述两个或更多个组件、设备、元件、单元、参数等。除非明确说明,否则此处描述的方法实施例不限于特定的顺序。此外,所描述的方法实施例或其元素中的某些可以同时或并发发生或执行。需要时,借助示例性图和一个或多个示例来解释本发明的某些实施例。然而,提供这些示例性图和示例仅为了更好地理解本发明,不应理解为对本发明的范围的限制。公开了用于在第一存储设备的源文件系统和第二存储设备的目标文件系统之间的通信网络中同步输入/输出(input/output,简称io)事务的方法。在同步复制环境中,第一存储设备和第二存储设备在通信网络中互相通信,即源文件系统和目标文件系统为同步复制环境中的镜像文件系统。这里的源文件系统也可以称为主动文件系统(activefilesystem,简称afs),其需要复制到第二存储设备的目标文件系统。本发明的各方面针对采用镜像文件系统的2数据中心(datacenter,简称dc)存储系统进行了描述。例如,图4为本发明实施例提供的2中心存储系统的典型应用场景的示意图。图4所示的2dc存储系统包括至少一个主机100和站点10(也称为源站点或站点a)和站点12(也称为目标站点或站点b)分别包括的两个数据中心。两个数据中心可以在专用通信网络中相互连接。专用通信网络可以包括星型组网方式中的光纤或网线等。两个数据中心可以通过互联网协议(internetprotocol,简称ip)或光纤通道(fiberchannel)协议相互进行数据传输。进一步地,主机100可以基于小型计算机系统接口(smallcomputersysteminterface,简称scsi)协议或基于互联网小型计算机系统接口(internetsmallcomputersysteminterface,简称iscsi)协议与站点10和/或站点12进行通信,此处对协议不作限制。进一步地,主机100可以使用网络文件系统协议(networkfilesystemprotocol,简称nfs)或通用互联网文件系统协议(commoninternetfilesystemprotocol,简称cifs)从站点10和站点12的数据中心访问数据,但不限于此。主机100可以包括客户端的任何计算设备,也可以称为“客户端设备100”。此类客户端设备100可以包括服务器、台式计算机或应用服务器,或者现有技术中已知的任何其它类似设备。可以在客户端设备100中安装操作系统和其它应用程序。根据本发明实施例,客户端设备100包括文件系统(可以称为主机文件系统),其中,2dc的镜像文件系统从该文件系统接收前台(foreground,简称fg)io事务。源站点10的文件系统可以称为源文件系统/afs14,目标站点12的文件系统可以称为目标文件系统16。根据本实施例,源文件系统14和目标文件系统16可以称为2dc所属的同步复制环境的镜像文件系统。fgio发送至站点10的afs,该afs通过2dc采用的双写操作模式,复制到站点12的文件系统。此处的fgio也可称为在同步期间从源文件系统发送至目标文件系统的io事务。当在将afs同步至目标期间从站点10传输至站点12的数据小于预定义的阈值,例如,小于100mb时,双写模式开始。在站点10的afs与站点12的目标文件系统聚合的状态下,也通过io事务(称为后台io(bgio))将afs增量复制到站点12。根据本发明的教导,同一对象对应的fgio和bgio均可发送至目标站点12的目标文件系统16,而无需由源文件系统14获取锁。此处,文件系统14和16的聚合阶段可称为无锁聚合阶段。因此,聚合速度显著加快,且存储系统的存储器和处理单元上没有额外的头。根据本发明实施例,通过上文中详细描述的互锁语义,确定目标文件系统16接收到的当前fgio和目标文件系统16接收到的传输与fgio相同对象的数据的并发bgio的执行顺序。这里的互锁语义是指确定bgio还是fgio先到。图5示出了本发明实施例提供的用于将目标文件系统16和源文件系统,即afs14同步的方法500。此处,目标站点12可以在目标文件系统14接收针对同一对象(称为第一对象)的当前fgio和并发bgio。根据同步复制环境的原理,可以在用于在2dc存储系统的目标处复制afs的双写模式操作期间接收fgio。bgio是从源站点10的第一存储设备102的源文件系统14处接收的。在本发明中,应理解,fgio是针对文件系统的对象接收的最新事务,因此fgio被视为参考io。此外,fgio和bgio无序地传输到目标站点12,并且在目标文件系统16中无序地执行,即,当前fgio可以在针对同一对象的并发bgio之前或之后与该并发bgio重叠。在实现本发明的教导时,当前fgio和并发bgio均将数据写入到目标站点12的第二存储设备104的缓存中,具有无需由源文件系统14获得目标文件系统16上的锁来写入各自的io的优点。在步骤501中,识别与当前fgio对应的第一对象。如前所述,当前fgio可以对目标文件系统14的一个或多个对象执行事务操作。该一个或多个对象包括文件和父目录。识别与fgio相关联的第一对象,包括识别与fgio相关联的对象标识符(identifier,简称id)、变更偏移量以及第一变更长度。第一长度通常为字节级粒度。例如,图9示出了本发明的应用场景。如图9所示,在站点a的afs处接收到的也将通过双写在目标(也示为afs)处复制的fgio接收针对文件更改以及父更改的写操作。第一对象可以是对象id为0x1234、偏移量为512和长度为128字节的文件对象。在图9的示例中,与fgio相关联的父目录对象具有对象id为0x12、偏移量为128和长度为10字节的长度。但是,为了理解本发明的互锁语义,我们可以将第一对象称为对象id为0x1234、偏移量为512字节和长度为128字节的文件对象。在步骤502中,判断第一对象是否在目标处存在的更改对象列表中。根据本发明实施例,在目标文件系统16中从第一存储设备的源文件系统14接收对象列表。更改对象列表包括那些构成与后台io相关联的快照(也称为聚合期间源文件系统14传输至目标文件系统16以传输afs增量的后台快照)的一部分的更改对象。在第一存储设备的源文件系统14创建后台快照之后,在更改对象列表中枚举所有更改对象并发送到目标。根据一实施例,在开始bgio传输之前,将更改对象列表传输至目标。第二存储设备104的目标文件系统16接收更改对象列表并将其存储在缓存中。此外,由于列表是只读的,因此访问该列表不需要锁。根据本发明的进一步实施例,在聚合之后销毁该列表。图9示出了在bgio开始之前发送到目标文件系统16的一个这样的更改对象列表(示为“changeinfo”)的示例。枚举的更改对象列表包括更改对象列表中的每个更改对象的对应对象id、对应更改偏移量和对应更改长度。与bgio相关联的更改长度可以是缓存块的固定范围,其显著大于与fgio相关联的更改长度。例如,固定范围可以是缓存的内存块的8k个字节。如图9所示的更改对象列表包括三个对象:对象id0x0011、偏移量0和8192字节长度;对象id0x0012、1mb和8192;以及对象id0x1234、512和8192。从图9所示的示例可以看出,由bgio更改的长度字节被四舍五入至8k个字节。但是,这不应理解为对本发明的限制,其可以为缓存的固定内存块范围。在步骤502中,如果确定第一对象不在更改对象列表中,则方法进入步骤504。在步骤504中,针对第一对象的fgio提交至缓存,即,fgio继续将io事务写入缓存的内存块的页面,此处称为fg页面。不在更改对象列表中的第一对象意味着fgio影响的更改程度与可能由在目标处接收的并发bgio影响的更改程度不冲突,由于此时bgio和fgio可能不会对同一对象执行事务操作。因此,在并发bgio和fgio到达的任意情况下,目标文件系统16与afs14的聚合都不会受到影响。在步骤502中,如果确定第一对象在更改对象列表中,则方法进入步骤505。在本实施例中,可以假设字节级的与fgio相关联的第一对象的第一更改长度位于缓存的固定内存块范围内,其中,固定范围表示由更改对象列表指示的对应并发的bgio对第一对象的更改长度。出于相同原因,更改对象列表中的更改长度被四舍五入为8k个字节。因此,当确定第一对象在更改对象列表中时,假设对应的fgio对第一对象的第一更改长度为对应的bgio对第一对象的8k更改长度的一部分。在本发明另一实施例中,在步骤505之前,方法500包括:判断与对应的fgio相关联的第一更改长度是否在更改对象列表中的对应更改长度内。仅当第一长度冲突时,方法进入步骤505。例如,图8示出了作为步骤806所描述的实施例。图8在本发明上述实施例中进行了详细描述。如果第一长度不冲突,即,不是更改对象列表中的更改日志的一部分,则表示fgio和bgio不冲突,因此将fgio继续提交至目标站点12的第二存储设备的缓存。在步骤505中,从第二存储设备维护的执行表中识别第一对象的执行状态。执行状态指示到达第二存储设备104的目标文件系统16的各个fgio或各个bgio的执行顺序。在本发明中,第二存储设备维护的执行表中的对象的执行状态是使用互锁存储器语义执行顺序,即,bgio还是fgio先到的决定因素。在一种实施方式中,执行状态由到达目标文件系统16的每个fgio事务和bgio事务更新的标志状态确定。例如,图7示出了标志的各种状态和从标志状态确定的相应执行顺序的示例。标志0表示针对执行表中的对应对象没有io到达。标志1表示针对相应对象fgio已经先到,且在进行中。标志2表示fgio已经提交至缓存并已完成其执行。标志3表示针对相应对象bgio已经先到,且在进行中。标志4表示bgio已经提交至缓存并已完成其执行。根据本发明,本发明公开的方法确定执行表中第一对象的执行状态,并基于该确定识别当前fgio是先到达目标文件系统16还是并行bgio已到达。如果标志状态为0,即,没有io到达,则fgio将先提交至缓存,并相应地将标志状态更新为1。因此,当并发bgio将在fg被提交至缓存时到达,bgio会知道fgio正在进行中。当fgio执行完成时,其将标志状态更新为2。当从执行状态确定的执行顺序指示fgio已经执行完成时,bgio将提交至缓存,其中,bgio对缓存的内存块影响的更改以本发明公开的方式进行。但是,如果标志状态为3,则fgio无法直接提交至缓存,由于当时bgio正在进行中。当bgio执行完成时,其将标志状态更新为4。当从执行状态确定的执行顺序指示bgio已经执行完成时,fgio将提交至缓存,其中,fgio对缓存的内存块影响的更改以本发明公开的方式进行。再次参考图5,在步骤505中识别到执行表中第一对象的执行状态时,方法进入步骤506。在步骤506中,判断第一对象是否正受到bgio的影响。在上述实施方式中,如果标志状态为3,fgio会知道bgio正在进行中。但是,如果第一对象不受并行bgio的影响,即标志状态为0,方法500进入步骤507。在步骤507中,将fgio事务提交至第二存储设备的缓存。根据一实施例,如果针对第一对象没有io到达且当前fgio即将先到,则将创建具有第一对象的条目的执行表,其中,第一对象的标志状态设置为0。当当前fgio开始提交至缓存时,标志状态更新为1。其执行完成时,标志状态由fgio更新为2。根据本发明的一种实施方式,下面的表a示出了在第二存储设备中维护的执行表的条目,该执行表具有对象id为0x1234的第一对象,例如:对象id偏移量标志fg页面bg页面0x00111mb10xab233770x000000000x0012偏移量220x000000000xddee33220x01234偏移量310xdd4466770x00000000在本发明的一种实施方式中,执行表包括正受到或最近已受到在目标文件系统16中接收到的对应的fgio或bgio的影响的对象的详细信息。对象的详细信息至少包括对应的对象id和对应的偏移量中的至少一个。此外,对象具有标志状态形式的对应的执行状态。进一步地,根据本发明实施例,对象具有各自fgio和各自bgio的页面地址。与fgio相关联的页面地址决定fgio对对应对象的缓存块的更改程度。该页面地址与fgio影响的存储块的对应fg页面相关,当fgio到达目标文件系统16时,该页面由存储在执行表中的fg页面地址识别。类似地,与bgio相关联的页面地址决定bgio对缓存的内存块的更改程度。该页面地址与受bgio影响的内存块的对应bg页面相关,当bgio到达目标文件系统16时,该页面由存储在执行表中的bg页面地址识别。在本发明中,fgio和bgio能够根据各自bgio和各自fgio影响的更改,在目标文件系统16针对同一对象并行处理。fg页面占用或位于bg页面的固定范围内。fgio始终是对缓存的内存块的最新影响,这些内存块占用bg页面的固定范围。再次参考图5的步骤506,如果从第一对象的标志状态确定第一对象的执行状态为正在进行中的bgio事务的执行状态,则方法进入步骤508。此处,执行表中的正在进行中的bgio的标志状态为3。如果从第一对象的标志状态确定第一对象的执行状态为正在进行中的fgio事务的执行状态,则方法进入步骤507。在步骤507中,将fgio继续提交至第二存储设备的缓存。在步骤508中,当确定第一对象正受到正在进行中的bgio事务的影响,将bgio提交至缓存,且当前fgio将其fg页面地址存储在执行表中,并在509中将其执行确认返回至第一存储设备的源文件系统14/afs。此外,针对分散聚合表(scatter/gatherlist,简称sgl),fgio递增fgio的fg页面引用计数器。当bgio完成提交至缓存时,如步骤508a所确定的,bgio将其执行状态更新为2。进一步地,当确定同一对象具有有效fg页面地址时,在步骤510中,将引用计数fg页面附加到并行bgio在执行时更改的固定内存块范围。此外,当bgio写入缓存时,递增bgio引用计数器。当针对同一对象的当前fgio到达目标文件系统时,fgio应知道存在有效bg引用计数页面,且它只会附加fg页面,该fg页面位于受bgio影响的缓存的固定内存块范围内。图6示出了本发明实施例提供的用于当针对第一对象的当前fgio在并发bgio前将要先到达目标文件系统16时,同步目标文件系统16与源文件系统,即afs14的方法600。在步骤601中,bg检查针对第一对象的fgio是否正在进行中,即,当当前fgio先到达目标文件系统16时更新标志状态为1,bg检测到该标志状态。在确定第一对象的执行状态指示第一对象正受fgio的影响时,在步骤604中,当fgio提交至第二存储设备的缓存中时,并发bgio将bg页面地址存储在第一对象的执行表中。此外,bg针对存储的bg页面地址递增bgio引用计数器,并且在步骤604中,向第一存储设备的源文件系统14返回其处理的确认。当完成将fgio提交至缓存时,如步骤603a中确定的,方法进入步骤605。在步骤605中,fgio事务对缓存的内存块的fg页面影响的更改由并发bgio重写,其中,fg页面位于缓存的内存块中bg页面的固定范围内。这样,bgio在bg页面内对fg页面进行合并,并将整个块写入缓存的内存块。此外,当fgio完成事务时,检查到同一个第一对象具有有效引用计数bg页面地址,其能够合并和写入fg页面到bg页面占用的固定内存块范围内。当并发bgio影响对bg页面(包括缓存的内存块的更改fg页面)的更改的情况下写入bgio事务时,递增bgio引用计数器。在按照方法500和600中所述的方式将当前fgio和并发bgio写入缓存后,fgio和bgio针对第一对象的对应条目从执行表中移除。此外,在将各自的fg页面和bg页面写入第二存储设备的缓存时,也释放引用计数页面。再次参考步骤601,如果当bgio到达时fgio完成,bgio将总是在写入缓存之前先检查针对第一对象的有效fg引用计数页面,以便如果存在有效更改fg页面,则在将bgio事务写入缓存之前,该页面应合并到bg页面中。类似地,在图5中,在步骤506中,如果确定bgio完成,则在将fgio提交至缓存之前,fgio将总是先检查针对第一对象的有效bg引用计数页面,然后写入缓存,以便如果存在有效更改bg页面,则fg页面可以将更改的fg页面附加到占用更改bg页面的缓存的固定内存块范围。图8示出了当与当前fgio相关联的第一对象的第一长度可能与针对同一个第一对象的最新bgio相关联的第一对象的对应长度冲突时的确定方法800。如果由第一长度确定的对应当前fgio对缓存的内存块的更改程度不与针对相同对象的最新bgio的更改程度冲突,则不要求合并和写入bg和fg页面,这是由于到达目标文件系统的fgio和bgio能够写入缓存的不同部分,其中,缓存的不同部分被明显分开,从而相应的fgio事务或bgio事务发生任何重叠。因此,无论如何,无需由文件系统获取目标文件系统上的锁。参考图8,确定对象升序时第一对象的第一顺序。这里的对象的顺序指的是对象在目标文件系统16、文件、父目录和头目录等中的排列顺序。例如,它们可以称为对象0、对象1、对象2、……、对象n。对象由对应的对象id标识。在步骤802中,将确定的第一顺序与受到目标文件系统16中接收的最新bgio影响的第二对象的第二顺序进行比较。应理解,bgio事务总是被排序并且移动方向为对象0、对象1、……、对象n,即以对象的升序移动。在步骤803中,判断第一顺序是否高于第二顺序。如果确定第一顺序较小,则确定没有冲突,且将当前fgio提交至第二存储设备的缓存中。例如,如果正受到最新bgio影响的第二对象的第二顺序为3,且针对第一对象的fgio到达的顺序为0,则fgio可以继续提交至第二存储设备的缓存中。但是,如果第一顺序高于第二顺序,则方法进入步骤805。在步骤805中,确定与针对第一对象的当前fgio相关联的第一更改长度。当确定第一对象在更改对象列表中时,确定第一更改长度。如果第一对象在更改对象列表中,该列表将包括与在目标文件系统16中接收的bgio快照相关联的第一对象的对应长度。进一步地,在步骤806中,判断第一更改长度是否在更改对象列表中指示的对应长度内。如果第一更改长度与更改对象列表中指示的对应长度不冲突,则方法进入步骤807。在步骤807中,将当前fgio继续提交至第二存储设备的缓存。但是,如果确定第一更改长度在更改对象列表中的对应长度内,则方法进入步骤808。在步骤808中,第二存储设备维护执行表。基于执行表中执行状态的确定,确定是当前fgio还是并发bgio先到达,其中,当前fgio和并发bgio针对同一个第一对象。图9示出了本发明的教导提供的实现用于同步目标文件系统和源文件系统,即afs14的方法50、600和800的示例性场景。但是,这些示例仅用于说明更改对象列表和目标站点b的第二存储设备中维护的执行表,不应理解为对本发明的限制。图9a示出了包括待与目标站点b的数据存储中的afs同步的afs的源站点a的数据存储。在实现本发明的2中心数据存储系统中接收到的fgio通过双写操作写入源站点a和目标站点b的数据中心。fgio用于文件对象(0x1234、512和138),其中,对象id为0x1234,偏移量为512字节,更改长度为138字节,用于父目录对象(0x12、128和10),其中,对象id为0x12,偏移量为128字节,更改长度为10字节。图9a还示出了在发送bg快照之前,从源站点a向目标站点b(示为“远程”)发送一个枚举了更改对象的更改对象列表(示为“changeinfo”)。图9b示出了针对对象(0x1234、512和8196)的bgio写入已经开始。确定针对第一对象(0x1234、512和128)的当前fgio呈现在目标站点b中存在的更改对象列表中。因此,在第二存储设备中维护执行表,其示为“存储针对特定对象id的fg或bgio是否更新到缓存的表”。在本示例中,针对第一对象的并发bgio尚未到达目标站点b。因此,将第一对象(0x1234)的标志状态设置为1,且将当前提交至缓存的fg页面地址存储在第一对象对应的fg页面列中。图9c示出了执行表中存储的bg页面地址的bgio引用计数页面和执行表中存储的fg页面地址的fgio引用计数页面的示例。图9d示出了当针对对象(0x0012)的fgio提交至缓存完成且bg开始时,将该对象的标志状态从标志2(如图9c所示)更改为标志3的示例。上述公开解释了上述方法500、600和800中公开的采用本发明的2中心数据中心存储系统的实现。源站点a的数据中心可以包括第一存储设备102(如图4所示),目标站点b的数据中心包括第二存储设备104(如图4所示)。第一存储设备102和第二存储设备104可以是现有技术中已知的存储阵列或服务器等存储设备。例如,第一存储设备102和第二存储设备104可以包括存储区域网络(storageareanetwork,简称san)阵列,也可以包括网络连接存储(networkattachedstorage,简称nas)阵列。本发明实施例对每个数据中心中存储设备的具体形式不作限定。第一存储设备102和第二存储设备104之间的距离可以达到200公里。第一存储设备102和第二存储设备可以在同一城市或者不同的城市,只要能够实现第一存储设备102和第二存储设备104之间的数据的同步复制即可。第一存储设备102和第二存储设备104在源站点a和源站点b形成各自的存储空间,用于存储客户端设备的主机文件系统。根据本发明实施例,当源站点a的源文件系统14和目标站点b的目标文件系统16实时同步形成时,称它们具有同步复制关系。根据本发明实施例,当将afs增量从源站点a复制到目标站点b以完成源文件系统14和目标文件系统16之间的同步时,第一存储设备102和第二存储设备104继续接收写操作,即,主机发送的传入fgio事务。根据本发明,在无需由源文件系统14获得锁的情况下进行同步。图10为本发明实施例提供的执行本发明的存储设备(例如,存储设备104)的结构示意图。图10所示的存储设备104为存储阵列。如图10所示,存储设备104可以包括存储控制器1000和磁盘阵列1014,其中,磁盘阵列1014用于提供存储空间,可以包括廉价冗余磁盘阵列(redundantarrayofindependentdisk,简称raid)或包括多个磁盘的磁盘柜。磁盘阵列1014可以有多个,磁盘阵列1014包括多个磁盘1016。磁盘1016用于存储数据。磁盘阵列1014通过scsi协议等通信协议与控制器1000通信。协议在此不作限定。可以理解的是,磁盘阵列1014仅仅是存储系统中的存储器的一个示例。在本发明实施例中,数据也可以通过磁带库等存储器存储。应注意,磁盘1016也仅仅是构建磁盘阵列1014的存储器的一个示例。在实际应用中,例如,为了在包含多个磁盘的机柜之间构建磁盘阵列,还可以有一种实现方式。因此,在本发明实施例中,磁盘阵列1014还可以包括存储器,包括非易失性存储介质,例如固态硬盘(solidstatedisk,简称ssd)、包含多个磁盘的机柜、或服务器,在此不作限定。存储控制器1000是存储设备104的“大脑”,主要包括处理器1002、缓存1004、存储器1006、通信总线(简称总线)1010和通信接口1012。处理器1002、缓存1004、存储器1006和通信接口1012通过通信总线1010相互通信。应注意,本发明实施例中,存储设备104中可以有一个或多个控制器1000。可以理解的是,当存储设备104包括至少两个控制器1000时,可以提高存储设备1000的稳定性。通信接口1012用于与主机100、磁盘1016或其它存储设备(例如源站点a的第一存储设备102)进行通信。存储器1006用于存储程序1008。存储器1006可以包括高速随机存取存储器(randomaccessmemory,简称ram),或者还可以包括非易失性存储器,例如至少一个磁盘存储器。可以理解的是,存储器1006可以是各种可以存储程序代码的非瞬时性机器可读介质,例如ram、磁盘、硬盘驱动器、光盘、ssd或非易失性存储器。程序1008可以包括程序代码,程序代码包括计算机操作指令。缓存1004是控制器和硬盘驱动器之间的存储器,其容量小于硬盘驱动器,但速度快于硬盘驱动器。缓存1004用于临时存储数据,例如从主机或其它存储设备(例如,源站点a的第一存储设备102)接收的io事务,并临时存储从磁盘216读取的数据,以提高阵列的性能和可靠性。缓存204可以是各种可以存储数据的非瞬时性机器可读介质,例如ram、rom、闪存或ssd,此处不作限定。根据本发明实施例,缓存1004用于存储更改对象列表并维护执行表。可选地,当接收到bgio并将其提交至缓存1004时,可以将更改对象列表中的bgio条目移除。执行表中的地址表条目可以是在地址表条目对应的fgio或bgio完成/提交至缓存1004之后收集的垃圾。处理器1002可以是中央处理器(centralprocessingunit,简称cpu)或专用集成电路(application-specificintegratedcircuit,简称asic),或者被配置为实现本发明实施例的一个或多个集成电路。处理器1002中安装有操作系统和其它软件程序,不同的软件程序可以被视为不同的处理模块,具有不同的功能,例如处理磁盘1016的输入/输出(input/output,简称i/o)请求、对磁盘1016中的数据进行其它处理,或者修改存储设备104中保存的元数据。因此,根据本发明的教导,存储控制器1000可以实现io操作、快照、镜像、复制以及目标文件系统16和第一存储设备104的源文件系统14之间的同步等各种数据管理功能。在本发明实施例中,处理器1002用于执行程序1008,具体可以执行上述方法实施例中的相关步骤。可以理解的是,在本发明实施例中,第一存储设备102和第二存储设备104的硬件结构可以是类似的。本领域技术人员可以理解用于实现本发明的任何已知的或新的算法。然而,应注意,无论使用任何已知的或新的算法,本发明提供的方法都能够实现上述益处和技术改进。本领域普通技术人员能够认识到,结合本说明书所公开的实施例中所描述的示例,可通过电子硬件或计算机软件与电子硬件的组合来实施单元和算法步骤。功能是由硬件还是由软件执行取决于技术方案的特定发明和设计约束条件。本领域技术人员可使用不同方法实现每个特定发明的所描述功能,但是不应认为该实现超出本发明的范围。在本应用中提供若干实施例中,应理解,所公开的系统和方法可通过其它方式实现。例如,所描述的装置实施例仅仅是示例性的。例如,单元划分仅仅是逻辑功能划分且在实际实现中可以是其它划分。例如,可将多个单元或部件合并或集成到另一系统中,或可忽略或不执行部分特征。另外,可通过一些接口实现所显示或论述的互相耦合或直接耦合或通信连接。装置或单元之间的直接耦合或通信连接可通过电子、机械或其它形式实现。当这些功能以软件功能单元的形式实现以及作为单独产品销售或使用时它们可存储在计算机可读存储介质中。基于这种理解本发明的技术方案基本上或构成现有技术的部分或技术方案的部分可通过软件产品的形式实现。计算机软件产品存储在存储介质中并包括若干指令,用于指示计算机设备(其可为个人计算机、服务器或网络设备)执行本发明实施例中所描述的方法的所有或部分步骤。可以存储程序代码的任何媒体,例如usb盘、可移动硬盘、只读存储器(read-onlymemory,简称rom)、随机存取存储器(randomaccessmemory,简称ram)、磁盘或光学光盘。除非另有明确规定,否则互相通信的设备不需要连续通信。此外,互相通信的设备可以直接通信或间接地通过一个或多个中介进行通信。虽然本文描述了单个设备或制品,但显然可以使用不止一个设备/制品(不论它们是否协作)来代替单个设备/制品。类似地,虽然本文描述了不止一个设备或制品(不论它们是否协作),但显然可以使用单个设备/制品来代替不止一个设备或制品,或者可以使用不同数量的设备/制品,而不是所示数量的设备或程序。设备的功能和/或特征可替代性地由没有明确地描述为具有这种功能/特征的一个或多个其它设备来实施。因此,本发明的其它实施例不需要包括设备本身。尽管已经以特定于结构特征和/或方法的语言描述了用于在同步复制环境中处理存储解决方案中创建快照请求的系统和方法的实现方式,但应理解,所附权利要求不一定限于所描述的特定特征或方法。特定特征或方法是作为采用用于存储数据的复制方法的存储系统中创建快照请求系统的处理方法的实现示例公开的。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1