作者: 李航(滴滴基础平台技术专家)
编辑: 小君君(才云)
Ceph RBD 是 Ceph 的 RADOS 块设备。RBD 块存储是最稳定且最常用的存储类型,它类似磁盘可以被挂载。RBD 块设备具有快照、多副本、克隆和一致性等特点,数据以条带化的方式存储在 Ceph 集群的多个 OSD 中。本文的作者是滴滴基础平台技术专家李航,在这篇文章中,他将对 3 种 Ceph RBD 灾备方案展开介绍,并从它们的实现原理、操作命令、性能优缺等方面进行全面分析,为大家在生产中选择最佳灾备方案提供建议。
通过本文你将了解到:
-
业内灾备方案
-
Snapshot
-
Ceph BackUp
-
RBD Mirroring
-
方案对比
-
总结
业内灾备方案
1. Snapshot
1.1 介绍
Cluster A&B 是独立的 Ceph 集群,通过 RBD 的 Snapshot 机制,在 Cluster A 端,针对 image 定期通过 RBD 创建 image 的 snap,然后通过 rbd export-diff
、 rbd import-diff
命令将 image 备份到 Cluster B 中。
1.2 原理
异步备份,基于 RBD 的 snapshot
机制。
1.3 命令和步骤
把 Cluster A 的 pool rbd 下面的 image testimage 异步备份到 Cluster B 的 pool rbd 下相同的 image 上:
-
在 Cluster A/B 上创建 rbd/testimage;
rbd create -p rbd --size 10240 testimage
-
在准备备份 image 前,暂停 Cluster A 端对 testimage 的 IO 操作,然后创建一个 Snapshot;
rbd snap create <snap-name>
-
导出 Cluster A 端的 testimage 数据,不指定 from-snap;
rbd export-diff <image-name> <path>
-
copy 上一步中导出的文件到 Cluster B 中,并导入数据到 testimage 中。
rbd import-diff <path> <image-name>
后续需要周期性地暂停 Cluster A 端的 testimage 的 IO,然后创建 snapshot,通过 rbd export-diff <image-name> [--from-snap <snap-name>] <path>
命令导出 incremental diff。
工程师们可以将差异数据文件 copy 到 Cluster B 上,然后通过命令 rbd import-diff <path> <image-name>
导入。通过该操作,在 rbd export-diff
时,就可以使导出的数据在 take snapshot 之后出现。
1.4 优缺点
优点:
-
当前 Ceph 版本就支持 RBD Snapshot 的功能;
-
命令简介方便,通过定制执行脚本就能实现 RBD 块设备的跨区备份。
缺点:
-
每次同步前都需要在源端 take Snapshot;
-
持续的 Snapshots 可能导致 image 的读写性能下降;
-
还要考虑后续删除不用的 Snapshots;
-
Snapshot 只能保证 IO 的一致性,并不能保证使用 RBD 块设备的系统一致性。
注:Snapshot 可以在每次操作时,暂停 image 的 IO,但是它需要利用 sync IO 数据来保证 RBD 块设备上的系统一致性,同时需要虚拟机支持 qemu-guest-agent。
1.5 参考文献
https://ceph.com/dev-notes/incremental-snapshots-with-rbd/
https://www.rapide.nl/blog/item/ceph_-_rbd_replication.html
http://wiki.libvirt.org/page/Qemu_guest_agent
http://www.zphj1987.com/2016/06/22/rbd
http://ju.outofmemory.cn/entry/243899
2. Ceph BackUp
2.1 介绍
Teralytics 是一家国外的大数据公司,Ceph BackUp 是他们开源的 Ceph 备份工具。 这个软件基于 Python 实现,可以说作者的实现逻辑是很清晰的,并且提供了配置文件的方式,且容易上手(也可以集成到自己的平台中去) 。
软件包含以下功能:
-
支持存储池和多 image 的只对;
-
支持自定义备份目标路径;
-
配置文件支持;
-
支持备份窗口设置;
-
支持压缩选项 ;
-
支持增量和全量备份的配置。
2.2 原理
异步备份,基于 RBD 的 Snapshot 机制。
2.3 命令和步骤
2.3.1 全量备份配置
上面的配置文件已写好,直接执行备份命令:
cephbackup Starting backup for pool rbd Full ceph backup Images to backup: rbd/zp Backup folder: /tmp/ Compression: True Check mode: False Taking full backup of images: zp rbd image 'zp': size 40960 MB in 10240 objects order 22 (4096 kB objects) block_name_prefix: rbd_data.25496b8b4567 format: 2 features: layering flags: Exporting image zp to /tmp/rbd/zp/zp_UTC20170119T092933.full Compress mode activated # rbd export rbd/zp /tmp/rbd/zp/zp_UTC20170119T092933.full Exporting image: 100% complete...done. # tar Scvfz /tmp/rbd/zp/zp_UTC20170119T092933.full.tar.gz /tmp/rbd/zp/zp_UTC20170119T092933.full tar: Removing leading `/' from member names
如果压缩的比较松散,且文件较为稀疏,那么用户就需要等待很长时间;如果文件压缩的效果很好,那么 dd 生成的文件就可以压缩的很小。
检查备份生成的文件:
ll /tmp/rbd/zp/zp_UTC20170119T092933.full* -rw-r--r-- 1 root root 42949672960 Jan 19 17:29 /tmp/rbd/zp/zp_UTC20170119T092933.full -rw-r--r-- 1 root root 0 Jan 19 17:29 /tmp/rbd/zp/zp_UTC20170119T092933.full.tar.gz
2.3.2 全量备份的还原
rbd import /tmp/rbd/zp/zp_UTC20170119T092933.full zpbk
检查数据,没有问题!
2.3.3 增量备份配置
写下增量配置的文件,修改备份模式选项:
[rbd] window size = 7 window unit = day destination directory = /tmp/ images = zp compress = yes ceph config = /etc/ceph/ceph.conf backup mode = incremental check mode = no
进行多次增量备份后,显示如下:
[root@lab8106 ~]#ll /tmp/rbd/zpbk/ total 146452 -rw-r--r-- 1 root root 42949672960 Jan 19 18:04 zpbk@UTC20170119T100339.full -rw-r--r-- 1 root root 66150 Jan 19 18:05 zpbk@UTC20170119T100546.diff_from_UTC20170119T100339 -rw-r--r-- 1 root root 68 Jan 19 18:05 zpbk@UTC20170119T100550.diff_from_UTC20170119T100546 -rw-r--r-- 1 root root 68 Jan 19 18:06 zpbk@UTC20170119T100606.diff_from_UTC20170119T100550 -rw-r--r-- 1 root root 68 Jan 19 18:06 zpbk@UTC20170119T100638.diff_from_UTC20170119T100606
2.3.4 增量备份的还原
分成多个步骤进行:
1、进行全量的恢复 # rbd import config@UTC20161130T170848.full dest_image 2、重新创建基础快照 # rbd snap create dest_image@UTC20161130T170848 3、还原增量的快照(多次执行) # rbd import-diff config@UTC20161130T170929.diff_from_UTC20161130T170848 dest_image
本测试用例还原步骤如下:
rbd import zpbk@UTC20170119T100339.full zpnew rbd snap create zpnew@UTC20170119T100339 rbd import-diff zpbk@UTC20170119T100546.diff_from_UTC20170119T100339 zpnew rbd import-diff zpbk@UTC20170119T100550.diff_from_UTC20170119T100546 zpnew rbd import-diff zpbk@UTC20170119T100606.diff_from_UTC20170119T100550 zpnew rbd import-diff zpbk@UTC20170119T100638.diff_from_UTC20170119T100606 zpnew
检查数据,没有问题!
3. RBD Mirroring
3.1 介绍
Ceph 新的 RBD-Mirror 功能支持配置两个 Ceph Cluster 之间的 RBD 同步。
3.2 原理
利用 Journal 日志进行异步备份,Ceph 自带 RBD-Mirror 功能 。
3.3 命令和步骤
详见:RBD-Mirror[1]
3.4 优缺点
优点:
-
Ceph 新的功能,不需要额外开发;
-
同步的粒度比较小,为一个块设备的 transaction;
-
保证了 Crash consistency;
-
可配置 pool 的备份,也可单独指定 image 备份。
缺点:
-
需要在线升级 Ceph 到 Jewel v10.2.2 以上;
-
Image Journal 日志性能影响较为严重。
方案对比
总结
结合业内各大公司的灾备方案,以及社区相关的技术文档。 个人建议用快照的方式, 简单、便捷、风险较低、易实现。 并且国内云厂商也普遍利用快照的方式实现灾备方案,而后加上自己的策略进行包装。 RBD-Mirror 功能还是比较新,虽然官方文档也对一些措施进行了优化,但是效果不佳,期待他们下个版本的优化结果。
作者简介:
李航,滴滴基础平台技术专家,主要负责分布式 Ceph 系统,具有多年底层开发经验,先后在 58 同城、汽车之家、优酷土豆集团工作。在高性能 Nginx 开发和分布式缓存 redis cluster 有着丰富的经验。个人主要关注的技术领域:高性能 Nginx 开发、分布式缓存、分布式存储。
--
参考文献:
1.https: //www.jianshu.com/p/24e1412273ad? utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin
2.https: //ceph.com/dev-notes/incremental-snapshots-with-rbd/
3.https: //www.rapide.nl/blog/item/ceph_-_rbd_replication.html
4.http: //wiki.libvirt.org/page/Qemu_guest_agent
5.http: //www.zphj1987.com/2016/06/22/rbd
6.http://ju.outofmemory.cn/entry/243899
推荐阅读:
在看点一下
写留言
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Algorithmic Beauty of Plants
Przemyslaw Prusinkiewicz、Aristid Lindenmayer / Springer / 1996-4-18 / USD 99.00
Now available in an affordable softcover edition, this classic in Springer's acclaimed Virtual Laboratory series is the first comprehensive account of the computer simulation of plant development. 150......一起来看看 《The Algorithmic Beauty of Plants》 这本书的介绍吧!