数据保护

快照管理

云平台支持ROW(Redirect-On-Write,写时重定向)以及COW(Copy-On-Write)快照机制。
  • 集中式存储快照机制:本地存储/NFS/Shared Mount Point/Shared Block使用QCOW2外部快照(External Snapshot),属于ROW快照机制的一种。
  • 分布式存储快照机制:企业版Ceph/Vhost/CBD使用ROW快照技术。自研分布式存储使用COW快照。

集中式存储快照机制

关于QCOW2外部快照的说明。

  1. 快照链与快照树

    通常一块磁盘对应一条快照链,支持对一块磁盘创建一棵快照树,快照树的每一个分支都是一条快照链。

    图 1所示:
    图 1. 快照树


    快照树包括以下信息:
    • 快照链:磁盘的一组快照组成的关系链,快照树的每一个分支都是一条快照链。
    • 快照节点:快照链中的一个节点,表示磁盘的一份快照。
    • 快照容量:快照占用的存储空间。支持查看快照树中所有快照的总容量,以及单个快照节点的容量。
    Note:
    • 对于非Ceph存储,系统默认每条快照链最多有128个节点,用户可在全局设置中,通过修改云盘快照增量的最大数目自行设置快照链的最大长度。对于Ceph存储,单盘最大快照数量为32,包括手动创建及自动创建的快照。
    • 快照链长度达到上限后:
      • 若继续创建自动快照,系统会自动删除最早的自动快照。
      • 若继续创建手动快照,用户需手动删除不需要的快照。
    • 在生产环境中,建议单块磁盘的快照数量尽量控制在5以内,快照过多会影响云主机/云盘的IO性能、数据安全以及主存储容量。如需长期备份,建议使用灾备服务。
  2. 创建快照

    当一个外部快照被创建,实质是新建一个空白的qcow2文件,该空白文件的backing file指向旧qcow2文件,旧qcow2文件置为只读,于是旧qcow2文件自身成为一个快照,后续只对新qcow2文件写入数据。

    • 基于backing file创建单条快照链。
      图 2所示:
      图 2. 创建快照 单链


      假定已有一个原始镜像(Base),以该原始镜像为模板创建云主机1,对云主机1依次创建快照1A、快照1B。
      • 原始镜像:一个已制作好的磁盘镜像文件,包含完整的操作系统以及引导程序,作为Base(只读)。
      • 云主机1:新建空白文件Overlay-1,backing file指向Base,Base保持为只读,于是Base成为一个快照,后续只对Overlay-1写入数据。
      • 快照1A:新建空白文件Overlay-1A,backing file指向Overlay-1,Overlay-1置为只读,于是Overlay-1成为一个快照,后续只对Overlay-1A写入数据。
      • 快照1B:新建空白文件Overlay-1B,backing file指向Overlay-1A,Overlay-1A置为只读,于是Overlay-1A成为一个快照,后续只对Overlay-1B写入数据。云主机1使用的是快照链内最后一个快照1B对应的磁盘文件,快照1B为Active。
    • 基于backing file创建多条快照链。
      图 3所示:
      图 3. 创建快照 多链


      假定已有一个原始镜像(Base),以该原始镜像为模板创建云主机1、云主机2、云主机3,对云主机1依次创建快照1A、快照1B,对云主机2创建快照2A,对云主机3创建快照3A。
      • 原始镜像:一个已制作好的磁盘镜像文件,包含完整的操作系统以及引导程序,作为Base(只读)。
      • 快照链1:
        • 云主机1:新建空白文件Overlay-1,backing file指向Base,Base保持为只读,于是Base成为一个快照,后续只对Overlay-1写入数据。
        • 快照1A:新建空白文件Overlay-1A,backing file指向Overlay-1,Overlay-1置为只读,于是Overlay-1成为一个快照,后续只对Overlay-1A写入数据。
        • 快照1B:新建空白文件Overlay-1B,backing file指向Overlay-1A,Overlay-1A置为只读,于是Overlay-1A成为一个快照,后续只对Overlay-1B写入数据。云主机1使用的是快照链1内最后一个快照1B对应的磁盘文件,快照1B为Active。
      • 快照链2:
        • 云主机2:新建空白文件Overlay-2,backing file指向Base,Base保持为只读,后续只对Overlay-2写入数据。
        • 快照2A:新建空白文件Overlay-2A,backing file指向Overlay-2,Overlay-2置为只读,于是Overlay-2成为一个快照,后续只对Overlay-2A写入数据。云主机2使用的是快照链2内最后一个快照2A对应的磁盘文件,快照2A为Active。
      • 快照链3:
        • 云主机3:新建空白文件Overlay-3,backing file指向Base,Base保持为只读,后续只对Overlay-3写入数据。
        • 快照3A:新建空白文件Overlay-3A,backing file指向Overlay-3,Overlay-3置为只读,于是Overlay-3成为一个快照,后续只对Overlay-3A写入数据。云主机3使用的是快照链3内最后一个快照3A对应的磁盘文件,快照3A为Active。
  3. 合并快照

    外部快照之间互相依赖(每一个overlay依赖它的backing file),每个快照保存有相应数据,不可直接删除某个快照来缩短链长度。外部快照可通过向下合并(Blockcommit)或向上合并(Blockpull)两种方式来缩短链长度。

    • 向下合并(Blockcommit)

      在同一条快照链内,支持将overlays合并至backing files。

      图 4所示:
      图 4. 向下合并


      假定已有一个原始镜像(Base),基于Base创建云主机1,并对云主机1创建3个互相依赖的外部快照,即:快照1A、快照1B、快照1C。现将快照1A、快照1B向下合并至云主机1,于是快照1C(Active)的backing file直接指向云主机1,快照链缩短。快照1A、快照1B不再有用,删除即可。

    • 向上合并(Blockpull)

      在同一条快照链内,支持将backing files合并至overlays。

      图 5所示:
      图 5. 向上合并


      假定已有一个原始镜像(Base),基于Base创建云主机1,并对云主机1创建3个互相依赖的外部快照,即:快照1A、快照1B、快照1C。现将快照1A、快照1B向上合并至快照1C(Active),于是快照1C(Active)的backing file直接指向云主机1,快照链缩短。快照1A、快照1B不再有用,删除即可。

