字节级CDP真的不是个鬼,而是个仙

时间:2016-03-09 栏目:技术前沿

什么是CDP

\

如果说快照是数据照相机,那么CDP(Continuous Data Protection)就是数据录像机。录像当然要为了回放,要回放,就当然可以任意快进快退,看到并提取每一个“帧”,甚至直接把当前系统数据回滚到之前的某个历史时间点。大家接触最多的一个实例就是数据库的redo和undo日志了。

  英方云的字节级CDP体验

块级CDP的底层机制需要在一个单独设备中,先将源卷镜像一份出来。如下图所示:

\

主机访问底层的卷,一定是以512Byte为对齐单位,也就是一个扇区,或者说一个块,对卷做CDP保护,其最小粒度也只能是一个块。而如果对文件来做CDP的话,难度着实就不小了,因为文件的最小更改粒度,是1Byte,而不是512Byte。而且针对文件的操作,远比针对块的操作要复杂,后者只有Write操作,而前者,则还有比如delete,truncate,setattr,setendoffile,write,mkdir,link,unlink等这些文件系统通用操作,这些页都是某种变更,如果要做到每一笔变更都不丢失,那么CDP系统就要将所有这些变更都记录并追踪管理下来,也像上图那样存储在日志中。

这便是“字节级”CDP,其记录的真的字节级别的更新。

为了求证此事,冬瓜哥向英方软件申请了个试用DEMO环境,亲自操作了一把,用实际证明了字节级CDP,真的不是个鬼,而是个仙。

如图所示。进入云灾备的控制页面,首先看到的是一张全局Dashboard。

\

这些不重要,重要的是,冬瓜哥在某台远端机器上做了如下操作:

\

然后到控制台中尝试回放之前的历史时刻点,点击图中的“查看相关CDP日志”按钮之后,便跳出一个列出了针对目标文件所有细粒度操作的列表。

\

如下图所示,可以发现,其没有落下任何一个对该文件的变更操作,连link/unlink都抓取了下来,并复制到远端的日志中供后续回放。

\

然而,由于粒度过细,该文件并不能从日志中即刻虚拟出一个即刻可以访问的虚拟文件,而必须基于最近baseline,将增量读出,重新replay一下增量到baseline,然后将replay好的文件副本拷贝到某个地方,才能供用户访问。不能直接像块级CDP回放时那样指哪打哪,但是优点就是能够在文件粒度、字节粒度,提供更加贴近用户的细粒度恢复。而基于块的CDP,需要先将整个虚拟卷挂起,然后才能看到文件,进入对应目录做恢复。

可以从图片中看到,该CDP服务端是运行在腾讯云的某台主机上的,跨网络传输,需要精打细算,在这方面,块级CDP的确有劣势,因为上层文件更新了哪怕只有一个Byte的元数据,底层其实也要更新至少4KB(之前读上来缓存住,更改后,刷盘),因为文件系统一般格式化的时候也是最小4KB的块大小,元数据也按照块来分配。所以,传这么多数据块的话,时延会比较高。其还可以从腾讯云复制到阿里云跨云复制和CDP,目前未在其他产品上看到支持跨云实现CDP的。

  字节级CDP的底层机制

对于字节级CDP,源端的IO抓取器,其实本质上是一个filter driver,其插入到系统的IO路径上,将自己的回调函数注册或者说hook挂接到系统内现存的其他驱动下方,比如挂接到VFS下方,那么它就可以抓取每一笔针对文件系统的操作请求。而块级CDP的IO抓取器实际上是挂接到了SCSI协议栈顶层的Device Driver下方,从而抓取到的是针对某个磁盘设备的IO操作。在Windows下,这些IO请求有个名称叫做“IRP”,IO Request Packet,Linux下针对块设备的IO则被称为bio,block IO。

字节级CDP的IO抓取Filter Driver嵌入到IO路径之后,抓取每一笔IO操作,判断其是否是变更操作,比如write,link,setattr等,如果是,则将这个请求下发到下游驱动的同时,复制一份,封装到网络包中,推送给CDP服务端从而保存在增量日志中供后续回放。

  [网络协议栈中的Filter Driver]

Wireshark等抓包软件,大家也都用过,其底层就是用了一个FIlter Driver,插入到了网络协议栈里网卡驱动的上方,这样才能抓取到所有网卡上报的以太网帧,从而做分析。Filter Driver越处于下层,就越能够抓取更加底层的信息,但是缺点就是粒度不够细,因为上层的调用到了底层会大变样,比如,文件系统的调用,底层都会被转为块的传输,除非使用了NFS协议,因为NFS Client程序会将上层调用几乎透传到NFS Server端,但是此时抓取的是NFS封包,多了很多冗余信息,而如果在上层抓取,则直接抓取的是原始细粒度的IRP或者Linux下的file IO描述结构体。

  [多路径软件本身就是个FIlter Driver]

多路径软件,就是插入到IO路径中,截获上方的IO,做判断,然后从对应路径转发出去;当路径故障时,向上层屏蔽其影响,自动切换路径。

多路径软件有多种不同实现,有些直接插入到Host Driver上方,有些则插入到Device Driver上方。越往上,兼容性越强,所以内核自带的多路径软件,都位于通用块层,这样可以屏蔽底层的差异,傲视群雄。

传统的复制技术需要考虑使用额外的数据去重技术来减少对存储空间的需求,增加了系统资源和处理开销。而英方的字节级数据捕获与复制技术所传输和保存的都是 I/O 级别的增量数据,为最精简的变化数据,无重可去,从而大大节省了存储空间,提升了传输效率。

及时响应,快速服务,为您保驾续航

立即注册

请先完成图形验证

验  证  码:

请先完成图形验证

验  证  码:

隐私声明
当您在本网站进行合作伙伴注册登记,本网站将收集您的相关信息,并保存记录。本网站收集的个人信息包括但不限于:姓名、地址、公司、所在地区、电话号码以及电子邮件地址等。您主动提供的信息越多及越准确,我们就能够更好地为您提供有关服务。
咨询·购买