Ceph RADOS Gateway (RGW) 云同步

Ceph RGW 具有一个名为 Cloud Sync 的模块,该模块允许将区域数据同步到远程云服务。同步是单向的,数据不会从远程区域同步回来。该模块的目标是启用将数据同步到多个云提供商。目前支持的云提供商是与 AWS (S3) 兼容的云提供商。

有关 Ceph Cloud Sync 的更多信息,请参见:https://docs.ceph.net.cn/en/latest/radosgw/cloud-sync-module

Cloud Sync 模块建立在多站点框架之上,该框架允许将数据和元数据转发到不同的外部层级。

有关 Ceph 同步模块的更多信息,请参见:https://docs.ceph.net.cn/en/quincy/radosgw/sync-modules

问题描述

当前的 ceph-radosgw charm 不支持 cloud-sync 模块。鉴于 cloud-sync 模块建立在多站点框架之上,我们可以利用现有的 radosgw-multisite Juju 关系接口。

通过与主 ceph-radosgw 应用程序建立新的关系来启用 cloud-sync 模块。部署类似于现有的 RGW 多站点复制步骤:https://ubuntu.com/ceph/docs/setting-up-multi-site

唯一的区别在于

  • primary-ceph-radosgwsecondary-ceph-radosgw(启用 cloud-sync 区域)都与同一个 Ceph 集群相关联。

  • 当数据从 primary-ceph-radosgw 区域复制时,secondary-ceph-radosgw 区域将写入远程 S3,而不是 Ceph 存储。 secondary-ceph-radosgw 区域将为此任务配置适当的 S3 凭据。

  • 数据同步是单向的,因此 secondary-ceph-radosgw 区域将是只读的。

有关如何配置 cloud-sync 模块的更多信息,请参见:https://docs.ceph.net.cn/en/latest/radosgw/cloud-sync-module/#how-to-configure

提议的变更

ceph-radosgw charm 中添加一个新的关系,称为 cloud-sync。新的关系将实现现有的 radosgw-multisite 关系接口。

在新的 cloud-sync 关系中,当创建辅助多站点辅助区域时,我们需要将 --tier-type=cloud 传递给 radosgw-admin zone create 命令,以便启用 cloud-sync 模块。除此之外,我们需要通过 radosgw-admin zone modify 命令的 --tier-config 参数添加 S3 目标凭据。

这些步骤记录在:https://docs.ceph.net.cn/en/latest/radosgw/cloud-sync-module

Ceph cloud-sync 模块允许在同一个区域层级配置中配置多个 S3 目标。为此,我们在层级配置中具有 profiles。每个配置文件将单个源存储桶(或通过前缀多个存储桶)映射到一个 S3 目标(一对多映射)。层级配置中的 profiles 是可选的。

一个配置文件包含以下信息

  • source_bucket,可以是存储桶名称,也可以是存储桶前缀(如果以 * 结尾),用于定义此配置文件的源存储桶。

  • target_path,一个字符串,定义如何创建目标路径。目标路径指定一个将源对象名称附加到的前缀。目标路径是可配置的,可以包含以下任何变量

    • $sid:代表同步实例 ID 的唯一字符串

    • $zonegroup:区域组名称

    • $zonegroup_id:区域组 ID

    • $zone:区域名称

    • $zone_id:区域 ID

    • $bucket:源存储桶名称

    • $owner:源存储桶所有者 ID

    例如:target_path = rgwx-${zone}-${sid}/${owner}/${bucket}

  • connection_id,用于此配置文件的连接(带有凭据)的 ID。

将添加一个新的 charm 配置,称为 cloud-sync-target-path,以配置所有配置文件的目标路径。这允许为配置的 cloud-sync 区域提供一致的目标路径。

配置文件是通过使用 s3-integrator Juju 应用程序以及新的配置选项 cloud-sync-target-path 来配置的。

对于没有配置文件的所有存储桶,必须具有默认的 S3 目标。原因是每个存储桶都需要一个同步目标,默认目标是未配置文件的任何存储桶的后备方案。将添加一个新的 charm 配置,称为 cloud-sync-default-s3-target 用于此目的。

