Ceph RBD Mirror Charm¶
问题描述¶
RBD 镜像可用于提供 Ceph 集群灾难恢复解决方案。Ceph 有一个名为 rbd-mirror 的守护进程,可以放置在主集群和备份集群上,并提供给定池中 RBD 镜像的异步复制。
rbd-mirror 可以工作在两种模式下
池(同步给定池中的所有镜像);
镜像(逐镜像同步)。
此规范的目标场景涉及操作员执行提升/降级操作,并且 DR 过程由操作员驱动,而不是在主站点发生故障时进行完全自动故障转移。
注意
池的提升/降级将由操作员驱动
注意
RADOS 对象不会被镜像,因此对于镜像使用 RADOS 对象或存储在 RADOS 对象中的 gnocchi 指标,需要不同的备份机制 - 此规范仅涵盖 RBD 镜像。
注意
RBD 镜像依赖于 RBD 的独占锁和日志记录功能的使用;这些仅在 libvirt 和 qemu 用于本机 KVM 虚拟化时,才在用户空间集成库中支持。此要求排除了在基于 LXD 的云中使用此功能,因为它们为了与 Linux 内核 RBD 驱动程序兼容而禁用了大多数 RBD 功能。
注意
最初的 RBD 镜像 charm 将仅支持镜像整个池。
提议的变更¶
高级设计¶
由于 rbd-mirror 是一个单独的软件包,并且服务本身充当 RBD 客户端,因此在单独的 principle charm (ceph-rbd-mirror) 中实现目标功能是有意义的。该 charm 将接受有关要复制的池的参数,并且能够与单独集群中的多个 ceph-mon 应用程序相关联。
该 charm 将与本地 Ceph 集群和远程 Ceph 集群相关联,通常使用跨模型关系。
将创建一个新的接口类型(‘rbd-mirror’)来支持此集成;这将由 ceph-mon charm 提供,并由新的 ceph-rbd-mirror charm 用于本地和远程集群连接。
每个 rbd-mirror 守护进程需要一个密钥才能连接到本地集群(为守护进程唯一命名),以及一个密钥才能连接到远程集群(为所有 rbd-mirror 守护进程全局命名)。Ceph-rbd-mirror 单元上还将维护多个 Ceph 配置 - ‘ceph’ 用于引用本地集群,‘remote’ 用于引用远程集群。配置文件和密钥将以这种命名方式内联前缀 - 例如
$ ls /etc/ceph
ceph.conf
ceph.client.rbd-mirror.<hostname>.keyring
remote.conf
remote.client.rbd-mirror.keyring
为了支持 RBD 镜像的弹性和扩展,可以部署多个 charm 单元;因此,此功能仅支持 Ceph Luminous 或更高版本(支持 rbd-mirror 服务的多个实例)。
部署和可扩展性考虑因素¶
从部署的角度来看,该 charm 单元应具有高带宽和低延迟的 L3 连接,才能访问和复制要尝试复制的 Ceph 池的两个集群的网络。至少,需要在运行 rbd-mirror 守护进程的节点上配置静态路由,但这超出了此规范的范围。
可以使用多个 ceph-rbd-mirror charm 单元来扩展复制流量。
备选方案¶
没有考虑替代解决方案。
依赖项¶
此功能依赖于使用支持跨模型关系的 Juju 版本。
实现¶
负责人¶
主要负责人
<tbd>
Gerrit Topic¶
对于与此规范相关的所有补丁,请使用 Gerrit 主题“rbd-mirror”。
git-review -t rbd-mirror
工作项¶
实现一个新的 reactive charm,名为 ceph-rbd-mirror。
实现以下关系:* rbd-mirror - ceph-mon(本地和跨模型)。
将“cluster”端点添加到 metadata.yaml 中的 extra-bindings 中,以允许将“cluster”端点绑定到 Ceph 复制空间。
ceph-mon 关系应通过 Ceph charms 中实现的 broker 协议检索集群详细信息和 cephx 密钥(代码重用)。
添加配置选项以指定用于复制的池名称。
如果备份集群上不存在,则自动创建池。
添加操作以提升和降级池。
启用 RBD 日志记录功能,如 rbd-mirror 文档中所述。
编写单元测试。
通过 zaza 框架编写功能测试。
仓库¶
将需要一个新的 git 存储库来用于 ceph-rbd-mirror charm
https://git.openstack.org/openstack/charm-ceph-rbd-mirror
文档¶
ceph-rbd-mirror charm 应包含一个 README,其中包含有关部署 charm 以及有关可扩展性和网络限制的说明。
安全性¶
为复制创建的用户不应具有管理员权限 - 他们只需要能够在目标集群上写入他们需要的池。这通过 ceph-mon broker 中现有的基于组的权限系统使用 mon 和 osd 权限的“rbd”配置文件来支持。
测试¶
编写或更改的代码将涵盖在单元测试中;功能测试将使用 Zaza 完成。