SlideShare a Scribd company logo
1 of 10
BC-EC 马琪
felix23ma@gmail.com
2015.10
Agenda
❖ Cinder架构
❖ Snapshot和backup
❖ Cinder中的snapshot和backup
❖ Code
Cinder 架构
❖ Block service(移动硬盘)
❖ Block driver
❖ LVM
❖ CEPH
❖ EBS
❖ API
volume/backup/snapshot API
Q3: Snapshot和backup有啥区别?
Snapshot和Backup
❖ 字面含义是相似的 - 对用户来说都是备份
❖ 从driver理解(只研究了lvm/ceph)
❖ 只有snapshot命令,没有backup命令
❖ LVM:lvcreate --snap -n my_snap --size 1G /dev/vg/orig_lv
❖ Ceph:rbd snap create my_pool/my_image@my_snap
❖ snapshot原理 - 很多driver使用COW方式
❖ backup怎么做(full backup)
❖ LVM (cinder create volume from snap)
1. create snap 2. create new_lv
3. dd if=/dev/snap of=/dev/new_lv
❖ Ceph
1. create snap 2. protect snap
3. clone snap to new image 4. flatten new image
Cinder中的Snapshot和Backup
❖ 特点
❖ 用法
❖ snapshot:临时备份、做实验性/破坏性操作之前
❖ backup: 永久备份、定期备份
速度 占用空间 可靠性 用途
snapshot 快 小 不可靠
创建新卷;
不可用于恢复
backup 慢 大(需对象存储) 可靠
不可创建新卷;
可用于恢复
Cinder Snapshot的实现
❖ Driver实现(snapshot create)
❖ LVM:构造命令:lvcreate --name lv_snap_name --snapshot -L source_lv_name
❖ Ceph:调用Ceph Python library rbd.py中的create_snap/protect_snap方法
❖ Code
❖ LVM
cinder/volume/drivers/lvm.py create_snapshot
cinder/brick/local_dev/lvm.py create_lv_snapshot
❖ Ceph
cinder/volume/drivers/rbd.py create_snapshot
/usr/lib/python2.7/dist-packages/rbd.py create_snap/protect_snap
戳这儿:灏哥的代码分析
Cinder Backup的实现
流程:
1. cinder/api/contrib/backup.py的create -> self.backup_api.create
2. cinder/backup/api.py的create -> cinder/backup/rpcapi.py的create_backup,发送rpc请求
到rabbitmq server
3. cinder/backup/manager.py中的create_backup方法处理rpc请求
略去细节,第3步最终的处理方法是:
backup_service = self.service.get_backup_driver(context)
self._get_driver(backend).backup_volume(context, backup,
backup_service)
Note:
❖ backup_service表示cinder-backup的对象存储的后端,如Ceph,Swift
❖ backup_volume不是由cinder-backup定义,而是定义在cinder/volume/drivers/xxx.py中
❖ 实际上是source和destination的关系:
❖ source:调用cinder-volume block driver的backup_volume方法读取block data,
如:cinder/volume/drivers/lvm.py backup_volume
❖ destination:调用cinder-backup对象存储的driver的backup方法保存block data,
如:cinder/backup/drivers/ceph.py backup
Cinder Incremental Backup
BP:https://blueprints.launchpad.net/cinder/+spec/incremental-backup
Spec:https://github.com/openstack/cinder-specs/blob/master/specs/kilo/incremental-backup.rst
❖ 完全依赖于cinder-backup对象存储driver的实现
❖ Ceph
❖ source volume为RBD,做增量备份(不考虑--incr参数);失败,做full backup
❖ 类似使用rbd export-diff/import-diff --from-snap (说明)
❖ source volume为非RBD,做full backup(不考虑--incr参数)
❖ Swift
调用cinder/backup/chunkeddriver.py中的backup
Cinder Incremental Backup (cont’d)
全量备份一般过程(切片、计算、上传):
1. 对volume data切分,每次读入chunk_size_bytes大小的数据;
2. 对读入的数据,每sha_block_size字节的数据做SHA计算,保存计算结果;
3. 将chunk_size_bytes的数据上传到对象存储上,形成一个对象;
4. 依次循环,至所有数据备份完毕
对象存储上的文件:
❖ volume data对象
❖ metadata:记录backup_name,volume_id,volume_meta等
❖ sh256file:按照顺序记录了SHA计算的结果
增量备份一般过程:
1. 获得上次备份的sh256file
2. 对volume data切分,每次读入chunk_size_bytes大小的数据;
3. 对读入的数据,每sha_block_size字节的数据做一次SHA计算,和上次备份的结果进
行比较;
4. 如果相同,则只保存SHA计算结果不上传数据,否则保存计算结果并上传数据
Thank you.

