之前有写过一篇关于rbd增量备份的,以及介绍过ceph-backup这款软件
这两篇文章里的方法都是基于rbd的快照去进行增量备份,之前文章里的恢复方法都是基于集群进行恢复,也就是需要一个集群进行导入,本篇将介绍另外一个方法,不基于集群进行恢复,直接在本地文件系统上进行恢复,我们来看下这个是怎么恢复的
本篇也可以用于rbd和rbd快照在本地进行合并
rbd在没有做快照的情况下的备份,导出后是一个文件形式的
rbd export testrbd testrbd
使用下面方法进行直接访问
losetup /dev/loop0 testrbd
kpartx -a /dev/loop0
mount /dev/mapper/loop0p1 /mnt1/
mount /dev/mapper/loop0p2 /mnt2/
内核块设备使用的时候可以直接进行文件的本地访问,如果是librbd的虚拟机磁盘的形式的直接当raw格式进行直接访问或者传输到OpenStack里面直接访问即可,或者用上面的步骤本地直接访问
如果使用的是ceph-backup的增量备份,需要离线恢复的话需要一个第三方插件
wget https://github.com/zphj1987/eve4ceph-mdti/archive/master.zip
下载好了后进入代码目录,执行
yum install glib2-devel
yum install glib-devel
make install
执行完了后会生成一个二进制文件,这个 eve4ceph-mdti ,不需要其他配置,直接使用即可
[root@lab244 mnt]# ll /root/test/
total 280
-rw-r--r--. 1 root root 159958 Oct 25 03:10 testrbd@BACKUPUTC20171024T190955.full.tar.gz
-rw-r--r--. 1 root root 60202 Oct 25 03:12 testrbd@BACKUPUTC20171024T191243.diff_from_BACKUPUTC20171024T190955.tar.gz
-rw-r--r--. 1 root root 57568 Oct 25 03:13 testrbd@BACKUPUTC20171024T191358.diff_from_BACKUPUTC20171024T191243.tar.gz
使用ceph-backup生成的是上面的这些压缩包的形式,直接全部解压
[root@lab244 mnt]# ll /root/test/tmp/rbd/testrbd/
total 127788
-rw-r--r--. 1 root root 10737418240 Oct 25 03:30 testrbd@BACKUPUTC20171024T190955.full
-rw-r--r--. 1 root root 19650298 Oct 25 03:12 testrbd@BACKUPUTC20171024T191243.diff_from_BACKUPUTC20171024T190955
-rw-r--r--. 1 root root 18896617 Oct 25 03:13 testrbd@BACKUPUTC20171024T191358.diff_from_BACKUPUTC20171024T191243
解压完成后生成了原始全量镜像和快照增量部分,根据快照时间顺序进行合并
eve4ceph-mdti testrbd\@BACKUPUTC20171024T190955.full testrbd\@BACKUPUTC20171024T191243.diff_from_BACKUPUTC20171024T190955
eve4ceph-mdti testrbd\@BACKUPUTC20171024T190955.full testrbd\@BACKUPUTC20171024T191358.diff_from_BACKUPUTC20171024T191243
执行上面的以后会把快照的差量回滚到全量的那个备份当中
losetup /dev/loop0 testrbd\@BACKUPUTC20171024T190955.full
kpartx -a /dev/loop0
mount /dev/mapper/loop0p1 /mnt
ll /mnt
经过上面的步骤以后,在本地文件系统上面就把增量的部分进行合并了,这里面用到比较关键的一个技术点就是ceph_apply_diff,上面的操作进行了多次增量的备份,数据是按照快照点进行恢复,需要按时间先后顺序把差异合并到第一个full镜像,需要注意的是,做快照如果是librbd,要注意rbd的cache的影响,先flushcache,然后快照,如果是kernel rbd的快照,要注意本地文件系统的缓存的影响
本篇是提供了一种本地恢复增量备份的rbd的方法,在集群之外进行快照的合并,减少了恢复过程对集群的依赖