首先介绍Snapshot

snapshot可以为volume创建快照,快照中保存了volume当前的状态,此后可以通过snapshot回溯

主要采用了Copy On Write算法。进行快照时,不牵涉到任何档案复制动作,它所作的只是通知服务器将目前有数据的磁盘区块全部保留起来,不被覆写。接下来档案修改或任何新增、删除动作,均不会覆写原本数据所在的磁盘区块,而是将修改部分写入其它可用的磁盘区块中。

COW技术在很多场景都有应用,下图为编程中创建子进程时采用COW技术的场景(思想一致):

只读情况:

针对上述场景,当父子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间,如下:

写情况:

资源的复制只有在需要写入的时候才进行,此前,是以只读方式共享,使实际的拷贝被推迟到实际发生写入的时候。

再回到volume的snapshot中,根据上述其它场景的例子,此处的volume即对应上述的物理空间,而snapshot相当于指向虚拟空间的指针,是依赖于volume的,无法独立存在。

Backup相关

Backup与Snapshot区别

1. snapshot依赖源volume,不能独立存在;而backup不依赖vilume,即便源volume不存在了,仍可以restroe。

2. snapsot与源volume通常存放在一起,由同一个volume provider管理;backup存放在独立的备份设备中,有自己的备份方案和实现。

3. backup具有容灾功能;而snapshot则提供volume provider内便捷的回溯功能。

分析backup创建流程

以NFS为backend时:

1. 启动backup操作,mount NFS

2. 创建volume的临时快照

3. 创建存放backup的container目录

4. 对临时快照数据压缩并保存到container目录中

5. 创建保存sha256(加密)文件和metadata文件

6. 删除临时快照

以LVM为backend时:

            1. 创建volume的临时快照

            2. 创建一个设备new_lv

            3. 依据快照将数据从源卷拷贝到new_lv中

4. 删除临时快照

以ceph为backend时:

            1. 判断源卷是否为RBD卷,如果源卷为RBD卷,则使用增量备份,否则使用全量备份。

Ceph作为backend

按照cinder-volume所用的backend分两种情况介绍:一种是使用非RBD作为backend,另一种是使用RBD作为backend。

1. cinder-volume使用非RBD作为backend

这种情况下比较简单,并且仅支持全量备份。在创建备份时,首先创建一个base backup image,然后每次从源卷读入chunk_size(即backup_ceph_chunk_size,默认是128MB)大小的数据,写入到backup image,直到把整个源卷都复制完。注意,这里不支持对chunk的压缩。因为volume上的数据都会写入到创建的这个backup image上去,也就是说volume和backup是一对一的,因此也不需要metadata文件。

2. cinder-volume使用RBD作为backend

        在这种情况下,即cinder-volume和cinder-backup都是用rbd作为backend,是支持增量备份的。增量备份的实现完全依赖于ceph处理差量文件的特性,所谓ceph处理差量文件的能力,即ceph可以将某个rbd image不同时刻的状态进行比较,并且将其差量导出成文件。另外,ceph也可以将这个差量文件导入到某个image中。

差量文件的生成与导入

生成差量文件的三种方式


三种方式对应命令及简要描述:

rdb export-diff volumes/image1 diff1 image1创建时到此时的diff
rbd export-diff volumes/image1@snap1 diff2 image1创建时与snap1的diff
rbd export-diff volumes/image1-from-snap snap1 diff3

image1此时(snap2)与snap1的diff

导入差量文件的三种方式(前提,先创建一个image2,然后将diff文件导入image2):

rbd import-diff diff1 volumes/image2 image2和生成diff1时的image1相同
rbd import-diff diff2 volumes/image2 image2和创建snap1时的image1相同
rbd import-diff diff3 volumes/image2 image2和创建snap1后(创建snap2时)的image1相同

备份的实现

依据上述差量文件的生成与导入的操作特性实现备份,这里主要说明ceph增量备份的实现:

备份的恢复

diff方式的恢复

利用ceph的特性,首先找到第一次备份时创建的base image和所选备份的snapshot,利用上述第二种生成差量文件的方式生成diff文件,将diff文件导入到新的volume即完成volume恢复。

1)获取恢复备份的起点

2)如果能则进行增量恢复

这里进行增量恢复的条件如下

a. 要恢复的卷必须是rbd

b. 要恢复的卷必须没有任何内容

c. 备份卷必须存在

d. 备份卷的恢复点(快照)必须存在

e. 要恢复的卷和备份卷的源卷是不同的

3)如果不能,则进行全量恢复

非diff方式的恢复

全量恢复,每次从备份读入chunk_size的数据,写入到对应的volume中,直到复制完整个备份。没有metadata文件,也不支持解压。