More Related Content

What's hot

pyspider 介绍 - pycon2014@北京
pyspider 介绍 - pycon2014@北京pyspider 介绍 - pycon2014@北京
pyspider 介绍 - pycon2014@北京roybinux
 
Android线程简介
Android线程简介Android线程简介
Android线程简介朋 王
 
Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Eric Xiao
 
深入浅出NodeJS
深入浅出NodeJS深入浅出NodeJS
深入浅出NodeJSsunzhenghua
 
Android开发基础
Android开发基础Android开发基础
Android开发基础ykdsg
 
Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!Fred Chien
 
Cassandra 2.1 簡介
Cassandra 2.1 簡介Cassandra 2.1 簡介
Cassandra 2.1 簡介Cloud Tu
 
NodeJS基礎教學&簡介
NodeJS基礎教學&簡介NodeJS基礎教學&簡介
NodeJS基礎教學&簡介GO LL
 
Gulp.js 自動化前端任務流程
Gulp.js 自動化前端任務流程Gulp.js 自動化前端任務流程
Gulp.js 自動化前端任務流程洧杰 廖
 
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式Will Huang
 
Npm 套件管理 & 常用開發工具介紹
Npm 套件管理 & 常用開發工具介紹Npm 套件管理 & 常用開發工具介紹
Npm 套件管理 & 常用開發工具介紹wantingj
 
2018 8 18_play_framework
2018 8 18_play_framework2018 8 18_play_framework
2018 8 18_play_frameworkLorn Jhu
 
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒Shanda innovation institute
 
Node.js 進攻桌面開發
Node.js 進攻桌面開發Node.js 進攻桌面開發
Node.js 進攻桌面開發Fred Chien
 
超。光速 網站最佳化實戰 -twMVC#8
超。光速 網站最佳化實戰 -twMVC#8超。光速 網站最佳化實戰 -twMVC#8
超。光速 網站最佳化實戰 -twMVC#8twMVC
 
Truck js 高性能移动web开发解决方案
Truck js 高性能移动web开发解决方案Truck js 高性能移动web开发解决方案
Truck js 高性能移动web开发解决方案美团技术团队
 
Koa 正在等一個人
Koa 正在等一個人Koa 正在等一個人
Koa 正在等一個人Fred Chien
 
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Joseph Chiang
 
Intro-to-SeaJS
Intro-to-SeaJSIntro-to-SeaJS
Intro-to-SeaJSlifesinger
 

What's hot (20)

pyspider 介绍 - pycon2014@北京
pyspider 介绍 - pycon2014@北京pyspider 介绍 - pycon2014@北京
pyspider 介绍 - pycon2014@北京
 
Android线程简介
Android线程简介Android线程简介
Android线程简介
 
Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出
 
深入浅出NodeJS
深入浅出NodeJS深入浅出NodeJS
深入浅出NodeJS
 
Android开发基础
Android开发基础Android开发基础
Android开发基础
 
Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!Java script 全面逆襲!使用 node.js 打造桌面環境!
Java script 全面逆襲!使用 node.js 打造桌面環境!
 
Cassandra 2.1 簡介
Cassandra 2.1 簡介Cassandra 2.1 簡介
Cassandra 2.1 簡介
 
NodeJS基礎教學&簡介
NodeJS基礎教學&簡介NodeJS基礎教學&簡介
NodeJS基礎教學&簡介
 
Gulp.js 自動化前端任務流程
Gulp.js 自動化前端任務流程Gulp.js 自動化前端任務流程
Gulp.js 自動化前端任務流程
 
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式
 
Npm 套件管理 & 常用開發工具介紹
Npm 套件管理 & 常用開發工具介紹Npm 套件管理 & 常用開發工具介紹
Npm 套件管理 & 常用開發工具介紹
 
2018 8 18_play_framework
2018 8 18_play_framework2018 8 18_play_framework
2018 8 18_play_framework
 
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒
 
Node.js 進攻桌面開發
Node.js 進攻桌面開發Node.js 進攻桌面開發
Node.js 進攻桌面開發
 
超。光速 網站最佳化實戰 -twMVC#8
超。光速 網站最佳化實戰 -twMVC#8超。光速 網站最佳化實戰 -twMVC#8
超。光速 網站最佳化實戰 -twMVC#8
 
Truck js 高性能移动web开发解决方案
Truck js 高性能移动web开发解决方案Truck js 高性能移动web开发解决方案
Truck js 高性能移动web开发解决方案
 