分布式存储快照机制

企业版Ceph使用ROW快照技术。自研分布式存储使用COW快照,详情参考:卷快照保护

灾备服务

数据备份

灾备服务支持基于Qemu块设备层的数据备份,各类型主存储上的云主机均支持备份。备份类型可分为:全量备份、增量备份。全量备份包含完整的数据集合,增量备份仅包含自上一次备份后所有更新的数据集合。全量备份和增量备份均仅备份真实数据。

默认情况下,备份策略是在首次全量备份后,每63个增量备份的下一次备份就会自动执行一次全量备份。这是因为增量备份之间有依赖关系,在做新的一次全量备份后,才能对之前的增量备份进行删除。实际上,系统内部有更智能灵活的应对策略来决定使用哪种合适的备份方式,以确保备份数据的安全可靠。

数据备份可分为三部分:数据复制、数据传输、数据保存。

数据复制

灾备模块利用Qemu块设备层的脏数据跟踪功能(Dirty Bitmap)实现备份数据的跟踪与导出。

云主机磁盘文件数据发生变化的位置被称为脏数据位置,Dirty Bitmap记录自上次备份后,虚拟磁盘文件上产生脏数据的所有位置记录,根据位置记录,就可导出自上次备份后所有被修改过的数据,即增量的备份数据。最终全量备份文件和各个增量备份文件会产生一个完整的备份链,保存完整的数据。

云平台提供自适应的备份导出策略,后台会根据不同情况选择导出增量数据还是全量数据。Dirty Bitmap存在于Qemu进程的内存中,云主机重启后就会丢失这部分信息,因此当云主机重启后云平台会自动选择导出全量备份数据。

图 1所示:
图 1. Dirty Bitmap


数据传输

针对不同的虚拟化组件版本,支持两套不同的实现方案,主要区别在备份数据的传输上。

第一种方案:Data Over SSHFS。使用SSHFS在计算节点上挂载远程备份服务器的备份目录,然后将备份数据导入备份服务器。SSHFS是一个简单的FUSE Over SSH方案,数据链路由SSH会话加密,每个备份任务有单独的SSHFS链路。

图 1所示:
图 1. Data Over SSHFS


第二种方案:Data Over NBD。在备份服务器上使用NBD模块导出一个备份磁盘,然后在计算节点通过Qemu的块设备任务(Block-job),直接将备份数据导入备份磁盘。

图 2所示:
图 2. Data Over NBD


数据保存

备份服务器支持多种存储介质,包括:SAN、NAS、磁盘阵列以及带库等。

备份数据在备份服务器中切片去重存放,备份数据会被切分成64MB大小的数据块,然后计算Hash,建立索引。拥有相同Hash的数据块不会被存储多份。

图 1所示:
图 1. 数据切片保存


数据恢复

