zoukankan      html  css  js  c++  java
  • ceph中rbd的增量备份和恢复

    ceph中rbd的增量备份和恢复

    ceph的rbd操作文档地址:Ceph Documentation

    ​ 在调研OpenStack中虚机的备份和恢复时,发现OpenStack和ceph紧密结合,使用ceph做OpenStack的后端简直是不要太爽,于是调研了使用ceph中的块设备rbd来对虚机进行增量备份和恢复。以下是虚机备份和恢复的实验步骤:

    1. 前言:

    快照的功能一般是基于时间点做一个标记,然后在某些需要的时候,将状态恢复到标记的那个点,这个有一个前提是底层的数据没有破坏,举个简单的例子,Vmware 里面对虚拟机做了一个快照,然后做了一些系统的操作,想恢复快照,前提是存储快照的存储系统没用破坏,一旦破坏了是无法恢复的。

    ​ ceph也有快照功能,同样,在这里的快照是用来保存存储系统上的状态的,数据的快照能成功恢复的前提是存储系统是好的,而一旦存储系统坏了,快照同时会失效的,所以最好是能够将数据备份下来。本篇博客主要是调研使用ceph的rbd命令来对存储设备进行基于快照的增量备份。

    2. ceph中rbd的常用命令:

    2.1列出存储池

    ceph osd pool ls
    

    2.2 查看存储池的内容

    rbd ls --pool pool_name
    例子
    rbd ls --pool volumes
    

    2.3 打快照

    rbd snap create {pool-name}/{image-name}@{snap-name}
    例如
    rbd snap create volumes/volume-c18b9782-dc71-4ddc-bb7f-bc0037105ac3@v1
    

    2.4 罗列快照

    rbd snap ls {pool-name}/{image-name}
    例如:
    rbd snap ls volumes/volume-c18b9782-dc71-4ddc-bb7f-bc0037105ac3
    

    2.5 创建image

    rbd create --size {pool-name}/{image-name}
    

    3. Nova实例的备份与恢复

    以ceph做后端,在创建实例时,需要选择一个系统盘,系统盘即是我们的目标数据盘。

    备份实验步骤:

    1. 创建虚机。
    2. 在时间点v1对虚机打快照。
    3. 导出从开始创建image到快照v1那个时间点的差异数据,可以视为全量备份。
    4. 使用dd命令写入文件test.txt
    5. 在时间点v2对虚机打快照。
    6. 导出从开始创建image到快照v2那个时间点的差异数据,可以视为全量备份。
    7. 导出了从v1快照时间点到v2快照时间点的差异数据,可以视为增量备份。

    上文实验过程的数据:

    v1时间点数据 + v1_v2之间数据 = v2 时间点数据

    虚机的备份

    1. 实例第一次快照:

    rbd snap create volumes/volume-c18b9782-dc71-4ddc-bb7f-bc0037105ac3@v1
    

    2. 第一次全量备份:

    rbd export-diff volumes/volume-c18b9782-dc71-4ddc-bb7f-bc0037105ac3@v1 testimage_v1
    

    这个命令是导出了从开始创建image到快照v1那个时间点的差异数据导出来了testimage_v1,导出成本地文件testimage_v1

    3. 写入文件

    dd
    

    写入文件,以此显示出v1和v2之间的数据变化,并没有其他作用。

    4. 实例第二次快照

    rbd snap create volumes/volume-c18b9782-dc71-4ddc-bb7f-bc0037105ac3@v2
    

    5. 第二次全量备份:

    rbd export-diff volumes/volume-c18b9782-dc71-4ddc-bb7f-bc0037105ac3@v2  testimage_v2
    

    这个命令是导出了从开始创建image到快照v2那个时间点的差异数据导出来了testimage_v2,导出成本地文件testimage_v2

    6. 增量备份

    增量备份(第二次和第一次的差异文件):

    rbd export-diff volumes/volume-c18b9782-dc71-4ddc-bb7f-bc0037105ac3@v2 --from-snap v1 testimage_v1_v2
    

    这个命令是导出了从v1快照时间点到v2快照时间点的差异数据,导出成本地文件testimage_v1_v2

    注意:

    rbd export-diff rbd/testimage testimage_now
    

    这个是导出了从image创建到当前的时间点的差异数据。

    虚机恢复

    虚机的恢复过程使用的是刚刚上面提到的备份到本地的那些文件。

    1.创建块设备映像

    2.将testimage_v1融入块设备,恢复v1时间的状态

    3.将testimage_v2融入块设备,恢复v2时间状态

    4.在2基础上将v1_v2融入块设备,恢复至v2时间状态

    上述实验是全量恢复和增量恢复的两种状态。下文将详细总结项目中增量备份和恢复的使用过程。

    1. 创建块设备映像image

    首先随便创建一个image,名称大小都不限制,因为后面恢复的时候会覆盖掉大小的信息

    rbd create --size 2048 backups/testbacknew
    

    2. 基于v2的时间点的快照做恢复

    2.1 基于V2恢复

    直接基于v2的时间点的快照做恢复

    rbd import-diff testimage_v2 rbd/testbacknew
    
    2.2 基于v1+ v1_v2数据恢复

    直接基于v1的时间点的数据,和后面的增量的v1_v2数据(要按顺序导入)

    rbd import-diff testimage_v1 backups/testbacknew
    rbd import-diff testimage_v1_v2 backups/testbacknew
    

    ​ 实际项目当中就是,定期做快照,然后导出某个时间点快照的数据,然后导出增量的快照的数据,就可以了

    4. 实际使用

    ​ 在实际项目中使用就是,定期做快照,然后导出某个时间点快照的数据,然后导出增量的快照的数据。

    例如:

    备份:

    ​ 对所有的rbd的image做一个基础快照,然后导出这个快照的数据,然后设置每天定时做快照,导出快照时间点之间的数据,这样每天导出来的就是一个增量的数据了。

    ​ 设置循环周期,比如三天为一个周期。每三天循环一次,自动删除三天前的备份。

    恢复:

    ​ 从第一个快照导入,然后按照顺序导入增量的快照即可。

  • 相关阅读:
    Django-下载文件设置响应头和兼容中文
    django-strftime日期格式化问题
    API集成管理平台YAPI的搭建和使用
    dubbo 的 spi 思想是什么?
    关于
    Python接口自动化之unittest单元测试
    Python接口自动化之requests请求封装
    Python接口自动化之Token详解及应用
    Python接口自动化之cookie、session应用
    Python接口自动化-requests模块之post请求
  • 原文地址:https://www.cnblogs.com/jimlau/p/11937497.html
Copyright © 2011-2022 走看看