首先介绍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. 在FP与DDD的道路上越走越远

    托辞 最近一口气读了若干本FP方面的书,可人是越来越懒了,要整理个什么东西却也没有那个精力,所以简单扔几张图,算是给自己一个提醒吧. 在此期间,我用并不纯熟的Scala和Groovy练了一把手.虽然只 ...

  2. [Math]Pi(2)

    [Math]Pi(2) 接着前一篇,[Math]Pi(1),下面继续介绍Leonard Euler求Pi的第二个公式. 其实这个公式也是来源一个古老的问题,Basel problem . 证法1.麦克 ...

  3. vue 之node.js 02

    文档 铺垫 以前网页制作web1.0 如今是web2.0-->交互式操作 前端工具 grunt gulp webpack :打包机 作用:将项目中的js,css,img,font,html等进行 ...

  4. baos bais 意义

    import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOut ...

  5. Eclipse远程调试Java程序

    1. 在服务器上运行jar包时加入参数 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address= 2. 在Eclipse中操作 ...

  6. linux下环境变量PATH设置错误的补救

    本文转自: http://blog.clzg.cn/blog-614449-740527.html    之前不小心在/etc/profile中添加了错误的PATH变量,导致几乎所有的系统命令无法使用 ...

  7. ubuntu 下jdk安装配置

    下载jdk-8u71-linux-x64.tar.gz 创建jvm文件夹(/usr/lib/jvm) sudo mkdir /usr/lib/jvm 创建jvm文件夹(/usr/lib/jvm) su ...

  8. bzoj 4447 小凸解密码

    bzoj 4447 小凸解密码 先将原始状态的 \(B\) 处理出来,可以发现,若不修改,则每次指定的起始位置不同,对这个环 \(B\) 带来的影响只有 \(B_0\) 不同,即每次 \(B_0=A_ ...

  9. POJ3696 The Windy's 【网络流】

    #include<iostream> #include<vector> #include<cstring> #include<algorithm> #i ...

  10. WordCount运行详解

    1.MapReduce理论简介 1.1 MapReduce编程模型 MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然 ...