注意

本文档适用于 Ceph 的开发版本。

云同步模块

Mimic 版本中的新功能。

此模块将区域数据同步到远程云服务。同步是单向的;数据不会从远程区域同步回来。此模块的目标是实现将数据同步到多个云提供商。目前支持的云提供商是那些与 AWS (S3) 兼容的提供商。

需要配置远程云对象存储服务的用户凭证。由于许多云服务对每个用户可以创建的桶数量设置了限制,因此源对象和桶的映射是可配置的。可以配置不同的目标到不同的桶和桶前缀。请注意,源 ACL 将不会被保留。可以将特定源用户的权限映射到特定的目标用户。

由于 API 限制,无法保留原始对象修改时间和 ETag。云同步模块将这些信息作为元数据属性存储在目标对象上。

云同步层类型配置

简单配置

{
  "connection": {
    "access_key": <access>,
    "secret": <secret>,
    "endpoint": <endpoint>,
    "host_style": <path | virtual>,
  },
  "acls": [ { "type": <id | email | uri>,
              "source_id": <source_id>,
              "dest_id": <dest_id> } ... ],
  "target_path": <target_path>,
}

非简单配置

{
  "default": {
    "connection": {
      "access_key": <access>,
      "secret": <secret>,
      "endpoint": <endpoint>,
      "host_style" <path | virtual>,
    },
    "acls": [
      {
        "type" : <id | email | uri>,    # optional, default is id
        "source_id": <id>,
        "dest_id": <id>
      } ... ],
    "target_path": <path> # optional
  },
  "connections": [
      {
        "connection_id": <id>,
        "access_key": <access>,
        "secret": <secret>,
        "endpoint": <endpoint>,
        "host_style" <path | virtual>,  # optional
      } ... ],
  "acl_profiles": [
      {
        "acls_id": <id>, # acl mappings
        "acls": [ {
            "type": <id | email | uri>,
            "source_id": <id>,
            "dest_id": <id>
          } ... ],
      }
  ],
  "profiles": [
      {
        "source_bucket": <source>,
        "connection_id": <connection_id>,
        "acls_id": <mappings_id>,
        "target_path": <dest>,          # optional
      } ... ],
}

注意

简单配置可以与非简单配置重叠。

  • connection(容器)

    表示与远程云服务的连接。包含 connection_idaccess_keysecretendpointhost_style

  • access_key(字符串)

    将用于特定连接的远程云访问密钥。

  • secret(字符串)

    远程云服务的密钥。

  • endpoint(字符串)

    远程云服务端点的 URL。

  • host_style(path | virtual)

    访问远程云端点时使用的主机样式类型(默认值:path)。

  • acls(数组)

    包含 acl_mappings 列表。

  • acl_mapping(容器)

    每个 acl_mapping 结构包含 typesource_iddest_id。这些将定义对每个对象执行的 ACL 突变。ACL 突变允许将源用户 ID 转换为目标 ID。

  • type(id | email | uri)

    ACL 类型:id 定义用户 ID,email 通过电子邮件定义用户,uri 通过 uri 定义用户(组)。

  • source_id(字符串)

    源区域中的用户 ID。

  • dest_id(字符串)

    目标中的用户 ID。

  • target_path(字符串)

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

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

    • zonegroup:区域组名称

    • zonegroup_id:区域组 ID

    • zone:区域名称

    • zone_id:区域 ID

    • bucket:源桶名称

    • owner:源桶所有者 ID

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

  • acl_profiles(数组)

    acl_profile 数组。

  • acl_profile(容器)

    每个配置文件包含 acls_id(字符串)表示配置文件,以及 acls 数组,其中包含 acl_mappings 列表。

  • profiles(数组)

    配置文件列表。每个配置文件包含以下内容

    • source_bucket:桶名称或桶前缀(如果以 * 结尾),定义此配置文件的源桶

    • target_path:如上所述定义

    • connection_id:将用于此配置文件的连接 ID

    • acls_id:将用于此配置文件的 ACL 配置文件 ID

S3 特定配置项

目前,云同步仅适用于与 AWS S3 兼容的后端。可以使用一些配置项来调整访问这些云服务时的行为

{
  "multipart_sync_threshold": {object_size},
  "multipart_min_part_size": {part_size}
}
  • multipart_sync_threshold(整数)

    大小等于或大于此值的对象将使用分段上传同步到云端。

  • multipart_min_part_size(整数)

    使用分段上传同步对象时使用的最小分段大小。

如何配置

有关如何进行多站点配置的说明,请参阅 多站点。云同步模块需要创建一个新区域。区域层类型需要定义为 cloud

radosgw-admin zone create --rgw-zonegroup={zone-group-name} \
                            --rgw-zone={zone-name} \
                            --endpoints={http://fqdn}[,{http://fqdn}] \
                            --tier-type=cloud

然后可以使用以下命令完成层配置

radosgw-admin zone modify --rgw-zonegroup={zone-group-name} \
                            --rgw-zone={zone-name} \
                            --tier-config={key}={val}[,{key}={val}]

配置中的 key 指定需要更新的配置变量,val 指定其新值。嵌套值可以使用句点访问。例如

radosgw-admin zone modify --rgw-zonegroup={zone-group-name} \
                            --rgw-zone={zone-name} \
                            --tier-config=connection.access_key={key},connection.secret={secret}

可以通过指定要引用的特定条目并用方括号括起来来访问配置数组条目,并且可以使用 [] 添加新的数组条目。索引值 -1 引用数组中的最后一个条目。目前尚无法在同一命令中创建新条目并再次引用它。例如,为以 {prefix} 开头的桶创建新配置文件

radosgw-admin zone modify --rgw-zonegroup={zone-group-name} \
                            --rgw-zone={zone-name} \
                            --tier-config=profiles[].source_bucket={prefix}'*'
radosgw-admin zone modify --rgw-zonegroup={zone-group-name} \
                            --rgw-zone={zone-name} \
                            --tier-config=profiles[-1].connection_id={conn_id},profiles[-1].acls_id={acls_id}

可以使用 --tier-config-rm={key} 删除条目。

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入