文章目录
[隐藏]

一、概述

采用Ceph分布式文件系统作为Openstack后端存储已经成为一种主流的存储对接方案,Nova、Glance、Cinder都将Ceph rbd作为默认存储。虚拟机、云硬盘及其快照的备份都可以根据rbd特性进行快捷的备份操作,实践中根据实际的情况制定适合的备份策略。备份策略的制定可考虑以下因素:

  • 备份目标;
  • 备份数据的保有量;
  • 备份频率

制定好备份策略后,据此配置好备份脚本及程序,定时备份生产环境中虚拟机等重要数据的备份。

二、备份操作

2.1 全量备份

(1)直接导出虚拟机镜像的方式

虚拟机、云硬盘及其快照的备份时全部类似,都无需关机,直接从Ceph统一存储rbd上导出相关镜像即可。

这种方式适用于虚拟机当前状态的制作镜像并备份,非常方便,不会在Openstack平台和Ceph系统上留下痕迹,适合跨云的镜像快速迁移。

恢复虚拟机只能通过Openstack镜像上传,然后在Openstack中创建虚拟机的方式进行间接恢复。

(2)利用rbd导出的方式

先给当前虚拟机创建快照并导出全量数据。

例如这里导出一个虚拟机的快照数据到本地,:

这种方式是从Ceph存储端做备份,先给当前虚拟机rbd存储打个快照,然后全量导出。

这种方式的恢复也完全在Ceph侧操作,通过rbd import方式恢复即可。

rbd import会创建一个新的镜像,并从指定的文件中导入数据,当前前提是vms/fa8db954-46c7-40bd-80b5-02321f77e116_disk不存在,否则提示文件已经存在。

2.2 增量备份

Cinder volume采用rbd作为存储后端,支持增量备份,增量备份的实现完全依赖ceph处理差量文件的特性,可以将某个rbd image不同时刻的状态进行比较,并且将其差量导出成文件。增量备份方案是将虚拟机、云硬盘和快照将这个差量文件导入到指定的备份镜像中。

增量备份的实际执行需要首先做一个基础快照,然后导出这个快照的数据,然后从当前时间点开始,按照指定的时间间隔(如每天晚上)做一个快照,然后将时间间隔内的数据导出为备份的增量数据。但建议定期做一个全量快照,一方面防止中间的增量快照遗漏,另一方面定期清理快照,本地数据做复制的时候做一下数据的压缩,来减少数据量的传输。
备份步骤: 

首先创建当前时间点快照,并查看快照:

创建下一次时间点快照,假设时间间隔一天:

导出当前这次时间点的增量数据,差量数据为20170213-00:00:00到20170214-00:00:00的新增数据:

不难看相较于全量,增量备份数据量还是比较小的(镜像变动不大情况下)。

对于增量备份的恢复,需要第一个基础快照导入(全量),然后按顺序导入增量的快照,最后恢复到最后一次增量备份的快照。

导入镜像的增量数据到当前的镜像上,因为增量是相对于的,执行前会验证前一个时间点数据是否存在,不存在就会报错而无法执行。

三、备份策略

现在假设我们针对特定的虚拟机,周天做一次全量备份,周一到周六做一次增量备份,为节省存储空间,压缩备份数据并删除一个月前的备份数据。一个简单的备份脚本vm_backup.sh如下:

脚本比较简单,其中还需要考虑中间备份出错时如何处理的情况,这个功能最后能做到DevOps平台上,数据库中保存状态,连上监控告警的功能就健壮多了,最后需要价格定时任务,每天晚上备份,如下:

其实,基于Ceph Rbd的备份软件已经有了,磨神博客已有了详细介绍,不想重复造轮子的同学,请移步磨神的《ceph的rbd备份软件ceph-backup》

四、参考文档

http://docs.ceph.com/docs/master/man/8/rbd/

http://www.zphj1987.com/2017/01/19/ceph-rbd-ceph-backup/

http://www.zphj1987.com/2016/06/22/rbd%E7%9A%84%E5%A2%9E%E9%87%8F%E5%A4%87%E4%BB%BD%E5%92%8C%E6%81%A2%E5%A4%8D/