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-radosgw和secondary-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-radosgwcloud-sync-default-s3-target,层级配置中没有配置文件的存储桶的默认 S3 目标。cloud-sync-target-path,定义如何创建目标路径的字符串。目标路径指定一个将源对象名称附加到的前缀。
将添加一个新的关系,称为
cloud-sync,到ceph-radosgwcharm。新的关系实现现有的radosgw-multisite接口。云同步辅助区域将配置为--tier-type=cloud,并且来自与s3-integratorcharm 的关系的连接信息将被获取。当建立
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-target 和 cloud-sync-target-path)将在 ceph-radosgw charm 中记录。
此外,还应将其他文档添加到 charm 部署指南中,以获取新的 cloud-sync 关系。
安全性¶
ceph-radosgwCeph
Cloud Sync模块需要配置的 S3 目标的 S3 连接凭据。这些凭据从与实现s3关系接口的应用程序的关系中获取。
测试¶
编写或更改的代码将涵盖在单元测试中;将使用 Zaza 框架实现功能测试。
依赖项¶
没有新的依赖项。