从本地备份数据恢复云主机/云盘,会把备份服务器上的切片数据合并导入主存储中。

如果是非Ceph主存储,合并后的备份恢复数据会以磁盘链的形式存放;如果是Ceph主存储,会把磁盘链合并成单个磁盘文件存放。

如果是新建恢复,恢复到主存储的磁盘数据会被当作镜像缓存来创建新云主机/云盘;如果是覆盖恢复,会把恢复到主存储的磁盘路径更新到当前云主机/云盘的数据库记录中,随后删除旧的云主机/云盘文件。

图 1所示:
图 1. 数据恢复


CDP服务

数据备份

数据复制

CDP模块利用Qemu块设备层的脏数据跟踪功能(Dirty Bitmap)以及Drive-mirror实现备份数据的跟踪与导出。

云主机磁盘文件数据发生变化的位置被称为脏数据位置,Dirty Bitmap记录自上次备份后,虚拟磁盘文件上产生脏数据的所有位置记录,根据位置记录,就可导出自上次备份后所有被修改过的数据,即增量的备份数据。

云平台提供自适应的备份导出策略,后台会根据不同情况选择导出增量数据还是全量数据。Dirty Bitmap存在于Qemu进程的内存中,云主机重启后就会丢失这部分信息,因此当云主机重启后云平台会自动选择导出全量备份数据。

图 1所示:
图 1. Dirty Bitmap


导出的备份数据通过Drive-mirror被导入保存至CDP备份服务器上的空白QCOW2磁盘文件中。空白的磁盘文件在创建CDP任务时会预先被创建出来,再通过NBD协议导出成一个网络上可访问的块设备,这样CDP备份任务就可把云主机的云盘数据持续导入至CDP备份服务器。

图 2所示:
图 2. Drive-mirror


数据恢复点

云主机数据传输至CDP备份服务器上后,以QCOW2磁盘文件形式存放。针对QCOW2磁盘文件会有一个Qemu存储服务来提供各种保护策略下的数据恢复点。

CDP任务的数据恢复点由BP点和RP点组成。BP点以粗粒度形式按时间定期生成外部快照(默认20分钟),RP点则可根据实际设置的CDP保护策略,最快以1秒1次记录IO变化来生成恢复点。

CDP备份服务器首先会对云主机数据进行一次全量复制生成基本BP点,后续通过Qemu持续捕获I/O数据变化,将每次变化的I/O数据打上时间戳生成RP点并保存下来。恢复点的生成都是在CDP备份服务器上做的,对原云主机无任何影响。

图 1所示:
图 1. BP点与RP点


数据恢复

找回文件

当因误删云主机丢失部分文件时,CDP备份数据支持快速浏览备份文件,实现文件级别的数据恢复。用户可选择任意恢复点浏览恢复点中的文件和数据,也可预览文件内容,确认文件包含所需数据后,再选择下载文件或锁定恢复点做后续的数据恢复。

图 1所示:
图 1. 找回文件


快速恢复

当云主机业务发生故障或遭受病毒需做整机数据恢复时,CDP备份数据支持秒级快速恢复,满足业务快速恢复上线的需求。

快速恢复主要包含两个步骤:云主机快速拉起、云主机数据迁移。

在CDP备份服务器上,云主机备份数据以QCOW2磁盘格式存放。为实现快速拉起,首先会将备份的QCOW2磁盘通过NBD以网络块设备方式映射出来,然后云主机在计算节点上通过NBD来访问备份服务器上的云主机备份磁盘,此时云主机已正常提供业务,用户可正常读写云主机。

由于云主机磁盘尚未存放至主存储,后台会启动一个存储迁移任务,将备份服务器上的磁盘数据同步到主存储上。在该过程中,对云主机的修改写入均会被记录为脏页,一并同步至主存储的目标磁盘中。

当同步任务发现数据全部拷贝完成后,云主机会默认将磁盘路径动态切换成主存储的路径来访问。后台迁移过程会将云主机的所有数据均同步至主存储,并且整个过程对用户完全无感知,也不会对云主机业务产生影响。

图 1所示:
图 1. 快速恢复


备份可靠性指标

评估灾备系统可靠性有两个重要指标:RPO与RTO。RPO(Recovery Point Objective)指恢复点目标,强调灾难发生后,企业能容忍的数据丢失量。RTO(Recovery Time Objective)指恢复时间目标,强调灾难发生后,企业能容忍的数据恢复时间。

CDP模块在云主机低负载情况下RPO与RTO最低均可达1秒。

图 1所示:
图 1. RPO与RTO