Cinder Ceph 复制

Cinder 复制允许通过 Ceph RBD 驱动程序进行灾难恢复 (DR)。 在故障转移场景期间,Cinder Ceph RBD 驱动程序会将辅助 Ceph 镜像提升为主要镜像,并在此之后使用这些镜像。

Ceph RBD 驱动程序实现了 Cinder 复制机制。 有关更多信息,请参见:https://docs.openstack.org/cinder/victoria/contributor/replication.html

问题描述

有两种可能的 Ceph RBD 镜像模式(poolimage),并且 ceph-rbd-mirror charm 知道如何仅执行 pool 模式。 有关 RBD 镜像模式的更多信息,请参见:https://docs.ceph.net.cn/en/latest/rbd/rbd-mirroring/#enable-mirroring

由于 Ceph RBD 驱动程序将显式为每个 Ceph 镜像启用镜像,并设置所需的镜像功能(exclusive-lockjournaling),因此需要 image 镜像模式来实现 Ceph 复制机制。 当镜像模式设置为 pool 时,镜像默认情况下会在池中的所有 Ceph 镜像上启用,并且 Ceph 客户端将不会处理这部分内容。

我们希望使用 image 镜像模式(而不是 pool),用于 Cinder 复制机制,因为我们不希望盲目地镜像所有 Cinder Ceph 镜像。 镜像将通过 Cinder 卷类型进行编排。 有关更多信息,请参见:https://docs.openstack.org/cinder/ussuri/contributor/replication.html#volume-types-extra-specs

此外,Cinder 需要连接到镜像位于其中的远程集群的凭据,以便能够执行故障转移。 此信息需要进入 cinder.conf,在启用复制的后端部分下。

目前,如果 ceph-monceph-rbd-mirror 建立了关系,它会指示其来自其他关系(实现 ceph-client 接口)的客户端默认情况下对池中的所有镜像使用 exclusive-lockjournaling 功能。

我们只需要在镜像模式设置为 pool 时,默认情况下为所有镜像启用 RBD 镜像功能。 当镜像模式设置为 image 时,Ceph 客户端将显式地为每个镜像设置 RBD 镜像功能(如果需要)。

因此,如果 Ceph 客户端将镜像模式设置为 image,我们需要忽略来自 ceph-mon charm 的通告的默认 RBD 镜像功能。

提议的变更

cinder-ceph charm 应该有一个名为 rbd-mirroring-mode 的新配置选项,该选项应该作为 create-pool broker 请求的一部分传递给 ceph-mon charm。

ceph-mon charm 将转发带有新 rbd-mirroring-mode 标志的 broker 请求到 ceph-rbd-mirror charm,后者应该能够处理它并为池启用请求的镜像模式。

此外,如果 ceph-rbd-mirror charm 在 broker 请求中没有找到任何显式设置的模式,则应该使用 pool 镜像模式。 此功能应保持 charm 的向后兼容性。

在此之上,实现新的 rbd-mirroring-mode 配置选项的 Ceph 客户端(例如 cinder-ceph charm)不应在镜像模式为 image 时使用来自 ceph-mon charm 的通告的默认 RBD 镜像功能。 我们可以放心地假设这些客户端将负责显式地设置这些镜像功能。

当以上所有内容到位后,Cinder 需要能够在发生故障转移时连接到远程集群中的镜像镜像。 它将提升镜像到主要镜像并在此之后使用该镜像。

cinder-ceph charm 将通过与 ceph-mon charm 的新关系获取连接到远程 Ceph 集群的凭据。 新关系将实现现有的 ceph-client 接口,并且将被命名为 ceph-replication-device

此外,nova-compute 需要能够连接到 Cinder 卷被镜像的 Ceph 集群(否则,在故障转移后,虚拟机将无法访问 Cinder 卷)。

目前,接口 cinder-ceph-keycinder-ceph 用于授予 nova-compute 对主 Ceph 后端的访问权限。 我们需要授予 nova-compute 对辅助后端(具有复制的设备)的访问权限。

因此,我们扩展了 ceph-access 关系(实现 cinder-ceph-key 接口),并设置了一个名为 keyrings 的新关系变量。 这是一个对应于 Cinder 主后端和复制后端的 Ceph 密钥列表。 此新关系变量仅在启用 Cinder 复制时设置,否则回退到设置先前的关系数据。

备选方案

实现

负责人

  1. ionutbalutoiu (主要)

  2. oprinmarius

Gerrit Topic

对于与此规范相关的所有补丁,请使用 Gerrit 主题“cinder-ceph-replication”。

git-review -t cinder-ceph-replication

工作项

  • cinder-ceph

    • 提供了一个新的配置选项 rbd-mirror-mode(默认值为 pool),它将将其发送到 ceph-mon 作为创建池的 broker 请求的一部分(这将转发到 ceph-rbd-mirror)。

    • 使用 ceph-client 接口实现了与 ceph-mon charm 的新关系。 该关系名为 ceph-replication-device。 这将用于获取池被镜像的远程 Ceph 集群的连接信息。 此信息将进入 cinder.conf 作为启用复制的后端下的 replication_device 配置选项。

    • 扩展 ceph-access 关系。 如果启用了复制,请确保设置 Ceph 密钥列表(keyrings),用于 Cinder 主后端和复制后端。

  • nova-compute

    • 处理扩展的 ceph-access 关系。 如果关系数据中设置了多个 Ceph 密钥,请确保配置这两个密钥。

      确保处理先前的关系数据(以保持向后兼容性)。

  • ceph-mon

    • 将带有有关 RBD 镜像模式信息的 broker 请求转发到 ceph-rbd-mirror

  • ceph-rbd-mirror

    • 处理来自 ceph-mon charm 转发的 broker 请求中的新 RBD 镜像模式标志。

  • charm-helpers

    • 更新 broker 请求处理程序以考虑新的 rbd-mirroring-mode 标志。

    • 更新 CephContext 以忽略来自与 ceph-mon 关系中的通告的默认 RBD 功能,如果客户端 charm 实现新的 rbd-mirroring-mode 标志,并且该标志设置为 image

    • 将 Ceph 关系名称参数添加到 CephContext 构造函数。 当前的实现假定客户端将他们的关系命名为 ceph。 这将删除硬编码值,并使其成为默认参数值。 因此,我们将保持向后兼容性。

      这对于实现 ceph-client 接口的 charm 很有用,但关系名称不是 ceph

仓库

  • openstack/charm-cinder-ceph

  • openstack/charm-nova-compute

  • openstack/charm-ceph-mon

  • openstack/charm-ceph-rbd-mirror

  • juju/charm-helpers

文档

新的 rbd-mirroring-mode 配置选项将在 cinder-ceph charm 以及 Ceph RBD 镜像 charm 部署指南中进行记录。

安全性

  • cinder-ceph

    • 它需要连接到镜像镜像的远程 Ceph 集群的凭据,由 Ceph RBD 镜像守护程序镜像。

      这些通过容器范围的关系传递给 cinder 主 charm。 它们将进入启用复制的后端下的 cinder.conf

测试

编写或更改的代码将涵盖在单元测试中;将使用 Zaza 框架实现功能测试。

依赖项

没有新的依赖项。