runsisi's

technical notes

rbd-mirror 使用方法

2018-12-28 runsisi#ceph#rbd

远程复制是一种远距离的卷复制技术,用于将数据从一个站点的源卷同步到另一个站点的镜像卷,它通常也被称为远程镜像,后文为方便表述将该技术统一称为远程镜像。

在远程镜像环境中,运行生产应用程序的站点可以称为生产站点、本地站点或主站点,存储镜像数据的站点可以称为恢复站点、备份站点、远程站点或从站点,根据上下文后文可能会存在名词混用的情况。

与通常所理解的远程备份不同,远程镜像是一个持续的过程,即所有在源卷上的写操作在镜像卷上都会得到相应的修改,源卷与镜像卷是 1:1 的关系,而在远程备份中,会根据备份策略间或的在远程站点创建源卷在某个时刻的副本,根据备份策略,该副本卷可能被覆盖写入或者同时存在多个副本卷对应源卷不同时刻的副本,即源卷与副本卷是 1:N的关系。

远程镜像根据客户端对源卷的写操作是否需要镜像卷的写入同步完成而分为同步和异步两种镜像方式。同步镜像要求镜像卷完成与源卷相同的修改才向客户端应答(类似于 RADOS 层的数据写操作强一致性设计)。异步镜像对镜像卷的修改相比对源卷的写操作则可以有一定的滞后,即写源卷完成即可向客户端应答。

当生成站点由于容灾恢复或负载迁移等需要进行主从切换时,负责数据存储的源卷和镜像卷的角色也需要支持相应的切换。对于同步镜像而言,由于在本地站点和远程站点同时拥有一份相同的生产数据,因此其在数据容灾恢复时能实现 RPO(Recovery Point Objective)为 0,即无数据丢失。而对于异步镜像而言,则由于远程站点的数据相对生产站点的数据可能存在一定的滞后,其在数据容灾恢复时可能会存在一定的数据丢失的风险。

一致性组(consistency group)是逻辑上的一组块存储卷的集合,用于支持多个卷作为一个整体同时进行快照或镜像而保持应用数据的一致性。典型的如某些大型数据库会同时接管多个底层存储卷,记录在多个卷上的数据库事务具有严格的先后顺序,如果在快照或镜像时不保持相同的次序,则在快照回滚或镜像主从切换时可能会出现数据库事务丢失等严重的数据一致性问题。

当前 Ceph 通过 RBD mirroring 功能实现集群间的 RBD 卷(image)异步镜像,其基本原理如下:

  1. 卷要支持镜像功能需要使能 journaling 特性;
  2. 卷使能 journaling 特性之后,卷的状态有主(primary)、从(non-primary)之分;
  3. 主卷通过 rbd 命令行或 librbd 接口创建,且只有主卷能够接收客户端的写入请求,而从卷通常由 rbd-mirror 守护进程创建并以增量的方式与主卷进行数据同步;
  4. 卷使能 journaling 特性之后只是说该卷具有了支持镜像的能力,但要能够被 rbd-mirror 发现并同步需要显式的开启卷的镜像功能,而卷镜像功能的开启依赖于其所属存储池的镜像模式(mirror mode);
  5. 存储池一共有三种镜像模式:pool/image/disabled,这三种模式的区别体现在对存储池下卷镜像功能的控制上;
  6. 默认情况下所有的存储池都处于 disabled 模式下,此时所有卷都会禁用镜像功能;
  7. 当存储池处于 pool 模式时,所有使能了 journaling 特性的卷都会开启镜像功能;
  8. 当存储池处于 image 模式时,可以独立开启或禁用某个卷的镜像功能;
  9. 当卷开启镜像功能之后,可以通过 rbd 命令行或者 librbd 接口切换卷的主、从状态(promote/demote);
  10. rbd-mirror 作为 Ceph 集群的客户端,处于两个集群之间,它从远程集群扫描主卷,并在本地集群创建对应的从卷或同步数据至从卷,如下图所示:

mirror

  1. rbd-mirror 的配置包括两部分,一是进程启动所需的命令行选项,二是为本地集群的存储池注册需要同步的远程集群;
  2. 命令行选项最重要的是通过 --cluster--conf指定其所属的本地集群,如果不指定,则使用默认集群 ceph;
  3. 注册远程集群以存储池为粒度,可以为本地集群的每个存储池指定不同的远程集群进行同步,rbd-mirror 将自动扫描与本地集群存储池同名的远程集群存储池,并将开启了镜像功能的主卷同步到本地集群的存储池;

rbd-mirror基本配置流程如下:

  1. 配置远程集群存储池的镜像模式
  2. 配置本地集群存储池的镜像模式
  3. 为本地集群的存储池注册远端集群
  4. 拷贝远程集群及本地集群的配置文件到 rbd-mirror 所在的机器
  5. 在命令行上启动 rbd-mirror 进程或启动 ceph-rbd-mirror 服务

具体操作步骤可参考:rbd-mirror的新功能