管理数据管理存储桶

存储桶复制

配置、验证和监控已启用版本控制的 RustFS 存储桶之间的异步复制。

RustFS 存储桶复制会将选定的对象版本从源存储桶复制到目标存储桶。使用它可维护存储桶数据的远程副本、在部署之间分发对象,或为恢复工作流准备辅助副本。

概述

存储桶复制包含两层配置:

  1. 远程目标存储目标端点、存储桶、凭证和生成的目标 ARN。
  2. S3 复制配置将规则附加到源存储桶,并引用该目标 ARN。

源存储桶和目标存储桶都必须启用版本控制。注册远程目标时,RustFS 会验证目标连接和目标存储桶的版本控制。如果已启用规则引用未知或过期的目标 ARN,RustFS 会拒绝该复制配置。

复制默认以异步方式进行。源端上传成功表示 RustFS 已接受源对象,并不表示目标副本已经完成。

规则可以按前缀或对象标签选择对象,并控制以下行为:

规则设置行为
Status启用或禁用规则。
Filter按键前缀、对象标签或两者限制复制。
ExistingObjectReplication设置为 Enabled 时,包括规则创建前已存在的对象。
DeleteMarkerReplication设置为 Enabled 时,复制删除标记。
DeleteReplication设置为 Enabled 时,复制特定对象版本的删除操作。
Destination通过 ARN 标识已注册的远程目标。

存储桶复制是单向的。如果两个存储桶都必须接受写入并相互复制,请在相反方向配置单独的目标和规则。不要将存储桶复制与站点复制混淆,后者会同步更广泛的站点配置和身份数据。

配置

要求

  • 一个源 RustFS 部署和一个可访问的 S3 兼容目标部署。
  • 已启用版本控制的源存储桶和目标存储桶。
  • 专用目标凭证,有权检查目标存储桶的版本控制,并写入复制的对象版本和删除标记。
  • 有权管理远程目标和复制配置的源端管理员。
  • 所有可能执行复制任务的源节点都能通过网络访问目标端点。
  • 管理主机上已安装 RustFS rc 客户端。

为每个部署配置一个 rc 别名。请使用专用凭证,并在运行命令前替换示例端点:

rc alias set source https://source.example.com:9000 \
	<your-access-key> <your-secret-key> \
	--region us-east-1 --bucket-lookup path

rc alias set target https://target.example.com:9000 \
	<target-access-key> <target-secret-key> \
	--region us-east-1 --bucket-lookup path

rc alias list

源部署注册远程目标时会使用目标别名凭证。rc alias list 会显示端点,但不会输出秘密密钥。

保护目标凭证

RustFS 会将目标凭证作为源存储桶远程目标配置的一部分进行存储。请使用访问范围仅限目标存储桶的专用凭证,不要重复使用根凭证。

权限

源端管理使用以下策略操作权限:

操作所需操作权限
注册、更新或删除远程目标admin:SetBucketTarget
列出远程目标admin:GetBucketTarget
读取复制指标admin:GetReplicationMetrics
应用或删除复制配置s3:PutReplicationConfiguration
读取复制配置s3:GetReplicationConfiguration

目标凭证必须通过 RustFS 目标验证,该验证会检查存储桶访问、版本控制、复制对象写入、复制删除标记和对象版本删除。源存储桶启用对象锁定时,目标必须具有兼容的对象锁定支持。

创建存储桶并启用版本控制

创建源存储桶:

rc bucket create source/my-bucket

创建目标存储桶:

rc bucket create target/my-bucket-replica

为两个存储桶启用版本控制:

rc bucket version enable source/my-bucket
rc bucket version enable target/my-bucket-replica

rc bucket version info source/my-bucket
rc bucket version info target/my-bucket-replica

配置复制期间,不要暂停源存储桶的版本控制。

使用

在控制台中配置复制

RustFS 控制台将远程目标注册和复制规则配置合并在一个表单中。

  1. 登录源部署的控制台。
  2. 打开 Buckets,找到源存储桶并选择 Settings
  3. Data Protection 下,如果 Versioning 已禁用,请将其启用。
  4. Automation 下,选择 Open Bucket Replication
  5. 选择 Add Replication Rule
  6. 配置目标和规则:
控制台字段
Priority规则评估优先级。初始值为 1
Mode选择 AsynchronousSynchronous。默认选择异步模式。
Endpoint目标 S3 API 地址,格式为 host:port,不含 URL 方案。
Bucket已启用版本控制的目标存储桶名称。
Access KeySecret Key有权复制到目标存储桶的专用凭证。
Region目标区域。初始值为 us-east-1
Storage Class在目标端应用的存储类。初始值为 STANDARD
Prefix用于限制匹配对象的可选键前缀。
Tags可选的对象标签名称和值筛选条件。选择 Add Tag 可添加更多筛选条件。
Use TLS为目标连接启用 HTTPS。
Replicate Existing Objects包括规则创建前的对象。默认启用。
Replicate Delete Markers将删除标记复制到目标。默认启用。
Replicate Delete复制特定对象版本的删除操作。默认启用。
Health Check Interval目标健康检查间隔,以秒为单位。初始值为 60
Bandwidth Limit每个目标的传输限制,可选择 KiB/s、MiB/s 或 GiB/s。
  1. 选择 Save。RustFS 会先验证源存储桶、目标连接、目标凭证和目标存储桶的版本控制,再接受该规则。
  2. 返回 Bucket Replication 查看规则,或选择 Refresh 更新显示的状态。