显然,我们需要处理配置在 cloud-sync 区域中配置的 S3 目标的 S3 凭据。为此,我们将使用 s3-integrator charm(https://github.com/canonical/s3-integrator)。 ceph-radosgw charm 将与 s3-integrator charm 建立新的关系。

每个部署的 s3-integrator charm 应用程序将处理单个 S3 目标的凭据。当将多个 s3-integrator 应用程序关联到同一个 secondary-ceph-radosgw 云同步应用程序时,层级配置将使用每个 S3 目标的配置文件进行更新。

例如,以下 Juju 部署命令

#
# Assuming ceph-mon is already deployed
#
juju deploy ceph-radosgw primary-ceph-radosgw \
  --config realm=eu \
  --config zonegroup=east \
  --config zone=primary

juju relate ceph-radosgw:mon ceph-mon:radosgw

juju deploy ceph-radosgw secondary-ceph-radosgw \
  --config realm=eu \
  --config zonegroup=east \
  --config zone=primary-cloud-sync \
  --config 'cloud-sync-target-path=${bucket}' \
  --config cloud-sync-default-s3-target=minio-dev

juju relate secondary-ceph-radosgw:mon ceph-mon:radosgw

juju deploy s3-integrator minio-dev \
  --config endpoint=http://10.7.133.248:9000 \
  --config region=us-east-1 \
  --config s3-uri-style=path

juju deploy s3-integrator minio-production \
  --config endpoint=http://10.7.133.250:9000 \
  --config region=us-east-2 \
  --config s3-uri-style=path \
  --config 'bucket=production*'

juju relate ceph-radosgw-cloud-sync:s3-credentials minio-dev:s3-credentials
juju relate ceph-radosgw-cloud-sync:s3-credentials minio-production:s3-credentials

#
# After all applications' units are idle
#
juju relate ceph-radosgw-cloud-sync:cloud-sync ceph-radosgw:primary

juju run minio-dev/leader sync-s3-credentials --string-args access-key=MY_DEV_ACCESS_KEY secret-key=MY_DEV_SECRET_KEY
juju run minio-production/leader sync-s3-credentials --string-args access-key=MY_PROD_ACCESS_KEY secret-key=MY_PROD_SECRET_KEY

将渲染云同步区域中的以下层级配置

{
    // ...
    "name": "primary-cloud-sync",
    // ...
    "tier_config": {
        "connections": [
            {
                "id": "minio-dev",
                "endpoint": "http://10.7.133.248:9000",
                "region": "us-east-1",
                "host_style": "path",
                "access_key": "MY_DEV_ACCESS_KEY",
                "secret": "MY_DEV_SECRET_KEY"
            },
            {
                "id": "minio-production",
                "endpoint": "http://10.7.133.250:9000",
                "region": "us-east-2",
                "host_style": "path",
                "access_key": "MY_PROD_ACCESS_KEY",
                "secret": "MY_PROD_SECRET_KEY"
            }
        ],
        "profiles": [
            {
                "connection_id": "minio-production",
                "source_bucket": "production*",
                "target_path": "${bucket}"
            }
        ],
        "connection_id": "minio-dev",
        "target_path": "${bucket}"
    },
    // ...
}

备选方案

实现

负责人

主要负责人:ionutbalutoiu

Gerrit Topic

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

git-review -t ceph-radosgw-cloud-sync

工作项

  • 将两个新的 charm 配置添加到 ceph-radosgw

    • cloud-sync-default-s3-target,层级配置中没有配置文件的存储桶的默认 S3 目标。

    • cloud-sync-target-path,定义如何创建目标路径的字符串。目标路径指定一个将源对象名称附加到的前缀。

  • 将添加一个新的关系,称为 cloud-sync,到 ceph-radosgw charm。新的关系实现现有的 radosgw-multisite 接口。云同步辅助区域将配置为 --tier-type=cloud,并且来自与 s3-integrator charm 的关系的连接信息将被获取。

    当建立 cloud-sync 关系时,ceph-radosgw 云同步应用程序将被阻止,直到与 s3-integrator 应用程序建立关系,该应用程序提供配置的 cloud-sync-default-s3-target 的 S3 凭据。

  • 添加一个新的关系,称为 s3-credentials,实现 s3 接口,用于获取 cloud-sync 层级配置中每个 S3 目标的 S3 凭据。

    相关 s3-integrator 应用程序的名称将用作层级配置中配置的配置文件名称。从关系数据中,我们还获取每个配置文件的源存储桶。

仓库

文档

配置选项(cloud-sync-default-s3-targetcloud-sync-target-path)将在 ceph-radosgw charm 中记录。

此外,还应将其他文档添加到 charm 部署指南中,以获取新的 cloud-sync 关系。

安全性

  • ceph-radosgw

    • Ceph Cloud Sync 模块需要配置的 S3 目标的 S3 连接凭据。这些凭据从与实现 s3 关系接口的应用程序的关系中获取。

测试

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

依赖项

没有新的依赖项。