搜索

5.10. bucket 粒度同步策略

download PDF

现在支持以下功能:

  • greenfield 部署 :此发行版本支持新的多站点部署。要设置存储桶粒度同步复制,必须至少配置一个新的 zonegroup/zone。
  • brownfield 部署 :将 Ceph 对象网关多站点复制配置迁移到新功能的 Ceph 对象网关 bucket 粒度同步策略复制。
注意

在升级过程中,确保存储集群中的所有节点都位于同一 schema。

  • 数据流 - 方向、对称 :可以配置单向和双向/符号链接复制。
重要

在这个发行版本中,不支持以下功能:

  • 源过滤器
  • Storage class
  • 目标所有者转换
  • 用户模式

当存储桶或 zonegroup 的同步策略时,从 disabled 状态移到 enabled 状态,观察以下行为更改:

正常场景

  • zonegroup 级别:当同步策略被禁用后,当它被启用时会写入数据,无需额外的步骤。
  • bucket 级别:当 禁用 同步策略时写入的数据 在启用 策略时不会捕获。在这种情况下,可以应用以下两个临时解决方案之一:

    • 向存储桶写入新数据会重新同步旧数据。
    • 执行 bucket sync run 命令同步所有旧数据。
注意

当您要从同步策略切换到旧策略时,您需要首先运行 sync init 命令,后跟 radosgw-admin bucket sync run 命令来同步所有对象。

重新定义场景

  • zonegroup 级别: 禁用 策略时发生的任何重新划分,同步会在策略再次启用后卡住。此时,新对象也不会同步。作为临时解决方案运行 bucket sync run 命令。
  • bucket 级别:如果在策略 被禁用时 重新分片任何存储桶,则同步会在策略再次启用后卡住。此时,新对象也不会同步。作为临时解决方案运行 bucket sync run 命令。
注意

当为 zonegroup 设置为 enabled 且策略被设置为 enabledallowed bucket 时,管道配置会从 zonegroup 级别而不是 bucket 级别生效。这是一个已知问题 BZ#2240719

5.10.1. 为 zonegroups 设置双向策略

使用新的同步策略引擎创建 zonegroup 同步策略。对 zonegroup 同步策略的任何更改都需要一个周期更新和提交。

在以下示例中,创建一个组策略,并定义一个数据流,用于将数据从一个区域移动到另一个区域。配置 zonegroups 的管道,以定义可使用此数据流的存储桶。以下示例中的系统包括 3 个区域: us-east (master zone)、us-westus-west-2

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 已安装 Ceph 对象网关。

流程

  1. 创建新的同步组,并将状态设置为 允许

    示例

    [ceph: root@host01 /]# radosgw-admin sync group create --group-id=group1 --status=allowed

    注意

    在创建完全配置的 zonegroup 复制策略前,建议将 --status 设置为 allowed,以防止复制启动。

  2. 为新创建的组创建一个流策略,并将 --flow-type 设置为 symmetrical 来启用双向复制。

    示例

    [ceph: root@host01 /]# radosgw-admin sync group flow create --group-id=group1 \
                            --flow-id=flow-mirror --flow-type=symmetrical \
                            --zones=us-east,us-west

  3. 创建名为 pipe 的新管道。

    示例

    [ceph: root@host01 /]# radosgw-admin sync group pipe create --group-id=group1 \
                              --pipe-id=pipe1 --source-zones='*' \
                              --source-bucket='*' --dest-zones='*' \
                              --dest-bucket='*'

    注意

    使用 * 通配符用于区,使其包含之前流策略中设置的所有区域,而 * 用于存储桶在区域中复制所有现有存储桶。

  4. 配置存储桶同步策略后,将 --status 设置为 enabled

    示例

    [ceph: root@host01 /]# radosgw-admin sync group modify --group-id=group1 --status=enabled

  5. 更新并提交新周期。

    示例

    [ceph: root@host01 /]# radosgw-admin period update --commit

    注意

    对于 zonegroup 策略,更新和提交周期是强制的。

  6. 可选:检查特定存储桶的同步源和目的地。区域 us-eastus-west 中的所有存储桶都以双向方式复制。

    示例

    [ceph: root@host01 /]# radosgw-admin sync info -bucket buck
    {
        "sources": [
            {
                "id": "pipe1",
                "source": {
                    "zone": "us-east",
                    "bucket": "buck:115b12b3-....4409.1"
                },
                "dest": {
                    "zone": "us-west",
                    "bucket": "buck:115b12b3-....4409.1"
                },
                ...
            }
        ],
        "dests": [
            {
                "id": "pipe1",
                "source": {
                    "zone": "us-west",
                    "bucket": "buck:115b12b3-....4409.1"
                },
                "dest": {
                    "zone": "us-east",
                    "bucket": "buck:115b12b3-....4409.1"
                },
               ...
            }
        ],
        ...
    }

    以上输出中的 id 字段反映了生成该条目的管道规则。单个规则可以生成多个同步条目,如以下示例中所示。

