数据不一致,VSS是如何解决的?

数据不一致,VSS是如何解决的?

数据不一致,VSS是如何解决的?

VSS(Volume Shadow Service)是微软提供的对应用进行备份恢复的一套框架,主要实现备份、恢复和数据一致性保护,在整体流程中,可分为备份和恢复两个主要流程。

 

VSS介绍和场景


VSS能够让存储基设备(比如磁盘、阵列)创建高保真的时间点映像副本,就是映射拷贝(Shadow Copy)。它可以在多卷、或者单个卷上创建映射拷贝,同时不会影响到系统性能。VSS通过协调业务应用软件、备份程序,以及存储硬件,从而达到创建高保真映射拷贝的能力。VSS可以应用到以下领域:


  A、 快速数据备份和恢复;

  B、 针对制定文件的恢复;

  C、 磁带备份、测试和数据挖掘方面;


  由于Microsoft在OS中集成了VSS技术,它将各个处理功能模块化,并针对存储软硬件厂商提供相应的开发接口;开发商只需要关注自己的模块,根据需求设计相关的应用,从而减少了整体设计的难度。


VSS组件描述


VSS整体框架包含了VSS核心模块、请求者(Requestor)、写入者(Writer),以及提供者(Provider)。各个模块之间的关系如下图所示:


数据不一致,VSS是如何解决的?


请求者(Requestor)


其主要任务是初始化映射拷贝的创建。由于需求不同,请求者解决的问题各不相同不同,在实际应用中,可能设计不同请求者应用。例如,备份应用处理VSS的备份功能,管理应用处理映射拷贝的创建和使用(像WS2003和Vista本身提供的VSS管理软件就是此类),同时,也可以设计其他功能应用,来处理专门的业务。如Windows NT备份模块、备份软件提供商设计的备份应用,存储软硬件提供商设计的管理应用等。


写入者(Writers)


其主要任务是保证数据的一致性。因为,如果在创建映射拷贝的过程中,应用软件继续往磁盘写入数据,那么将会出现数据非一致性问题,从而影响该时间点映像的完整性。通过在应用写入者模块进行控制处理,来保证数据的一致性,同时也可以达到创建映射拷贝的高效性。


通常,写入者可能是Windows OS里面的各种服务模块,像COM+、DHCP服务、Active Directory服务等,除此之外,数据库也是常见的写入者应用。


提供者(Provider)


其主要任务是创建映射拷贝。提供者是创建时间点影响的接口,它可以是基于存储阵列(硬件模式),或者操作系统(软件模式)。VSS有不同的提供者,最底层是硬件提供者,中间是软件提供者,最上面是系统软件提供者。其中,前面两个提供者是由第三方硬件或者软件厂商提供的。


VSS服务器(VSS Server)


主要任务是协调各个模块的协作运行,并提供创建卷映射拷贝的方法。VSS提供了两种创建映射拷贝的方法:


  • 一种是完全拷贝(Clone/Full Copy/Split Mirror),它会创建当前原始数据(Original Data)的全部拷贝;

  • 另外一种是写时拷贝/差量拷贝(Copy on Write/Differential Copy),它只创建将要被更新的原始数据的拷贝。


因此写拷贝创建映射拷贝速度快,但是恢复数据时需要使用原始数据。


数据卷(Volumes)


数据卷是指需要备份的数据卷,以及为Writer提供Copy-on-Write文件的数据卷。


VSS创建流程


  1. 首先由请求者让VSS枚举所在卷上的写入者应用,并收集元数据(Metadata)。


    数据不一致,VSS是如何解决的?

  2. 写入者可能通过XML文件来描述其组件,并定义其恢复方法。其中,考虑到数据一致性,写入者需要一些相关处理,比如对于数据库应用来说,关闭所有打开的事务、回滚事务日志、以及将缓冲区中的数据写入下盘等操作,直到所有数据准备好之后,通知VSS可以创建映射拷贝了。

  3. VSS对于请求的卷,查询是否支持映射拷贝,并由那个提供者提供(硬件还是软件);因为在请求者管理应用中,会设置卷的映射拷贝属性以及策略等,所以需要进行查询和判断。

  4. 请求者通知VSS,要求在该卷上创建映射拷贝。

  5. VSS锁住写入者应用,暂时不让写入新数据(在某些应用情况下,读操作请求是可以允许的)。

  6. VSS让提供者在磁盘上创建当前状态的映射拷贝(创建映射拷贝的速度,和创建的方法以及提供者的实现相关)。

  7. 创建映射拷贝完毕,VSS解锁写入者应用。然后写入者就可以处理队列中的写请求,接着VSS会查询是否这些写请求在创建映射拷贝期间被保证在队列中,如果是,则说明数据是一致的,否则说明可能数据一致性有问题,并做相应处理。

 

备份Agent需要和Provider的CommitSnapshots方法进行配合保证快照数据是应用一致性的,并等待VSS Server调用阵列操作(远程复制、快照等)实现数据备份。因为应用刷缓存、冻结IO都是由其对应的Writer进行的,所以在整个执行过程中还必须有对应应用的Writer参与刷缓存、冻结IO。


备份Agent对VSS Server提供Freeze和Thaw接口,VSS框架本身是没有Freeze和Thaw对应接口的。备份Agent封装的两个方法主要功能如下:


  • Freeze: 触发VSS备份流程,然后在Provider的CommitSnapshots方法中挂起(等待刷缓存、冻结IO等操作)。

  • Thaw: 解除Provider的CommitSnapshots方法的挂起,让备份流程执行完毕。


VSS Server执行保护组时,VSS Server先调用备份Agent的Freeze接口保证快照数据是应用一致性,然后Agent的Thaw接口执行阵列操作(远程复制、快照等),通知备份完成。


推荐阅读:

OpenStack技术和实战详解



温馨提示:

请搜索“ICT_Architect”“扫一扫”二维码关注公众号,点击原文链接获取更多电子书详情

数据不一致,VSS是如何解决的?

求知若渴, 虚心若愚

数据不一致,VSS是如何解决的?