Cinder Ceph 复制¶
Cinder 复制允许通过 Ceph RBD 驱动程序进行灾难恢复 (DR)。 在故障转移场景期间,Cinder Ceph RBD 驱动程序会将辅助 Ceph 镜像提升为主要镜像,并在此之后使用这些镜像。
Ceph RBD 驱动程序实现了 Cinder 复制机制。 有关更多信息,请参见:https://docs.openstack.org/cinder/victoria/contributor/replication.html。
问题描述¶
有两种可能的 Ceph RBD 镜像模式(pool 和 image),并且 ceph-rbd-mirror charm 知道如何仅执行 pool 模式。 有关 RBD 镜像模式的更多信息,请参见:https://docs.ceph.net.cn/en/latest/rbd/rbd-mirroring/#enable-mirroring。
由于 Ceph RBD 驱动程序将显式为每个 Ceph 镜像启用镜像,并设置所需的镜像功能(exclusive-lock 和 journaling),因此需要 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-mon 与 ceph-rbd-mirror 建立了关系,它会指示其来自其他关系(实现 ceph-client 接口)的客户端默认情况下对池中的所有镜像使用 exclusive-lock 和 journaling 功能。
我们只需要在镜像模式设置为 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-key 由 cinder-ceph 用于授予 nova-compute 对主 Ceph 后端的访问权限。 我们需要授予 nova-compute 对辅助后端(具有复制的设备)的访问权限。
因此,我们扩展了 ceph-access 关系(实现 cinder-ceph-key 接口),并设置了一个名为 keyrings 的新关系变量。 这是一个对应于 Cinder 主后端和复制后端的 Ceph 密钥列表。 此新关系变量仅在启用 Cinder 复制时设置,否则回退到设置先前的关系数据。
备选方案¶
无
实现¶
负责人¶
ionutbalutoiu (主要)
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-moncharm 的新关系。 该关系名为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-moncharm 转发的 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 框架实现功能测试。
依赖项¶
没有新的依赖项。