5.10.2. 为 zonegroups 设置方向策略

使用同步策略引擎以方向方式设置 zone group 的策略。

在以下示例中,创建一个组策略,并配置数据流,以便将数据流从一个区域移动到另一个区域。另外,为 zonegroups 配置管道,以定义可使用此数据流的存储桶。以下示例中的系统包括 3 个区域: us-east (主区域)、us-west (secondary zone)和 us-west-2 (备份区域)。在这里,us-west-2us-west 的副本,但数据不会从其中复制。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 已安装 Ceph 对象网关。

流程

  1. 在 primary zone 上,创建一个新的同步组,并将状态设置为 允许

    语法

    radosgw-admin sync group create --group-id=GROUP_ID --status=allowed

    示例

    [ceph: root@host01 /]# radosgw-admin sync group create --group-id=group1 --status=allowed

    注意

    在创建完全配置的 zonegroup 复制策略前,建议将 --status 设置为 allowed,以防止复制启动。

  2. 创建流。

    语法

    radosgw-admin sync group flow create --group-id=GROUP_ID --flow-id=FLOW_ID --flow-type=directional --source-zone=SOURCE_ZONE_NAME --dest-zone=DESTINATION_ZONE_NAME

    示例

    [ceph: root@host01 /]# radosgw-admin sync group flow create --group-id=group1 --flow-id=us-west-backup --flow-type=directional --source-zone=us-west --dest-zone=us-west-2

  3. 创建管道。

    语法

    radosgw-admin sync group pipe create --group-id=GROUP_ID --pipe-id=PIPE_ID  --source-zones='SOURCE_ZONE_NAME' --dest-zones='DESTINATION_ZONE_NAME'

    示例

    [ceph: root@host01 /]# radosgw-admin sync group pipe create --group-id=group1 --pipe-id=pipe1 --source-zones='us-west' --dest-zones='us-west-2'

  4. 更新并提交新周期。

    示例

    [ceph: root@host01 /]# radosgw-admin period update --commit

    注意

    对于 zonegroup 策略,更新和提交周期是强制的。

  5. 使用两个站点的同步信息,验证 zonegroup 的源和目的地。

    语法

    radosgw-admin sync info

5.10.3. 为存储桶设置方向策略

使用同步策略引擎以说明方式设置 bucket 的策略。

在以下示例中,创建一个组策略,并配置数据流,以便将数据流从一个区域移动到另一个区域。另外,为 zonegroups 配置管道,以定义可使用此数据流的存储桶。以下示例中的系统包括 3 个区域: us-east (主区域)、us-west (secondary zone)和 us-west-2 (备份区域)。在这里,us-west-2us-west 的副本,但数据不会从其中复制。

为 zonegroups 和 bucket 设置方向策略之间的区别是您需要指定 --bucket 选项。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 已安装 Ceph 对象网关。

