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>
上述只是介绍了基于快照技术的备份方案的要点,管理员可以基于上述介绍编写自己的自动备份和恢复脚本,从而实现一个更完整更智能的两中心备份方案。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有