首先介绍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. Android 开发技术选型(博客,新闻,阅读类)

    前言 最开始学习写应用的时候,发现类聚合数据这个平台可以提供一些免费数据接口,于是写了个人的第一个应用-– JuheNews,当时的知识储备稍显粗糙,虽然现在的知识也不咋滴,但是相对之前而言还是有些进 ...

  2. awk结合正则匹配

    利用awk分析data.csv中label列各取值的分布. 在终端执行head data.csv查看数据: name,business,label,label_name 沧州光松房屋拆迁有限公司,旧房 ...

  3. 【剑指offer】连续子数组的最大和,C++实现

    原创博文,转载请注明出处!本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 # 题目       输入一个整形数组,数组里有正数也有负数.数组中的一个或连续多个整数组成一个子数组.求 ...

  4. 【剑指offer】圆圈中最后剩下的数字(约瑟夫问题),C++实现

    原创博文,转载请注明出处! # 题目 # 思路 本题即为典型的约瑟夫问题,通过递推公式倒推出问题的解.原始问题是从n个人中每隔m个数踢出一个人,原始问题变成从n-1个人中每隔m个数踢出一个人--    ...

  5. js判断当前浏览类型

    var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串var isOpera = userAgent.indexOf("Opera ...

  6. Codeforces 815C. Karen and Supermarket【树形DP】

    LINK 思路 首先发现依赖关系是一个树形的结构 然后因为直接算花多少钱来统计贡献不是很好 因为数组开不下 那就可以算一个子树里面选多少个的最小代价就可以了 注意统计贡献的时候用优惠券的答案只能在1号 ...

  7. Python学习系列(九)(IO与异常处理)

    Python学习系列(九)(IO与异常处理) Python学习系列(八)( 面向对象基础) 一,存储器 1,Python提供一个标准的模块,称为pickle,使用它既可以在一个文件中存储任何Pytho ...

  8. Centos6.5 恢复误删的系统面板

    在CentOS6.5下往面板上拖应用程序时,手贱了,点了"Delete This Panel".结果就悲剧了~面板不见了! 从网上搜了一下解决方法,列举一下. 1.新建面板 如果下 ...

  9. SQL的复习与总结

    检索数据 关键字: SELECT DISTINCT LIMIT OFFSET FROM SELECT与FROM用于基础的检索,基本语法为: SELECT column_name,column_name ...

  10. python中高阶函数学习笔记

    什么是高阶函数 变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数 def fun(x, y, f): print f(x), f(y) fun ...