流程

  1. 在 primary zone 上,创建一个新的同步组,并将状态设置为 允许

    语法

    radosgw-admin sync group create --group-id=GROUP_ID --status=allowed --bucket=BUCKET_NAME

    示例

    [ceph: root@host01 /]# radosgw-admin sync group create --group-id=group1 --status=allowed --bucket=buck

    注意

    在创建完全配置的 zonegroup 复制策略前,建议将 --status 设置为 allowed,以防止复制启动。

  2. 创建流。

    语法

    radosgw-admin sync group flow create --bucket-name=BUCKET_NAME --group-id=GROUP_ID --flow-id=FLOW_ID --flow-type=directional --source-zone=SOURCE_ZONE_NAME --dest-zone=DESTINATION_ZONE_NAME

    示例

    [ceph: root@host01 /]# radosgw-admin sync group flow create --bucket-name=buck --group-id=group1 --flow-id=us-west-backup --flow-type=directional --source-zone=us-west --dest-zone=us-west-2

  3. 创建管道。

    语法

    radosgw-admin sync group pipe create --group-id=GROUP_ID --bucket-name=BUCKET_NAME --pipe-id=PIPE_ID  --source-zones='SOURCE_ZONE_NAME' --dest-zones='DESTINATION_ZONE_NAME'

    示例

    [ceph: root@host01 /]# radosgw-admin sync group pipe create --group-id=group1 --bucket-name=buck --pipe-id=pipe1 --source-zones='us-west' --dest-zones='us-west-2'

  4. 使用两个站点的同步信息,验证 zonegroup 的源和目的地。

    语法

    radosgw-admin sync info --bucket-name=BUCKET_NAME

5.10.4. 为存储桶设置双向策略

bucket 级别策略的数据流继承自 zonegroup 策略。bucket 级别策略不需要更改数据流和管道,因为 bucket 级别策略流和管道只是 zonegroup 策略中定义的流的子集。

注意
  • 存储 同级别策略可以启用还没有启用的管道,但在 zonegroup 策略中被禁止的除外。
  • bucket 级别策略不需要周期更新。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 已安装 Ceph 对象网关。
  • 已创建一个同步流。

流程

  1. 将 zonegroup 策略 --status 设置为 allowed per-bucket 复制。

    示例

    [ceph: root@host01 /]# radosgw-admin sync group modify --group-id=group1 --status=allowed

  2. 修改 zonegroup 策略后更新周期。

    示例

    [ceph: root@host01 /]# radosgw-admin period update --commit

  3. 为要同步到的存储桶创建同步组,并将 --status 设置为 enabled

    示例

    [ceph: root@host01 /]# radosgw-admin sync group create --bucket=buck \
                              --group-id=buck-default --status=enabled

  4. 为上一步中创建的组创建管道。流继承自 zonegroup 级别策略,其中数据流是对称的。

    示例

    [ceph: root@host01 /]# radosgw-admin sync group pipe create --bucket=buck \
                              --group-id=buck-default --pipe-id=pipe1 \
                              --source-zones='*' --dest-zones='*'

    注意

    使用通配符 * 为存储桶复制指定源和目标区域。

  5. 可选: 要检索有关同步策略定义的预期存储桶同步源和目标的信息,请使用 --bucket 标志运行 radosgw-admin bucket sync info 命令。

    示例

    [ceph: root@host01 /]# radosgw-admin bucket sync info --bucket buck
    realm 33157555-f387-44fc-b4b4-3f9c0b32cd66 (india)
    zonegroup 594f1f63-de6f-4e1e-90b6-105114d7ad55 (shared)
    zone ffaa5ba4-c1bd-4c17-b176-2fe34004b4c5 (primary)
    bucket :buck[ffaa5ba4-c1bd-4c17-b176-2fe34004b4c5.16191.1]
    
    source zone e0e75beb-4e28-45ff-8d48-9710de06dcd0
    bucket :buck[ffaa5ba4-c1bd-4c17-b176-2fe34004b4c5.16191.1]

  6. 可选: 要检索同步策略定义的预期同步源和目标的信息,请使用 --bucket 标志运行 radosgw-admin sync info 命令。

    示例

    [ceph: root@host01 /]# radosgw-admin sync info --bucket buck
    {
        "id": "pipe1",
        "source": {
            "zone": "secondary",
            "bucket": "buck:ffaa5ba4-c1bd-4c17-b176-2fe34004b4c5.16191.1"
        },
        "dest": {
            "zone": "primary",
            "bucket": "buck:ffaa5ba4-c1bd-4c17-b176-2fe34004b4c5.16191.1"
        },
        "params": {
            "source": {
                "filter": {
                    "tags": []
                }
            },
            "dest": {},
            "priority": 0,
            "mode": "system",
            "user": ""
        }
    },
        {
        "id": "pipe1",
        "source": {
            "zone": "primary",
            "bucket": "buck:ffaa5ba4-c1bd-4c17-b176-2fe34004b4c5.16191.1"
        },
        "dest": {
            "zone": "secondary",
            "bucket": "buck:ffaa5ba4-c1bd-4c17-b176-2fe34004b4c5.16191.1"
        },
        "params": {
            "source": {
                "filter": {
                    "tags": []
                }
            },
            "dest": {},
            "priority": 0,
            "mode": "system",
            "user": ""
        }
    }

