1.说明介绍
继上次分享的《分布式存储系统 Ceph 架构及使用场景解析》 和 《分布式存储Ceph之PG状态详解》 ,这次分享《分布式存储Ceph 块存储灾备方案》。
1.1 基本原理
RBD Mirror原理其实和MySQL的主从同步原理非常类似,前者基于journaling,后者基于binlog,简单地说就是利用日志进行回放(replay):通过在存储系统中增加Mirror组件,采用异步复制的方式,实现异地备份。(此处的journal是指Ceph RBD的journal,而不是OSD的journal)
该能力利用了 RBD image 的日志特性,以确保集群间的副本崩溃一致性。镜像功能需要在同伴集群( peer clusters )中的每一个对应的 pool 上进行配置,可设定自动备份某个存储池内的所有 images 或仅备份 images 的一个特定子集。 rbd-mirror 守护进程负责从远端集群拉取 image 的更新,并写入本地集群的对应 image 中。
当RBD Journal功能打开后,所有的数据更新请求会先写入RBD Journal,然后后台线程再把数据从Journal区域刷新到对应的image区域。RBD journal提供了比较完整的日志记录、读取、变更通知以及日志回收和空间释放等功能,可以认为是一个分布式的日志系统。
1.2 工作流程
1、当接收到一个写入请求后,I/O会先写入主集群的Image Journal
2、Journal写入成功后,通知客户端
3、客户端得到响应后,开始写入image
3、备份集群的mirror进程发现主集群的Journal有更新后,从主集群的Journal读取数据,写入备份集群(和上面序号一样,是因为这两个过程同时发生)
4、备份集群写入成功后,会更新主集群Journal中的元数据,表示该I/O的Journal已经同步完成
5、主集群会定期检查,删除已经写入备份集群的Journal数据。
以上就是一个rbd-mirror工作周期内的流程,在现有的Jewel版本中30s为一次工作周期,暂时不能改变这个周期时间。
1.3 优点
1、当副本在异地的情况下,减少了单个集群不同节点间的数据写入延时;
2、减少本地集群或异地集群由于意外断电导致的数据丢失。
1.4 单向备份与双向备份
双向备份:两个集群之间互相同步,两个集群都要运行rbd-mirror进程。
单向备份:分为主集群和从集群,只在从集群运行rbd-mirror进程,主集群的修改会自动同步到从集群。
1.5 安装须知
- RBD 镜像功能需要 Ceph Jewel 或更新的发行版本。
- 目前Jewel版本只支持一对一,不支持一对多。
- 两个集群 (local和remote) 需要能够互通。
- RBD需要开启journal特性, 启动后会记录image的事件。
2. mirroring 模式
mirroring是基于存储池进行的peer,ceph支持两种模式的镜像,根据镜像来划分有:
存储池模式
- 一个存储池内的所有镜像都会进行备份
镜像模式
- 只有指定的镜像才会进行备份
2.1 存储池模式
2.1.1 创建存储池
创建一个用于测试的存储池:
#local集群ceph osd pool create test_pool 100 100 replicated --cluster=localpool 'test_pool' created #remote集群ceph osd pool create test_pool 100 100 replicated