cinder-backup详细介绍的更多相关文章

  1. WDCP是什么 关于WDCP的详细介绍

    WDCP是WDlinux Control Panel的简称,是一套用PHP开发的Linux服务器管理系统以及虚拟主机管理系统,,旨在易于使用Linux系统做为我们的网站服务器,以及平时对Linux服务 ...

  2. LVS详细介绍以及遇到的坑

    LVS详细介绍以及遇到的坑 一,概述 本文介绍了我搭建LVS集群的步骤,并且在使用LVS(Linux Virtual Server)过程中遇到的问题和坑, 二,LVS简单介绍 大家都知道,LVS中文意 ...

  3. cinder backup ceph的配置和使用

    Backup 是将 volume 备份到别的地方(备份设备),将来可以通过 restore 操作恢复. 初看 backup 功能好像与 snapshot 很相似,都可以保存 volume 的当前状态, ...

  4. 详细介绍Redis的几种数据结构以及使用注意事项(转)

    原文:详细介绍Redis的几种数据结构以及使用注意事项 1. Overview 1.1 资料 <The Little Redis Book>,最好的入门小册子,可以先于一切文档之前看,免费 ...

  5. kvm详细介绍

    KVM详解,太详细太深入了,经典 2016-07-18 19:56:38 分类: 虚拟化 原文地址:KVM详解,太详细太深入了,经典 作者:zzjlzx KVM 介绍(1):简介及安装 http:// ...

  6. 多图文,详细介绍mysql各个集群方案

    目录 多图文,详细介绍mysql各个集群方案 一,mysql原厂出品 二,mysql第三方优化 三,依托硬件配合 四,其它 多图文,详细介绍mysql各个集群方案 集群的好处 高可用性:故障检测及迁移 ...

  7. [No0000A7]批处理经常用到的变量及批处理>NUL详细介绍

    绝对路径是指调用绝对的程序位置的路径,例如: start C:\Windows\test.exe 相对路径是文件改变路径以后还会按照变量的路径所在位置去调用,例如: start %WINDIR%\te ...

  8. linux配置网卡IP地址命令详细介绍及一些常用网络配置命令

    linux配置网卡IP地址命令详细介绍及一些常用网络配置命令2010-- 个评论 收藏 我要投稿 Linux命令行下配置IP地址不像图形界面下那么方 便,完全需要我们手动配置,下面就给大家介绍几种配置 ...

  9. _MSC_VER详细介绍

    _MSC_VER详细介绍 转自:http://www.cnblogs.com/braver/articles/2064817.html _MSC_VER是微软的预编译控制. _MSC_VER可以分解为 ...

  10. php CGI、Fastcgi、PHP-FPM的详细介绍与之间的关系

    以下PHP CGI.Fastcgi.PHP-FPM的一些信息归纳和汇总----->详细介绍与之间的关系 一:CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的 web ...

随机推荐

  1. Keras 自定义层

    1.对于简单的定制操作,可以通过使用layers.core.Lambda层来完成.该方法的适用情况:仅对流经该层的数据做个变换,而这个变换本身没有需要学习的参数. # 切片后再分别进行embeddin ...

  2. java 多线程超详细总结——阿里大牛熬夜整理

    引 如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个 ...

  3. 诗·想——日记&断章

    日记      海子 姐姐,今夜我在德令哈,夜色笼罩 姐姐,我今夜只有戈壁 草原尽头我两手空空 悲痛时握不住一颗泪滴 姐姐,今夜我在德令哈 这是雨水中一座荒凉的城 除了那些路过的和居住的 德令哈... ...

  4. querySelector.. 方法相比 getElementsBy..

    querySelectorAll 返回的是一个 Static Node List,而 getElementsBy 系列的返回的是一个 Live Node List. 看看下面这个经典的例子 [5]: ...

  5. 每天一个linux命令(文件操作):【转载】locate命令

    locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案.其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了.在一般的 di ...

  6. daemon Thread

    1.概念 守护进程(daemon)是指在UNIX或其他多任务操作系统中在后台执行的电脑程序,并不会接受电脑用户的直接操控.此类程序会被以进程的形式初始化.守护进程程序的名称通常以字母“d”结尾:例如, ...

  7. flask第十八篇——模板【2】

    请关注公众号:自动化测试实战 上一节我们介绍了模板的基本使用方法,现在我们想一个问题,如果把index.html放到template文件夹下面的文件夹该怎么办呢?其实很容易,当文件夹结构如下图所示时: ...

  8. 洛谷P1876开灯

    题目描述 有n盏灯,一开始全是关闭的.来n个人, 第一个人把一的倍数的灯开着的关上,关上的打开. 第二个人把二的倍数的灯开着的关上,关上的打开. 第三个人把三的倍数的灯开着的关上,关上的打开. ... ...

  9. webpack css loader 使用

    备注:   接上面的项目 1. 添加css  main.css #app { text-align:center; } main.js require("./main.css"); ...

  10. webpack extract-text-webpack-plugin

    备注:  提炼上面引用的css   1. 插件配置 const path = require("path"); const extracttextplugin = require( ...