5.10.5. 在存储桶间同步

您可以在区域间同步源和目标存储桶之间的数据,但不能在同一区中同步。请注意,内部,数据仍然从目标区的源中拉取。

通配符存储桶名称表示当前的存储桶位于 bucket 同步策略上下文中。

bucket 之间有两种同步:

  1. 从存储桶同步 - 您需要指定源存储桶。
  2. 同步到存储桶 - 您需要指定目标存储桶。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 已安装 Ceph 对象网关。

从不同的存储桶同步

  1. 创建同步组,从另一个区域的存储桶中提取数据。

    语法

    radosgw-admin sync group create  --bucket=BUCKET_NAME --group-id=GROUP_ID --status=enabled

    示例

    [ceph: root@host01 /]# radosgw-admin sync group create --bucket=buck4 --group-id=buck4-default --status=enabled

  2. 拉取镜像。

    语法

    radosgw-admin sync group pipe create --bucket-name=BUCKET_NAME --group-id=GROUP_ID --pipe-id=PIPE_ID --source-zones=SOURCE_ZONE_NAME --source-bucket=SOURCE_BUCKET_NAME --dest-zones=DESTINATION_ZONE_NAME

    示例

    [ceph: root@host01 /]# radosgw-admin sync group pipe create --bucket=buck4 \
                              --group-id=buck4-default --pipe-id=pipe1 \
                              --source-zones='*' --source-bucket=buck5 \
                              --dest-zones='*'

    在本例中,您可以看到源存储桶为 buck5

  3. 可选:从特定区域中的存储桶同步。

    示例

    [ceph: root@host01 /]# radosgw-admin sync group pipe modify --bucket=buck4 \
                              --group-id=buck4-default --pipe-id=pipe1 \
                              --source-zones=us-west --source-bucket=buck5 \
                              --dest-zones='*'

  4. 检查同步状态。

    语法

    radosgw-admin sync info --bucket-name=BUCKET_NAME

    示例

    [ceph: root@host01 /]# radosgw-admin sync info --bucket=buck4
    {
        "sources": [],
        "dests": [],
        "hints": {
            "sources": [],
            "dests": [
                "buck4:115b12b3-....14433.2"
            ]
        },
        "resolved-hints-1": {
            "sources": [],
            "dests": [
                {
                    "id": "pipe1",
                    "source": {
                        "zone": "us-west",
                        "bucket": "buck5"
                    },
                    "dest": {
                        "zone": "us-east",
                        "bucket": "buck4:115b12b3-....14433.2"
                    },
                    ...
                },
                {
                    "id": "pipe1",
                    "source": {
                        "zone": "us-west",
                        "bucket": "buck5"
                    },
                    "dest": {
                        "zone": "us-west-2",
                        "bucket": "buck4:115b12b3-....14433.2"
                    },
                    ...
                }
            ]
        },
        "resolved-hints": {
            "sources": [],
            "dests": []
        }

    请注意,有 resolved-hints,这意味着存储桶 buck5 发现了它间接的 buck4 同步,而不是其自身的策略。buck5 本身的策略为空。

同步到不同的存储桶

  1. 创建同步组。

    语法

    radosgw-admin sync group create  --bucket=BUCKET_NAME --group-id=GROUP_ID --status=enabled

    示例

    [ceph: root@host01 /]# radosgw-admin sync group create --bucket=buck6 \
                              --group-id=buck6-default --status=enabled

  2. 推送数据。

    语法

    radosgw-admin sync group pipe create --bucket-name=BUCKET_NAME --group-id=GROUP_ID --pipe-id=PIPE_ID --source-zones=SOURCE_ZONE_NAME --dest-zones=DESTINATION_ZONE_NAME --dest-bucket=DESTINATION_BUCKET_NAME

    示例

    [ceph: root@host01 /]# radosgw-admin sync group pipe create --bucket=buck6 \
                              --group-id=buck6-default --pipe-id=pipe1 \
                              --source-zones='*' --dest-zones='*' --dest-bucket=buck5

    在本例中,您可以看到目标存储桶为 buck5

  3. 可选:与特定区中的存储桶同步。

    示例

    [ceph: root@host01 /]# radosgw-admin sync group pipe modify  --bucket=buck6 \
                              --group-id=buck6-default --pipe-id=pipe1 \
                              --source-zones='*' --dest-zones='us-west' --dest-bucket=buck5

  4. 检查同步状态。

    语法

    radosgw-admin sync info --bucket-name=BUCKET_NAME

    示例

    [ceph: root@host01 /]#  radosgw-admin sync info --bucket buck5
    {
      "sources": [],
      "dests": [
        {
          "id": "pipe1",
          "source": {
            "zone": "us-west",
            "bucket": "buck6:c7887c5b-f6ff-4d5f-9736-aa5cdb4a15e8.20493.4"
          },
          "dest": {
            "zone": "us-east",
            "bucket": "buck5"
          },
          "params": {
            "source": {
              "filter": {
                "tags": []
              }
            },
            "dest": {},
            "priority": 0,
            "mode": "system",
            "user": "s3cmd"
          }
        },
      ],
      "hints": {
        "sources": [],
        "dests": [
          "buck5"
        ]
      },
      "resolved-hints-1": {
        "sources": [],
        "dests": []
      },
      "resolved-hints": {
        "sources": [],
        "dests": []
      }
    }

5.10.6. 过滤对象

使用前缀和标签过滤存储桶中的对象。您还可以在 zonegroup 级别策略上设置对象过滤器。如果使用 --bucket 选项,则在存储桶的存储桶级别上设置它。

在以下示例中,从一个区的 buck1 bucket 同步到另一个区域中的 buck1 存储桶,带有以 foo/ 前缀的对象。同样,您可以过滤具有 color=blue 等标签的对象。前缀和标签可以合并,其中对象需要同时同步。priority 参数也可以传递,它用于确定是否有多个匹配的不同规则。此配置决定了要使用的规则。

注意
  1. 如果同步策略中的标签有多个标签,同时同步对象,它会同步与至少一个标签匹配的对象,键值对。对象可能与所有标签集不匹配。
  2. 如果设置了 prefix 和 tag,则要将对象同步到另一个区域,对象必须具有前缀,任何一个标签应匹配。只有这样,它会相互同步。

先决条件

  • 至少两个正在运行的 Red Hat Ceph Storage 集群。
  • 已安装 Ceph 对象网关。
  • bucket 已创建。

流程

  1. 创建新的同步组。如果要在存储桶级别创建,请使用 --bucket 选项。

    语法

    radosgw-admin sync group create --bucket=BUCKET_NAME --group-id=GROUP_ID --status=enabled

    示例

    [ceph: root@host01 /]# radosgw-admin sync group create --bucket=buck1 --group-id=buck8-default --status=enabled

  2. 对象与标签匹配的 bucket 之间的同步。流继承自 zonegroup 级别策略,其中数据流是对称的。

    语法

    radosgw-admin sync group pipe create --bucket=BUCKET_NAME --group-id=GROUP_ID --pipe-id=PIPE_ID --tags-add=KEY1=VALUE1,KEY2=VALUE2 --source-zones='ZONE_NAME1','ZONE_NAME2' --dest-zones='ZONE_NAME1','ZONE_NAME2'

    示例

    [ceph: root@host01 /]# radosgw-admin sync group pipe create --bucket=buck1 \
                              --group-id=buck1-default --pipe-id=pipe-tags \
                              --tags-add=color=blue,color=red --source-zones='*' \
                              --dest-zones='*'

  3. 在对象与前缀匹配的 bucket 之间进行同步。流继承自 zonegroup 级别策略,其中数据流是对称的。

    语法

    radosgw-admin sync group pipe create --bucket=BUCKET_NAME --group-id=GROUP_ID --pipe-id=PIPE_ID --prefix=PREFIX --source-zones='ZONE_NAME1','ZONE_NAME2' --dest-zones='ZONE_NAME1','ZONE_NAME2'

    示例

    [ceph: root@host01 /]# radosgw-admin sync group pipe create --bucket=buck1 \
                              --group-id=buck1-default --pipe-id=pipe-prefix \
                              --prefix=foo/ --source-zones='*' --dest-zones='*' \

  4. 检查更新的同步。

    语法

    radosgw-admin sync info --bucket=BUCKET_NAME

    示例

    [ceph: root@host01 /]# radosgw-admin sync info --bucket=buck1

    注意

    在示例中,只有两个不同的目的地,没有源反映,每个源进行配置。当同步过程发生时,它会为其同步的每个对象选择相关规则。

5.10.7. 禁用存储桶之间的策略

您可以禁用存储桶之间的策略,以及与 禁止 或允许 的状态同步信息。

有关可用于 zonegroup 和 bucket 级别同步策略的不同组合,请参阅多站点同步策略 状态

在某些情况下,若要中断两个存储桶之间的复制,您可以将存储桶的组策略设置为 禁止。如果任何存储桶没有发生同步,您也可以在 zonegroup 级别禁用策略。

注意

您还可以使用 radosgw-admin sync group create 命令在禁用状态下创建一个同步策略,并具有 禁止 状态。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 已安装 Ceph 对象网关。

流程

  1. 运行 sync group modify 命令,将允许 的状态更改为 禁止

    示例

    [ceph: root@host01 /]# radosgw-admin sync group modify --group-id  buck-default --status forbidden --bucket buck
    {
        "groups": [
            {
                "id": "buck-default",
                "data_flow": {},
                "pipes": [
                    {
                        "id": "pipe1",
                        "source": {
                            "bucket": "*",
                            "zones": [
                                "*"
                            ]
                        },
                        "dest": {
                            "bucket": "*",
                            "zones": [
                                "*"
                            ]
                        },
                        "params": {
                            "source": {
                                "filter": {
                                    "tags": []
                                }
                            },
                            "dest": {},
                            "priority": 0,
                            "mode": "system",
                        }
                    }
                ],
                "status": "forbidden"
            }
        ]
    }

    在本例中,存储桶 buck 的复制在区域 us-eastus-west 之间中断。

    注意

    不需要在周期内更新和提交,因为这是存储桶同步策略。

  2. 可选:运行 sync info 命令检查 存储桶 buck 的同步状态。

    示例

    [ceph: root@host01 /]# radosgw-admin sync info --bucket buck
    {
        "sources": [],
        "dests": [],
        "hints": {
            "sources": [],
            "dests": []
        },
        "resolved-hints-1": {
            "sources": [],
            "dests": []
        },
        "resolved-hints": {
            "sources": [],
            "dests": []
        }
    }

    注意

    因为复制中断,所以没有源和目标目标。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.