Koa 正在等一個人
Koa 正在等一個人Koa 正在等一個人
Koa 正在等一個人
 
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練
 
Wang Chao
Wang ChaoWang Chao
Wang Chao
 
Intro-to-SeaJS
Intro-to-SeaJSIntro-to-SeaJS
Intro-to-SeaJS
 

Similar to Cinder snapshot and backup

Sery lvs+keepalived
Sery lvs+keepalivedSery lvs+keepalived
Sery lvs+keepalivedcolderboy17
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理Jason Zheng
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理haiyuan ning
 
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)ykdsg
 
Vulkan introduction
Vulkan introductionVulkan introduction
Vulkan introductionJiahan Su
 
基于Fuel的超融合一体机
基于Fuel的超融合一体机基于Fuel的超融合一体机
基于Fuel的超融合一体机EdwardBadBoy
 
Maven初级培训
Maven初级培训Maven初级培训
Maven初级培训Cody Zhang
 
NF core-workflow
NF core-workflow NF core-workflow
NF core-workflow ChenzheLuo
 
0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)Timothy Chen
 
Linux network monitoring hands-on pratice
Linux network monitoring hands-on praticeLinux network monitoring hands-on pratice
Linux network monitoring hands-on praticeKenny (netman)
 
Pan Tilt IP Camera
Pan Tilt IP CameraPan Tilt IP Camera
Pan Tilt IP Camera艾鍗科技
 
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveTrack2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveOpenCity Community
 
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)涛 吴
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩Wen-Tien Chang
 
人人网开发一站式体验
人人网开发一站式体验人人网开发一站式体验
人人网开发一站式体验zhen chen
 
数据库与ssd的实践与探索-2011数据库技术大会
数据库与ssd的实践与探索-2011数据库技术大会数据库与ssd的实践与探索-2011数据库技术大会
数据库与ssd的实践与探索-2011数据库技术大会freezr
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践zhliji2
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails serverMichael Chen
 
使用 Load Balancer 與 Redis 部署 LAMP Server 高併發架構 - Global Azure Taiwan 20200425 ...
使用 Load Balancer 與 Redis 部署 LAMP Server 高併發架構 - Global Azure Taiwan 20200425 ...使用 Load Balancer 與 Redis 部署 LAMP Server 高併發架構 - Global Azure Taiwan 20200425 ...
使用 Load Balancer 與 Redis 部署 LAMP Server 高併發架構 - Global Azure Taiwan 20200425 ...Laird Cheng
 
【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制
【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制
【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制裝機安 Angelo
 

Similar to Cinder snapshot and backup (20)

Sery lvs+keepalived
Sery lvs+keepalivedSery lvs+keepalived
Sery lvs+keepalived
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理
 
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
 
Vulkan introduction
Vulkan introductionVulkan introduction
Vulkan introduction
 
基于Fuel的超融合一体机
基于Fuel的超融合一体机基于Fuel的超融合一体机
基于Fuel的超融合一体机
 
Maven初级培训
Maven初级培训Maven初级培训
Maven初级培训
 
NF core-workflow
NF core-workflow NF core-workflow
NF core-workflow
 
0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)
 
Linux network monitoring hands-on pratice
Linux network monitoring hands-on praticeLinux network monitoring hands-on pratice
Linux network monitoring hands-on pratice
 
Pan Tilt IP Camera
Pan Tilt IP CameraPan Tilt IP Camera
Pan Tilt IP Camera
 
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveTrack2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewave
 
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
 
人人网开发一站式体验
人人网开发一站式体验人人网开发一站式体验
人人网开发一站式体验
 
数据库与ssd的实践与探索-2011数据库技术大会
数据库与ssd的实践与探索-2011数据库技术大会数据库与ssd的实践与探索-2011数据库技术大会
数据库与ssd的实践与探索-2011数据库技术大会
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails server
 
使用 Load Balancer 與 Redis 部署 LAMP Server 高併發架構 - Global Azure Taiwan 20200425 ...
使用 Load Balancer 與 Redis 部署 LAMP Server 高併發架構 - Global Azure Taiwan 20200425 ...使用 Load Balancer 與 Redis 部署 LAMP Server 高併發架構 - Global Azure Taiwan 20200425 ...
使用 Load Balancer 與 Redis 部署 LAMP Server 高併發架構 - Global Azure Taiwan 20200425 ...
 
【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制
【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制
【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制
 

