• ceph的rbd备份软件ceph-backup


    teralytics是一家国外的大数据公司,这个是他们开源的ceph的备份的工具,在twitter上搜索相关信息的时候看到,觉得不错就拿来试用一番

    这是个什么软件

    一个用来备份 ceph 的 rbd 的image的开源软件,提供了两种模式
    增量:在给定备份时间窗口内基于 rbd 快照的增量备份
    完全:完整镜像导出时不包含快照

    注意一致性:此工具可以生成 rbd 镜像的快照,而不会感知到它们的文件系统的状态,注意下 rbd 快照的一致性限制(官网文档) 由于“完全”模式不使用快照,“完全”模式下的实时映像备份不一致(“增量”模式始终使用快照)

    超过时间窗口以后,会进行一次全量备份,并且把之前的快照删除掉,重新进行一次全量备份,并且基于这个时间窗口计算是否需要删除备份的文件

    软件包含以下功能:

    • 支持存储池和多image的指定
    • 支持自定义备份目标路径
    • 配置文件支持
    • 支持备份窗口设置
    • 支持压缩选项
    • 支持增量和全量备份的配置

    编译安装

    [root@lab8106 ~]#git clone https://github.com/teralytics/ceph-backup.git
    [root@lab8106 ~]# cd ceph-backup
    [root@lab8106 ceph-backup]# python setup.py install
    

    安装过程中会下载一些东西,注意要有网络,需要等待一会

    准备配置文件

    [root@lab8106 ceph-backup]# mkdir /etc/cephbackup/
    [root@lab8106 ceph-backup]# cp ceph-backup.cfg /etc/cephbackup/cephbackup.conf
    

    我的配置文件如下,备份 rbd 存储的 zp 的镜像,支持多 image,images后面用逗号隔开就可以

    [root@lab8106 ~]# cat /etc/cephbackup/cephbackup.conf 
    [rbd]
    window size = 7
    window unit = days
    destination directory = /tmp/
    images = zp
    compress = yes
    ceph config = /etc/ceph/ceph.conf
    backup mode = full
    check mode = no
    

    开始备份

    全量备份配置

    上面的配置文件已经写好了,直接执行备份命令就可以了

    [root@lab8106 ~]# cephbackup
    Starting backup for pool rbd
    Full ceph backup
    Images to backup:
    	rbd/zp
    Backup folder: /tmp/
    Compression: True
    Check mode: False
    Taking full backup of images: zp
    rbd image 'zp':
    	size 40960 MB in 10240 objects
    	order 22 (4096 kB objects)
    	block_name_prefix: rbd_data.25496b8b4567
    	format: 2
    	features: layering
    	flags: 
    Exporting image zp to /tmp/rbd/zp/zp_UTC20170119T092933.full
    Compress mode activated
    # rbd export rbd/zp /tmp/rbd/zp/zp_UTC20170119T092933.full
    Exporting image: 100% complete...done.
    # tar Scvfz /tmp/rbd/zp/zp_UTC20170119T092933.full.tar.gz /tmp/rbd/zp/zp_UTC20170119T092933.full
    tar: Removing leading `/' from member names
    

    压缩的如果开了,正好文件也是稀疏文件的话,需要等很久,压缩的效果很好,dd 生成的文件可以压缩到很小

    检查备份生成的文件

    [root@lab8106 ~]# ll /tmp/rbd/zp/zp_UTC20170119T092933.full*
    -rw-r--r-- 1 root root 42949672960 Jan 19 17:29 /tmp/rbd/zp/zp_UTC20170119T092933.full
    -rw-r--r-- 1 root root           0 Jan 19 17:29 /tmp/rbd/zp/zp_UTC20170119T092933.full.tar.gz
    

    全量备份的还原

    rbd import /tmp/rbd/zp/zp_UTC20170119T092933.full zpbk
    

    检查数据,没有问题

    增量备份配置

    写下增量配置的文件,修改下备份模式的选项

    [rbd]
    window size = 7
    window unit = day
    destination directory = /tmp/
    images = zp
    compress = yes
    ceph config = /etc/ceph/ceph.conf
    backup mode = incremental
    check mode = no
    

    执行多次进行增量备份以后是这样的

     [root@lab8106 ~]#ll  /tmp/rbd/zpbk/
    total 146452
    -rw-r--r-- 1 root root 42949672960 Jan 19 18:04 zpbk@UTC20170119T100339.full
    -rw-r--r-- 1 root root       66150 Jan 19 18:05 zpbk@UTC20170119T100546.diff_from_UTC20170119T100339
    -rw-r--r-- 1 root root          68 Jan 19 18:05 zpbk@UTC20170119T100550.diff_from_UTC20170119T100546
    -rw-r--r-- 1 root root          68 Jan 19 18:06 zpbk@UTC20170119T100606.diff_from_UTC20170119T100550
    -rw-r--r-- 1 root root          68 Jan 19 18:06 zpbk@UTC20170119T100638.diff_from_UTC20170119T100606
    

    增量备份的还原

    分成多个步骤进行

    1、进行全量的恢复
    # rbd import config@UTC20161130T170848.full dest_image
    2、重新创建基础快照
    # rbd snap create dest_image@UTC20161130T170848
    3、还原增量的快照(多次执行)
    # rbd import-diff config@UTC20161130T170929.diff_from_UTC20161130T170848 dest_image
    

    本测试用例还原步骤就是

    rbd  import zpbk@UTC20170119T100339.full zpnew
    rbd snap create zpnew@UTC20170119T100339
    rbd import-diff zpbk@UTC20170119T100546.diff_from_UTC20170119T100339  zpnew
    rbd import-diff zpbk@UTC20170119T100550.diff_from_UTC20170119T100546  zpnew
    rbd import-diff zpbk@UTC20170119T100606.diff_from_UTC20170119T100550  zpnew
    rbd import-diff zpbk@UTC20170119T100638.diff_from_UTC20170119T100606  zpnew
    

    检查数据,没有问题

    总结

    这个软件基于python的实现,可以说作者的实现逻辑是很清晰的,并且提供了配置文件的方式,基本上是各个细节都考虑的比较到位,很容易上手,可以直接拿来使用,或者集成到自己的平台中去,是一个很好的软件

    补充

    集群有个bug,在rbd import名称的时候如果带了@符号,那么导入的时候就会有问题,具体如下

    rbd import /tmp/ls@1
    

    那么无法 rbd info ls@1,无法 rbd rm ls@1操作了,这个地方需要代码进行修改进行屏蔽,一般正常操作也没问题,但是万一出现了,怎么解决呢?

    下面举个例子来讲述解决过程:
    假设我的操作是

    [root@lab8106 ~]#rbd import /tmp/ls@1
    

    首先查询下image的id

    [root@lab8106 ~]#rados -p rbd get rbd_id.ls@1 rbd_id.ls@1
    [root@lab8106 ~]#cat rbd_id.ls@1
    304b76b8b4567
    

    得到id是这个
    删除header(后缀是上面获取的id)

    [root@lab8106 ~]#rados -p rbd rm rbd_header.304b76b8b4567
    

    删除data

    [root@lab8106 ~]#rados -p rbd rm rbd_data.304b76b8b4567.0000000000000000
    

    删除id文件

    [root@lab8106 ~]#rados -p rbd rm rbd_id.ls@1
    

    查询元数据信息进行删除

    [root@lab8106 ~]#rados -p rbd listomapvals rbd_directory
    

    删除的一个是上面的获取的id,一个是名称

    [root@lab8106 ~]# rados -p rbd rmomapkey rbd_directory id_304b76b8b4567
    [root@lab8106 ~]# rados -p rbd rmomapkey rbd_directory name_ls@1
    

    再次检查

    rados -p rbd listomapvals rbd_directory
    

    再次rbd ls检查,已经好了

    相关链接

    rbd的增量备份和恢复
    ceph-backup的github

    变更记录

    Why Who When
    创建 武汉-运维-磨渣 2017-01-19
    误导入的恢复 武汉-运维-磨渣 2017-03-02
  • 相关阅读:
    HTTP状态码
    TCP慢启动、拥塞避免、快速重传、快速恢复(转)
    优化js设计,防止浏览器假死(转)
    Firebug详解(转)
    WUST Online Judge
    WUST Online Judge
    WUST Online Judge
    WUST Online Judge
    WUST Online Judge
    WUST Online Judge
  • 原文地址:https://www.cnblogs.com/zphj1987/p/13575405.html
Copyright © 2020-2023  润新知