cinder-backup详细介绍
首先介绍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详细介绍的更多相关文章
- WDCP是什么 关于WDCP的详细介绍
WDCP是WDlinux Control Panel的简称,是一套用PHP开发的Linux服务器管理系统以及虚拟主机管理系统,,旨在易于使用Linux系统做为我们的网站服务器,以及平时对Linux服务 ...
- LVS详细介绍以及遇到的坑
LVS详细介绍以及遇到的坑 一,概述 本文介绍了我搭建LVS集群的步骤,并且在使用LVS(Linux Virtual Server)过程中遇到的问题和坑, 二,LVS简单介绍 大家都知道,LVS中文意 ...
- cinder backup ceph的配置和使用
Backup 是将 volume 备份到别的地方(备份设备),将来可以通过 restore 操作恢复. 初看 backup 功能好像与 snapshot 很相似,都可以保存 volume 的当前状态, ...
- 详细介绍Redis的几种数据结构以及使用注意事项(转)
原文:详细介绍Redis的几种数据结构以及使用注意事项 1. Overview 1.1 资料 <The Little Redis Book>,最好的入门小册子,可以先于一切文档之前看,免费 ...
- kvm详细介绍
KVM详解,太详细太深入了,经典 2016-07-18 19:56:38 分类: 虚拟化 原文地址:KVM详解,太详细太深入了,经典 作者:zzjlzx KVM 介绍(1):简介及安装 http:// ...
- 多图文,详细介绍mysql各个集群方案
目录 多图文,详细介绍mysql各个集群方案 一,mysql原厂出品 二,mysql第三方优化 三,依托硬件配合 四,其它 多图文,详细介绍mysql各个集群方案 集群的好处 高可用性:故障检测及迁移 ...
- [No0000A7]批处理经常用到的变量及批处理>NUL详细介绍
绝对路径是指调用绝对的程序位置的路径,例如: start C:\Windows\test.exe 相对路径是文件改变路径以后还会按照变量的路径所在位置去调用,例如: start %WINDIR%\te ...
- linux配置网卡IP地址命令详细介绍及一些常用网络配置命令
linux配置网卡IP地址命令详细介绍及一些常用网络配置命令2010-- 个评论 收藏 我要投稿 Linux命令行下配置IP地址不像图形界面下那么方 便,完全需要我们手动配置,下面就给大家介绍几种配置 ...
- _MSC_VER详细介绍
_MSC_VER详细介绍 转自:http://www.cnblogs.com/braver/articles/2064817.html _MSC_VER是微软的预编译控制. _MSC_VER可以分解为 ...
- php CGI、Fastcgi、PHP-FPM的详细介绍与之间的关系
以下PHP CGI.Fastcgi.PHP-FPM的一些信息归纳和汇总----->详细介绍与之间的关系 一:CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的 web ...
随机推荐
- flowable ContentEngine和ContentEngineConfiguration的关系
一.CommandExecutor ContentEngineConfiguration继承自 AbstractEngineConfiguration. 在 AbstractEngineConfigu ...
- D. Closest Equals(线段树)
题目链接: D. Closest Equals time limit per test 3 seconds memory limit per test 256 megabytes input stan ...
- Android学习问题记录之java.lang.UnsatisfiedLinkError
1.问题描述 Android Studio引入第三方类库时,出现错误java.lang.UnsatisfiedLinkError: 11-09 14:58:05.500 13280-13280/cn. ...
- php开发中一些前端知识杂总
推荐几个jqyuey插件的好地方 http://jqueryui.com/ http://www.jq22.com/ 背景: 服务端采用ci3.0框架,twig作为模板嵌套. twig模板手册: ht ...
- 深入理解java虚拟机-第13章-线程安全与锁优化
第十三章 线程安全与锁优化 线程安全 java语言中的线程安全 1 不可变.Immutable 的对象一定是线程安全的 2 绝对线程安全 一个类要达到不管运行时环境如何,调用者都不需要额外的同步措施, ...
- hive表数据导出到csv乱码原因及解决方案
转载自http://blog.csdn.net/lgdlxc/article/details/42126225 Hive表中的数据使用hive - e"select * from table ...
- SQL之 UNION ALL 和UNION
有时候复杂的逻辑处理可以交给SQL来处理,自认为是比java处理要快点. 举个例子:如何统计每个品牌的的偏好用户数? 当时我做的处理是在java中处理这些品牌,若是品牌相同,就加一,但是这种方法很慢, ...
- ORACLE联机日志文件丢失或损坏的处理方法(转)
经验总结: 联机日志分为当前联机日志和非当前联机日志,非当前联机日志的损坏是比较简单的,一般通过clear命令就可以解决问题. 损坏非当前联机日志:1.启动数据库,遇到ORA-00312 or ORA ...
- 理解加密算法——创建CA机构,签发证书并开始TLS通信
1 不安全的TCP通信 普通的TCP通信数据是明文传输的,所以存在数据泄露和被篡改的风险,我们可以写一段测试代码试验一下,NODE.JS代码: TCP Server: const net=requir ...
- linux 定时任务 Crond Crontab
定时任务http://www.cnblogs.com/chensiqiqi/p/6367890.html http://www.cnblogs.com/chensiqiqi/p/6389611.htm ...