Cinder snapshot and backup

  • 2. Agenda ❖ Cinder架构 ❖ Snapshot和backup ❖ Cinder中的snapshot和backup ❖ Code
  • 3. Cinder 架构 ❖ Block service(移动硬盘) ❖ Block driver ❖ LVM ❖ CEPH ❖ EBS ❖ API volume/backup/snapshot API Q3: Snapshot和backup有啥区别?
  • 4. Snapshot和Backup ❖ 字面含义是相似的 - 对用户来说都是备份 ❖ 从driver理解(只研究了lvm/ceph) ❖ 只有snapshot命令,没有backup命令 ❖ LVM:lvcreate --snap -n my_snap --size 1G /dev/vg/orig_lv ❖ Ceph:rbd snap create my_pool/my_image@my_snap ❖ snapshot原理 - 很多driver使用COW方式 ❖ backup怎么做(full backup) ❖ LVM (cinder create volume from snap) 1. create snap 2. create new_lv 3. dd if=/dev/snap of=/dev/new_lv ❖ Ceph 1. create snap 2. protect snap 3. clone snap to new image 4. flatten new image
  • 5. Cinder中的Snapshot和Backup ❖ 特点 ❖ 用法 ❖ snapshot:临时备份、做实验性/破坏性操作之前 ❖ backup: 永久备份、定期备份 速度 占用空间 可靠性 用途 snapshot 快 小 不可靠 创建新卷; 不可用于恢复 backup 慢 大(需对象存储) 可靠 不可创建新卷; 可用于恢复
  • 6. Cinder Snapshot的实现 ❖ Driver实现(snapshot create) ❖ LVM:构造命令:lvcreate --name lv_snap_name --snapshot -L source_lv_name ❖ Ceph:调用Ceph Python library rbd.py中的create_snap/protect_snap方法 ❖ Code ❖ LVM cinder/volume/drivers/lvm.py create_snapshot cinder/brick/local_dev/lvm.py create_lv_snapshot ❖ Ceph cinder/volume/drivers/rbd.py create_snapshot /usr/lib/python2.7/dist-packages/rbd.py create_snap/protect_snap 戳这儿:灏哥的代码分析
  • 7. Cinder Backup的实现 流程: 1. cinder/api/contrib/backup.py的create -> self.backup_api.create 2. cinder/backup/api.py的create -> cinder/backup/rpcapi.py的create_backup,发送rpc请求 到rabbitmq server 3. cinder/backup/manager.py中的create_backup方法处理rpc请求 略去细节,第3步最终的处理方法是: backup_service = self.service.get_backup_driver(context) self._get_driver(backend).backup_volume(context, backup, backup_service) Note: ❖ backup_service表示cinder-backup的对象存储的后端,如Ceph,Swift ❖ backup_volume不是由cinder-backup定义,而是定义在cinder/volume/drivers/xxx.py中 ❖ 实际上是source和destination的关系: ❖ source:调用cinder-volume block driver的backup_volume方法读取block data, 如:cinder/volume/drivers/lvm.py backup_volume ❖ destination:调用cinder-backup对象存储的driver的backup方法保存block data, 如:cinder/backup/drivers/ceph.py backup
  • 8. Cinder Incremental Backup BP:https://blueprints.launchpad.net/cinder/+spec/incremental-backup Spec:https://github.com/openstack/cinder-specs/blob/master/specs/kilo/incremental-backup.rst ❖ 完全依赖于cinder-backup对象存储driver的实现 ❖ Ceph ❖ source volume为RBD,做增量备份(不考虑--incr参数);失败,做full backup ❖ 类似使用rbd export-diff/import-diff --from-snap (说明) ❖ source volume为非RBD,做full backup(不考虑--incr参数) ❖ Swift 调用cinder/backup/chunkeddriver.py中的backup
  • 9. Cinder Incremental Backup (cont’d) 全量备份一般过程(切片、计算、上传): 1. 对volume data切分,每次读入chunk_size_bytes大小的数据; 2. 对读入的数据,每sha_block_size字节的数据做SHA计算,保存计算结果; 3. 将chunk_size_bytes的数据上传到对象存储上,形成一个对象; 4. 依次循环,至所有数据备份完毕 对象存储上的文件: ❖ volume data对象 ❖ metadata:记录backup_name,volume_id,volume_meta等 ❖ sh256file:按照顺序记录了SHA计算的结果 增量备份一般过程: 1. 获得上次备份的sh256file 2. 对volume data切分,每次读入chunk_size_bytes大小的数据; 3. 对读入的数据,每sha_block_size字节的数据做一次SHA计算,和上次备份的结果进 行比较; 4. 如果相同,则只保存SHA计算结果不上传数据,否则保存计算结果并上传数据