Ceph 备份系统调研

来源:互联网 发布:钢琴调律软件 编辑:程序博客网 时间:2024/05/16 08:07

一,可选备份解决方案
Ceph 提供了一些特性和接口,实现数据备份。目前看,有两个解决方案:
1. rbd mirroring
即在两个独立的Ceph集群之间实现实时数据镜像。这种解决方案可以做到实时备份,但是要求Ceph的安装版本是Jewel或更新。目前我们的版本是Hammer,需要升级才能支持此特性。
2. 基于快照技术的备份。
基于Ceph RBD的快照技术,通过差量文件的方式定期将数据备份到灾备中心,当主数据中心发生故障时,从灾备中心恢复最近的备份数据并重启相应的虚拟机,最大程度降低灾难时
的数据恢复时间。这种备份可以将虚机的Image回滚到某一个快照状态,从快照状态到发生故障时的数据更新将会丢失。目前Hammer已支持快照技术。

比较这两个方案,方案1优点是实时备份,缺点是风险大,对已有集群,需要做升级操作,新版本需要深入测试。方案2优点是风险小,不需要对已有线上集群做升级操作,容易实现
,启动快照操作即可。缺点是,无法做到数据完全不丢失。
方案2分险小,易实现,优先选方案2实现灾备。

二,方案具体实现:
参考业界已有的解决案例,基于Ceph RBD的快照技术的备份,会在主数据Ceph集群之外再构造一个独立的备份Ceph数据集群。通过差量文件的方式定期将数据备份到备份集群。

技术细节:
RBD 快照原理:
基于COW实现,Ceph的RBD卷可用做多次快照,每次做完快照后再对卷进行写入时就会触发COW操作,即先拷贝出原数据对象的数据出来生成快照对象,然后对原数据对象进行写入。
做快照的操作是很快的,因为只更新了卷的元数据,添加了一些快照信息(包括该卷有哪些快照,快照id,如果这个卷是克隆出来的,那么还包括parent信息)。

基于快照的数据增量导出与导入:
Rbd export-diff命令:导出image的快照之间的增量差异。
import-diff命令:导入一个image的增量差异并应用到当前image。

备份流程:
由于第一次备份时,灾备数据中心还没有对应的base image,所以在操作上分为首次备份和第一次之后的备份。

这里写图片描述

第一次备份

  1. 在备份中心创建一个image作为base
    rbd create dest-pool/image1 -s 1
  2. 在主数据中心创建一个image的快照
    rbd snap create source-pool/image1@snap1
  3. 导出base image基于snap1的差量文件
    rbd export-diff source-pool/image1@today image1-snap1-diff
  4. 将导出的差量文件传输到备份中心,使用scp或netcat工具
  5. 将snap1差量文件导入备份集群base image
    rbd import-diff image1-snap1-diff dest-pool/image1
  6. 备份完成

第二次之后的备份

  1. 在主数据中心查找image最近一次的快照,并确认备份中心是否存在同名快照
    rbd snap ls dest-pool/image1 | grep snap1
  2. 若存在,在主数据中心创建image的新快照
    rbd snap create source-pool/image1@snap2
  3. 导出snap1到snap2的之间的差量文件,所用的snap即第1步中找到的快照snap1。每次的diff都是相对于上一次备份而言的,即实现了增量备份
    rbd export-diff –from-snap snap1 source-pool/image1@snap2 image1-snap1-snap2-diff
  4. 将导出的差量文件传输到备份中心
  5. 将差量文件导入image
    rbd import-diff image1-snap1-snap2-diff dest-pool/image1
  6. 备份完成

尚未确定的风险点:
1. 周期内两个快照之间的数据量。
2. 快照对线上的影响:性能,空间。
3. 灾备恢复时间要求

由此才能决定备份集群的选型,容量,带宽,快照频率,保存周期等。和灾备恢复时间等。

功能优化:
压缩等技术的采用

参考资料:
http://www.evil0x.com/posts/14638.html
http://docs.ceph.com/docs/master/dev/rbd-diff/
http://ceph.com/dev-notes/incremental-snapshots-with-rbd/
https://github.com/vandeir/rbd-backup

0 0
原创粉丝点击