首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Ceph基于快照的备份容灾方案

Ceph基于快照的备份容灾方案

作者头像
段立功
发布2022-06-13 11:14:07
发布2022-06-13 11:14:07
2.4K0
举报
文章被收录于专栏:云计算之道云计算之道

Ceph的快照技术本来只是用来进行RBD或者Pool的回滚,但管理员可以利用快照进行Image的异地备份和容灾。本文首先介绍Ceph的快照技术的使用方法,然后提出一种初级的异地备份方案,管理员可以以此为基础,创造更自动更智能的备份容灾方案。

Snapshot(快照)

Ceph中可以支持2个级别的快照功能:Pool, RBD。这两种级别的快照基本上采用了Copy On Write机制,在进行快照创建时,不做任何复制的操作,而只是通知服务器将所有相关的磁盘区块保留起来,不被写覆盖。而当写操作和删除操作时,原本数据所在的磁盘区块不会被修改,而将修改部分写入其他可用的磁盘区块。

1)RBD

//基于当前的image状态创建快照

#rbd create <image-name>–size 1024 -p <pool-name>

//实际上librbd只是创建了该image的相关的metadata,实际上并没有向Ceph申请空间。

//基于当前的image状态创建卷

#rbd snap create<pool-name/image-name> -snap <snap-name>

//将Image恢复到快照创建时的状态

#rbd snaprollback <pool-name/image-name> -snap <snap-name>

RBD快照创建,Ceph主要做如下事情:

a) 向ceph-monitor发送请求,获取一个最新的快照序号snap_seq;

b) 把相关image的snap_name和snap_seq保存到RBD元数据中。

2)Pool

Pool可以认为是Ceph存储数据时的逻辑分区,类似于namespace。一个Ceph可以有多个Pool,每个Pool可以有一定数量的PG,PG里的对象被映射到不同的OSD上。

不同的Pool,可以设置各自的副本数,数据清洗次数,快大小,Ownership等。

//创建快照

#rados mksnap <snap_name> -p<pool_name>

#rados lssnap –p <pool_name>

//恢复Pool到快照创建时的状态

#rados rollback pool <pool_name> tosnapshot <snap_name>

值得注意的是,这两种级别的快照是相互排斥的,一个CephCluster中只能使用其中一个。因此,如果pool中曾经创建了rbd对象(即使当前删除了所有的image实例)就不能再对这个pool做快照了。反之,如果对一个pool做了快照,就不能创建rbd image的快照了。

另外,Ceph也支持对RBD进行增量快照的导入和导出,具体如下:

导出增量镜像:

a) 导出导入某个image从创建时到现在的变化

//将<pool-name/image-name>从创建时到现在的增量变化保存到<image_diff>文件

#rbd export-diff<pool-name/image-name> <image_diff>

//导入image从创建到某一时刻的diff

#rbdimport-diff <image-diff> <pool-name/image-name>

//执行该命令后,<image-name>变成<image-diff>生成时<image-name>的状态

b) 导出image从创建时到某快照时刻的变化

//将<pool-name/image-name>从创建时到创建<snap_name>时的变化导出到<image_diff>文件

#rbd export-diff <pool-name/image-name>@<snap-name><image-diff>

c) 导出image现在和某快照时刻的变化

//将<pool-name/image-name>现在的状态和<snap_name>创建时的状态的变化保存到<image-diff>文件

#rbd export-diff <pool-name/image-name> --from-snap<snap_name> <image-diff>

导入增量镜像

a) 导入从创建到某一时刻的diff

#rbd import-diff <image-diff> <pool-name/image-name>

基于快照的异地灾备方案

假设现有2个数据中心,master_dc和backup_dc, 分别各有一套ceph存储系统。

初次备份:

1) 在backup_dc创建一个img_bak,作为backup_dc的初始镜像

#rbd create <img_bak>–size 1024 -p <pool-bak>

2) 在master_dc创建image快照

#rbd snap create<pool-mas /image-mas> -snap <snap-mas>

3) 导出image和快照之间的增量

#rbd export-diff<pool-mas/image-mas>@<snap-mas> <image-snap-diff>

4) 导出的增量文件<image-snap-diff> scp或其他方式传送到backup_dc

5) 将增量快照文件导入到backup_dc的image

#rbd import-diff<image-snap-diff> <pool-bak/image-bak>

后续备份:

假设master_dc和backup_dc均存在的最近的快照为snap-1

1) 在主数据中心master_dc创建image的快照

#rbd create <pool-mas/image-mas> -snap <snap-2>

2) 导出snap-1和最新的snap-2的增量

#rbd export-diff –from-snap <snap-1><pool-mas/image-mas@snap2> image-snap1-snap2-diff

3) 把导出的增量文件传送到backup_dc

4) 把增量文件导入到backup_DC的image

#rbd import-diff <image-snap1-snap2-diff><pool-bak/image-bak>

上述只是介绍了基于快照技术的备份方案的要点,管理员可以基于上述介绍编写自己的自动备份和恢复脚本,从而实现一个更完整更智能的两中心备份方案。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云计算之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档