在两个部署上启用版本控制

保存规则前,源存储桶和目标存储桶都必须启用版本控制。需要时,请登录目标部署的控制台,并在 BucketsSettingsData Protection 下启用版本控制。

如需可重复的自动化或配置管理,请使用下面的 rc 工作流。

使用 rc 添加复制规则

创建异步规则,复制新对象和现有对象,并传播删除标记和显式版本删除:

rc bucket replication add source/my-bucket \
	--remote-bucket target/my-bucket-replica \
	--id replicate-all \
	--priority 1 \
	--replicate delete,delete-marker,existing-objects

rc 会注册目标、获取生成的 ARN,并在一次操作中应用复制规则。不需要某种行为时,请省略相应的 --replicate 标志。仅当写入必须等待同步复制时添加 --sync

要将复制限制到某个前缀,请添加 --prefix

rc bucket replication add source/my-bucket \
	--remote-bucket target/my-bucket-replica \
	--id replicate-documents \
	--priority 2 \
	--prefix documents/ \
	--replicate delete-marker,existing-objects

不匹配任何已启用规则的对象只会保留在源存储桶中。使用 --bandwidth 设置每秒字节数限制,使用 --healthcheck-seconds 更改目标健康检查间隔,使用 --storage-class 覆盖目标存储类。

列出和更新规则

列出活动规则:

rc bucket replication list source/my-bucket
rc bucket replication list source/my-bucket --json

按 ID 更新规则。只有提供的设置会被更改:

rc bucket replication update source/my-bucket \
	--id replicate-all \
	--priority 2 \
	--bandwidth 104857600 \
	--healthcheck-seconds 60

使用 --status Enabled|Disabled 启用或禁用规则,使用 --sync true|false 更改复制模式。

导出和导入配置

导出完整复制配置以供检查或备份:

rc bucket replication export source/my-bucket --json > replication.json

导出内容包括远程目标元数据和目标 Access Key,但不包括 Secret Key。请将该文件作为敏感配置加以保护。

导入之前导出的配置:

rc bucket replication import source/my-bucket replication.json

删除复制配置

rc bucket replication remove source/my-bucket --id replicate-all

# Remove every replication rule from the bucket.
rc bucket replication remove source/my-bucket --all

RustFS 还会删除被已删除配置引用的复制远程目标。它不会删除已复制到目标存储桶的对象或版本。请根据目标存储桶的生命周期和保留要求删除或保留这些对象。

rc 0.1.29 删除响应

RustFS 删除复制配置及其目标后,rc 0.1.29 在尝试再次清理目标时可能会报告 Remote target not found。运行 rc bucket replication list source/my-bucket --json;空的 rules 数组可确认配置已删除。

验证

检查目标就绪状态

创建规则前,rc bucket replication add 会检查源端访问、目标连接、目标凭证和存储桶版本控制。确认生成的目标和规则设置:

rc bucket replication list source/my-bucket --json

复制对象

将测试对象上传到源端:

printf 'hello from RustFS replication\n' > /tmp/hello.txt
rc object copy /tmp/hello.txt source/my-bucket/hello.txt

检查源对象:

rc object stat source/my-bucket/hello.txt --json

复制默认以异步方式进行,因此目标对象可能不会立即出现。重复运行以下命令,直到成功:

rc object stat target/my-bucket-replica/hello.txt --json
rc object show target/my-bucket-replica/hello.txt

比较源对象和目标对象的 etagsize_bytes 值,然后确认 object show 返回预期内容。

要验证删除标记复制,请删除源对象并列出两个存储桶上的版本:

rc object remove source/my-bucket/hello.txt --force

rc bucket version list source/my-bucket/hello.txt --json
rc bucket version list target/my-bucket-replica/hello.txt --json

删除标记复制成功后,两个存储桶的最新条目均显示 is_delete_marker: true

检查复制指标

rc bucket replication status source/my-bucket
rc bucket replication status source/my-bucket --json

该命令返回源节点当前的内存中复制统计信息。即使对象已到达目标端,指标仍可能为零,因此请将其与目标对象和版本检查结合使用,不要将其作为唯一验证信号。

排查故障

现象检查项
bucket versioning must be enabled在源存储桶上启用版本控制。
目标注册报告 not versioned在目标存储桶上启用版本控制。
replication target configuration not found重新检查目标别名、凭证和目标存储桶,然后再次运行 replication add
规则报告目标已过期刷新规则列表并重试 replication add;如果问题仍然存在,请删除失败的配置并重新创建目标。
目标对象未出现检查目标可访问性、凭证、目标配额和 rc bucket replication status
复制失败在源节点日志中检查目标 ARN 和对象键。
不允许删除目标删除或替换复制配置后,再删除被引用的目标。

后续步骤

本页目录