这是本节的多页打印视图。 .
存储桶复制
- 1: 设置存储桶复制的要求
- 2: 启用服务端单向存储桶复制
- 3: 启用双向服务端存储桶复制
- 4: 启用多站点服务端存储桶复制
- 5: 从远程副本重新同步存储桶
MinIO 支持在源存储桶与目标存储桶之间进行服务端和客户端对象复制。
Server-Side Bucket Replication
为每个存储桶配置规则,以便在 MinIO 部署之间自动同步对象。 配置存储桶复制规则的部署充当“源”,而配置的远端部署充当“目标”。 MinIO 会在对象写入操作(例如
PUT)期间应用规则,并自动同步新对象以及对象变更,例如新的对象版本或对象元数据的变更。MinIO 服务端存储桶复制仅支持将处于相同发行版本的 MinIO 集群作为远端复制目标。
客户端存储桶复制
使用命令流程在同一 S3 兼容集群内的存储桶之间,或在两个相互独立的 S3 兼容集群之间同步对象。 使用
mc mirror的客户端复制支持 MinIO 到 S3 以及类似的复制配置。
服务端存储桶复制
MinIO 服务端存储桶复制是一种自动化的存储桶级配置,用于在源存储桶和目标存储桶之间同步对象。 MinIO 服务端复制 要求 源存储桶和目标存储桶分别位于两个独立的 MinIO 集群中,且运行相同的 MinIO 服务端版本。
对于写入存储桶的每次操作,MinIO 都会检查该存储桶上配置的所有复制规则,并应用已配置优先级最高的匹配规则。 MinIO 会同步新对象以及对象变更,例如新的对象版本或对象元数据变更。 这也包括启用或修改对象锁定或保留设置等元数据操作。
MinIO 服务端存储桶复制在功能上类似于 Amazon S3 replication,同时增加了以下 MinIO 专有特性:
- 源存储桶和目标存储桶名称可以相同,从而支持 Splunk 或 Veeam BC/DR 等站点到站点用例。
- 相比 S3 存储桶复制配置,实现更简化,无需配置 AccessControlTranslation、Metrics 和 SourceSelectionCriteria 等设置。
- 支持源存储桶与目标存储桶之间对象的 Active-Active(双向)复制。
- 支持在三个或更多 MinIO 部署之间进行对象的多站点复制
重新同步(灾难恢复)
重新同步主要用于在副本配置中利用健康部署,在某个 MinIO 部署发生部分或全部数据丢失后进行恢复。 使用 mc replicate resync 命令,可基于指定的源存储桶对远端目标(mc admin bucket remote)执行完整重新同步。
重新同步过程会根据所有已配置且包含 现有对象复制 的复制规则检查源存储桶中的所有对象。 对于每个匹配规则的对象,重新同步过程都会将其放入复制 队列,而不考虑该对象当前的 复制状态。
对于远端副本与源对象完全一致(包括对象元数据)的对象,MinIO 会跳过同步。 除此之外,MinIO 不会基于目标端已有内容对队列进行优先级调整或修改。
mc replicate resync 在存储桶级别运行,不 支持前缀级粒度。 在大型存储桶上启动重新同步可能会显著增加与复制相关的负载和流量。 请谨慎使用此命令,并仅在必要时使用。
对于已配置 对象转换(分层) 的存储桶,复制重新同步会以未转换状态恢复对象,且不包含任何关联的转换元数据。 因此,任何先前已转换到远端存储的数据都会与远端 MinIO 部署永久断开关联。 对于在远端配置中将明确的人类可读前缀作为一部分指定的分层配置,你可以安全地清除该前缀中的已转换数据,以避免与这些“丢失”数据相关的成本。
删除操作的复制
MinIO 支持复制 删除 操作,即同步删除特定对象版本以及新的 删除标记。删除操作复制使用与其他所有复制操作相同的 复制流程。
MinIO 要求显式启用带版本的删除和删除标记复制。 使用 mc replicate add --replicate 字段,通过指定 delete 和/或 delete-marker 来分别启用带版本的删除和删除标记复制。 若要同时启用两者,请使用逗号分隔符 delete,delete-marker 指定这两个字符串。
对于删除标记复制,MinIO 会在删除操作创建删除标记后启动复制流程。 MinIO 使用 X-Minio-Replication-DeleteMarker-Status 元数据字段来跟踪删除标记复制状态。 在 active-active 复制配置中,如果两个集群同时为某个对象创建删除标记,或者在复制事件同步之前其中一个或两个集群处于宕机状态,MinIO 可能会产生重复的删除标记。
对于复制删除某个特定对象版本的操作,在复制完成之前,MinIO 会将该对象版本标记为 PENDING。 一旦远端目标删除了该对象版本,MinIO 就会删除源端上的该对象。 虽然这一过程可确保接近同步的版本删除,但它可能导致在初始删除操作之后,列表操作仍返回该对象版本。 MinIO 使用 X-Minio-Replication-Delete-Status 跟踪删除版本的复制状态。
MinIO 仅复制由客户端显式发起的删除操作。 MinIO 不会 复制因应用 生命周期管理过期规则 而删除的对象。 对于 active-active 配置,请在 所有 复制存储桶上设置相同的过期规则,以确保对象过期行为一致。
如果删除操作移除了某个存储桶前缀中的最后一个对象,MinIO 会递归删除该前缀中所有为空的部分,直到存储桶根目录。 MinIO 仅对在对象写入过程中 隐式 创建的前缀应用这种递归删除行为,也就是说,该前缀不是通过 mc mb 之类的显式目录创建命令创建的。
如果复制规则启用了删除操作复制,那么复制过程在目标 MinIO 集群上 也会 应用这种隐式前缀裁剪行为。
例如,考虑一个名为 photos 的存储桶,其中包含以下对象前缀:
photos/2021/january/myphoto.jpgphotos/2021/february/myotherphoto.jpgphotos/NYE21/NewYears.jpg
photos/NYE21 是 唯一一个 使用 mc mb 显式创建的前缀。 其他所有前缀都是在写入位于该前缀下的对象时 隐式 创建的。
- 某个命令删除了
myphoto.jpg。MinIO 会自动裁剪空的/janaury前缀。 - 随后某个命令删除了
myotherphoto.jpg。MinIO 会自动裁剪/february前缀以及此时已为空的/2021前缀。 - 某个命令删除了
NewYears.jpg对象。MinIO 会保留/NYE21前缀,因为它是 显式 创建的。
现有对象的复制
默认情况下,MinIO 会将源存储桶中的现有对象复制到配置好的远端,类似于 AWS: Replicating existing objects between S3 buckets,但无需联系技术支持的额外成本。
MinIO 会将所有满足复制规则的对象或对象前缀标记为可同步到远端集群和存储桶。 MinIO 仅排除没有版本 ID 的对象,例如在存储桶启用版本控制之前写入的对象。
你可以在配置或修改存储桶复制规则时禁用现有对象复制。 在创建或修改时,必须指定 所有 需要的复制特性:
- 对于新的复制规则,不要将
"existing-objects"包含在mc replicate add --replicate指定的复制特性列表中。 - 对于现有复制规则,使用
mc replicate update --replicate从现有复制特性列表中移除"existing-objects"。 新规则会 替换 旧规则。
禁用现有对象复制不会移除任何已经复制到远端存储桶的对象。
同步复制与异步复制
对于给定的远端目标,MinIO 支持指定异步复制(默认)或同步复制。
在异步复制模式下,MinIO 会在将对象放入 复制队列 之前 完成发起的 PUT 操作。 因此,发起请求的客户端可能会在对象完成复制 之前 就看到 PUT 操作成功。 虽然这可能导致远端对象陈旧或缺失,但它降低了因复制负载而导致写入变慢的风险。
在同步复制模式下,MinIO 会在完成发起的 PUT 操作 之前 尝试复制对象。 无论复制尝试是否成功,MinIO 都会返回一个成功的 PUT 操作结果。 这降低了写入变慢的风险,但代价是远端位置可能出现陈旧或缺失对象。
在使用 mc admin bucket remote add 命令配置远端目标时,你必须通过 add 标志显式启用同步复制。
复制内部机制
本节记录复制的内部行为,对使用或实现复制而言并非关键。 本文档仅用于学习和教育目的。
复制流程
MinIO 使用一个复制排队系统,并由多个并发复制工作线程处理该队列。 MinIO 会持续执行复制并从队列中移除对象,同时扫描新的未复制对象并将其加入队列。
变更: RELEASE.2022-07-18T17-49-40Z
MinIO 会将失败的复制操作加入队列,并最多重试三(3)次。
对于在三次尝试后仍复制失败的操作,MinIO 会将其移出队列。 扫描器稍后可以再次发现这些受影响对象,并将其重新加入复制队列。
MinIO 会根据对象的复制状态设置 X-Amz-Replication-Status 元数据字段:
复制状态 |
说明 |
|---|---|
|
该对象尚未被复制。如果对象满足该存储桶上配置的某条复制规则,MinIO 就会应用此状态。
MinIO 会持续扫描尚未进入复制队列的 对于多站点复制,对象会一直保持 |
|
该对象已成功复制到远端集群。 |
|
该对象复制到远端集群失败。 MinIO 会持续扫描尚未进入复制队列的 |
|
该对象本身就是来自远端源的副本。 |
复制流程通常具有以下几种流转路径之一:
PENDING -> COMPLETEDPENDING -> FAILED -> COMPLETED
1 - 设置存储桶复制的要求
存储桶复制使用规则将一个 MinIO 部署中的存储桶内容同步到远端 MinIO 部署中的存储桶。
复制可以通过以下任一方式完成:
- Active-Passive 符合条件的对象会从源存储桶复制到远端存储桶。 远端存储桶上的任何更改都不会反向复制回来。
- Active-Active 任一存储桶中符合条件对象的更改都会以双向方式复制到另一个存储桶。
- Multi-Site Active-Active 任何已设置存储桶复制的存储桶中符合条件对象的更改,都会复制到所有其他存储桶。
在设置这些复制配置之前,请确保满足以下前提条件。
设置存储桶复制所需的权限
要配置和启用复制规则,存储桶复制要求源端和目标端部署具备特定权限。
下列策略提供了在部署上配置和启用复制所需的权限。
"EnableRemoteBucketConfiguration"语句授予创建远端目标以支持复制的权限。"EnableReplicationRuleConfiguration"语句授予在存储桶上创建复制规则的权限。"arn:aws:s3:::*资源会将复制权限应用到源部署上的 任意 存储桶。 你可以按需将该用户策略限制到特定存储桶。
下列代码使用所需策略创建一个 MinIO 管理用户。 将 TARGET 替换为你要配置复制的 MinIO 部署的 别名:
对于配置了 Active Directory/LDAP 或 OpenID Connect 用户管理的 MinIO 部署,则应改为为存储桶复制创建专用 访问密钥。
下列策略提供了将复制数据同步 到 该部署所需的权限。
"EnableReplicationOnBucket"语句授予远端目标获取存储桶级配置的权限, 从而支持在 MinIO 部署中 所有 存储桶上执行复制操作。 如果要将策略限制到特定存储桶,请像"arn:aws:s3:::bucketName"一样, 在Resource数组中指定这些存储桶。"EnableReplicatingDataIntoBucket"语句授予远端目标将数据同步到 MinIO 部署中 任意 存储桶的权限。 如果要将策略限制到特定存储桶,请像"arn:aws:s3:::bucketName/*"一样, 在Resource数组中指定这些存储桶。
下列代码使用所需策略创建一个 MinIO 管理用户。 将 TARGET 替换为你要配置复制的 MinIO 部署的 别名:
对于配置了 Active Directory/LDAP 或 OpenID Connect 用户管理的 MinIO 部署,则应改为为存储桶复制创建专用 访问密钥。
关于在 MinIO 部署中添加用户、访问密钥和策略的更完整文档,请参见 mc admin user、mc admin user svcacct 和 mc admin policy。
存储桶复制的对象加密设置需保持一致
MinIO 支持复制使用 SSE-KMS 和 SSE-S3 加密的对象:
- 对于使用 SSE-KMS 加密的对象,MinIO 要求 目标存储桶支持使用与源存储桶对象 加密时 相同的密钥名称 对对象执行 SSE-KMS 加密。
- 对于使用 SSE-S3 加密的对象,MinIO 要求 目标存储桶同样支持 SSE-S3 对象加密,而不考虑密钥名称。
在复制过程中,MinIO 会先在源存储桶上对对象进行 解密,再通过网络传输未加密的 对象。目标 MinIO 部署随后会使用目标端的加密设置重新对该对象进行加密。 因此,MinIO 强烈建议 在源端和目标端部署上都 启用 TLS,以确保对象在传输过程中的安全。
MinIO 不 支持复制客户端加密对象(SSE-C)。
存储桶复制要求使用 MinIO 部署
MinIO 服务端复制仅适用于 MinIO 部署之间。 源端和目标端部署 都必须 运行版本匹配的 MinIO Server。
如需在任意 S3 兼容服务之间配置复制,请使用 mc mirror。
复制要求启用版本控制
MinIO 依赖 版本控制 提供的不可变性保护来支持 复制和重新同步。
使用 mc version info 验证源存储桶和远端存储桶的版本控制状态。 必要时使用 mc version enable 命令启用版本控制。
如果你在源存储桶中将某个前缀或文件夹排除在版本控制之外,MinIO 就无法复制该文件夹 或前缀中的对象。
对象锁定状态需与存储桶复制保持一致
MinIO 支持复制受 WORM 锁定 保护的对象。 两个复制存储桶 都必须 启用对象锁定,MinIO 才能复制被锁定的对象。 对于主动-主动配置,MinIO 建议在两个存储桶上使用 相同的 保留规则,以确保跨站点 行为一致。
根据 S3 的行为要求,你必须在创建存储桶时启用对象锁定。 随后,你可以在任何时候配置对象保留规则。 在开始此过程 之前,请先在状态异常的目标存储桶上配置所需规则。
2 - 启用服务端单向存储桶复制
本页面中的过程会创建一条新的存储桶复制规则,用于将对象从一个 MinIO 存储桶单向复制到另一个 MinIO 存储桶。 这些存储桶既可以位于同一个 MinIO 部署中,也可以位于不同的 MinIO 部署中。
- 如需在 MinIO 存储桶之间配置双向“active-active”复制,请参见 启用双向服务端存储桶复制。
- 如需在 MinIO 部署之间配置多站点“active-active”复制,请参见 启用多站点服务端存储桶复制
说明
如需在任意兼容 S3 的服务之间配置复制(不一定是 MinIO),请使用 mc mirror。
要求
复制要求所有参与的集群满足 以下要求。 本过程假定你已经审阅并验证了这些要求。
如需更多详细信息,请参见 存储桶复制要求 页面。
注意事项
点击展开以下任一项:
MinIO 支持自动复制存储桶中的现有对象。
MinIO 要求使用 mc replicate add --replicate 或 mc replicate update --replicate 显式启用现有对象复制,并包含 existing-objects 复制功能标志。 本过程包含启用现有对象复制所需的标志。
MinIO 支持将 S3 DELETE 操作复制到目标存储桶。 具体来说,MinIO 可以复制版本控制的 Delete Markers,以及删除特定版本对象的操作:
- 对于对象的删除操作,MinIO 复制也会在目标存储桶上创建删除标记。
- 对于对象某个版本的删除操作,MinIO 复制也会在目标存储桶上删除这些版本。
MinIO 要求使用 mc replicate add --replicate 或 mc replicate update --replicate 显式启用删除操作复制。 本过程包含启用删除操作和删除标记复制所需的标志。
MinIO 不会 复制因应用 生命周期管理过期规则 而产生的删除操作。
MinIO 支持为每个存储桶或存储桶前缀配置多个远程目标。 例如,你可以将一个存储桶配置为把数据复制到两个或更多远程 MinIO 部署,其中一个部署是 1:1 副本(复制包括删除在内的所有操作),另一个部署则是完整的历史记录(仅复制非破坏性的写入操作)。
本过程说明了到单个远程 MinIO 部署的单向复制。 你可以重复本教程,将单个存储桶复制到多个远程目标。
过程
使用命令行 mc 配置单向存储桶复制
本过程使用 别名 SOURCE 和 REMOTE 来引用每个配置了复制的 MinIO 部署。 请将这些值替换为你的目标 MinIO 部署对应的别名。
本过程假定每个别名都对应一个具有 必要复制权限 的用户。
变更: RELEASE.2022-12-24T15-21-38Z
mc replicate add 会自动创建所需的复制目标,因此不再需要使用已弃用的 mc admin remote bucket add 命令。 本过程仅说明该版本起的操作流程。
1) 创建新的存储桶复制规则
使用 mc replicate add 命令,为每个 MinIO 部署添加新的复制规则。
-
将
ALIAS替换为源 MinIO 部署的 别名。 该名称 必须 与上一步创建远端目标时指定的存储桶名称一致。 -
将
BUCKET替换为源部署上要作为复制源的存储桶名称。 -
使用
--remote-bucket指定ALIAS/BUCKET要复制到的远端 MinIO 部署和存储桶。USER:PASSWORD必须对应远端部署上具有 所需复制权限 的用户。HOSTNAME:PORT必须能解析到远端部署上可访问的 MinIO 实例。BUCKET必须已存在,并满足其他所有 复制要求。 -
--replicate "delete,delete-marker,existing-objects"标志会启用以下复制功能:有关更完整的文档,请参阅
mc replicate add --replicate。 省略任意字段即可禁用对应组件的复制。
可按需为 mc replicate add 指定其他受支持的可选参数。
2) 验证复制配置
在其中一个部署上,使用 mc cp 将新对象复制到已启用复制的存储桶中。
使用 mc ls 验证目标存储桶中存在该对象:
另请参阅
- 使用
mc replicate update命令修改现有复制规则。 - 使用
mc replicate update命令并配合--state "disable"标志禁用现有复制规则。 - 使用
mc replicate rm命令删除现有复制规则。
3 - 启用双向服务端存储桶复制
本页中的过程会创建新的存储桶复制规则,用于在 MinIO 存储桶之间对对象执行双向“主动-主动”同步。
- 如需在任意兼容 S3 的服务之间配置复制,请使用
mc mirror。 - 如需在 MinIO 集群之间配置单向“主动-被动”复制,请参见 启用服务端单向存储桶复制。
- 如需在 MinIO 集群之间配置多站点“主动-主动”复制,请参见 启用多站点服务端存储桶复制。
本教程介绍如何在两个 MinIO 集群之间配置主动-主动复制。有关在三个或更多 MinIO 集群之间进行多站点复制的教程,请参见 启用多站点服务端存储桶复制。
要求
您必须满足 存储桶复制要求 中描述的所有存储桶复制基础要求。
此外,要设置主动-主动存储桶复制,您还必须满足以下附加要求:
访问两个集群
要设置主动-主动存储桶复制,您必须能够通过网络访问两个部署,并拥有具有所需权限的登录凭证。
您可以安装 mc 并通过命令行访问这些部署。 使用 mc alias set 命令为两个 MinIO 部署创建别名。
创建别名时,需要为部署中的某个用户指定 access key。 该用户 必须 具有在该部署上创建和管理用户及策略的权限。
具体而言,请确保该用户 至少 具有以下权限:
admin:CreateUseradmin:ListUsersadmin:GetUseradmin:CreatePolicyadmin:GetPolicyadmin:AttachUserOrGroupPolicy
注意事项
MinIO 支持自定义复制配置,以启用或禁用以下复制行为:
- 删除操作 的复制
- 删除标记的复制
- 现有对象的复制
- 仅元数据变更的复制
为存储桶配置复制规则时,请确保参与主动-主动复制的两个 MinIO 部署使用 相同 的复制行为,以确保对象同步一致且可预测。
MinIO 支持自动复制存储桶中的现有对象。
MinIO 要求使用 mc replicate add --replicate 或 mc replicate update --replicate 显式启用现有对象复制,并包含 existing-objects 复制功能标志。 此过程包含启用现有对象复制所需的标志。
MinIO 支持将删除操作复制到目标存储桶。 具体而言,MinIO 可以复制版本控制中的 Delete Markers 以及特定已版本化对象的删除:
- 对于对象上的删除操作,MinIO 复制也会在目标存储桶上创建删除标记。
- 对于对象某个版本的删除操作,MinIO 复制也会删除目标存储桶上的这些版本。
MinIO 要求使用 mc replicate add --replicate 或 mc replicate update --replicate 显式启用删除操作复制。 此过程包含启用删除操作和删除标记复制所需的标志。
MinIO 不会 复制因应用 lifecycle management expiration rules 而产生的删除操作。 请在源存储桶和目标存储桶上配置匹配的过期规则,以确保对象过期行为一致。
MinIO 支持为每个存储桶或存储桶前缀配置多个远程目标。 这使得可以在 MinIO 部署之间配置多站点主动-主动复制。
本过程介绍 两个 MinIO 站点之间的主动-主动复制。 您可以针对复制网格中的每一“对”MinIO 部署重复此过程。有关专门教程,请参见 启用多站点服务端存储桶复制。
操作步骤
使用命令行 mc 配置双向存储桶复制
此过程会在两个 MinIO 部署之间创建双向、主动-主动复制。
此过程假定您已使用具有 所需复制权限 的用户为每个部署定义了别名。
变更: RELEASE.2022-12-24T15-21-38Z
mc replicate add 会自动创建所需的复制目标,因此不再需要使用已弃用的 mc admin remote bucket add 命令。 本文档仅说明自该版本起的过程。
1) 在每个部署上创建新的存储桶复制规则
使用 mc replicate add 命令,为每个 MinIO 部署添加新的复制规则。
-
将
ALIAS替换为源 MinIO 部署的 别名。 该名称 必须 与上一步创建远端目标时指定的存储桶名称一致。 -
将
BUCKET替换为源部署上要作为复制源的存储桶名称。 -
使用
--remote-bucket指定ALIAS/BUCKET要复制到的远端 MinIO 部署和存储桶。USER:PASSWORD必须对应远端部署上具有 所需复制权限 的用户。HOSTNAME:PORT必须能解析到远端部署上可访问的 MinIO 实例。BUCKET必须已存在,并满足其他所有 复制要求。 -
--replicate "delete,delete-marker,existing-objects"标志会启用以下复制功能:有关更完整的文档,请参阅
mc replicate add --replicate。 省略任意字段即可禁用对应组件的复制。
可按需为 mc replicate add 指定其他受支持的可选参数。
在另一个 MinIO 部署上重复此步骤。 将 ALIAS 和 --remote-bucket 的值修改为与第一个部署对应。
完成此步骤后,您应已配置两条复制规则:每个部署上一条,并指向另一个部署上的存储桶。 使用 mc replicate ls 命令验证已创建的复制规则。
2) 验证复制配置
在其中一个部署上,使用 mc cp 将新对象复制到已启用复制的存储桶中。
使用 mc ls 验证目标存储桶中存在该对象:
通过将另一个对象复制到第二个部署,并验证该对象会复制到第一个部署,来重复执行此测试。
当两个对象都存在于两个部署上时,您就已成功在 MinIO 存储桶之间设置了双向、主动-主动复制。
另请参阅
- 使用
mc replicate update命令修改现有复制规则。 - 使用
mc replicate update命令并配合--state "disable"标志禁用现有复制规则。 - 使用
mc replicate rm命令移除现有复制规则。
4 - 启用多站点服务端存储桶复制
本页中的过程用于在多个 MinIO 部署之间配置自动化的服务端存储桶复制。多站点 Active-Active 复制基于 启用双向服务端存储桶复制 过程,并增加了额外注意事项,以确保所有站点上的复制行为可预测。
- 如需在任意 S3 兼容服务之间配置复制,请使用
mc mirror。 - 如需在两个 MinIO 部署之间配置单向 “active-active” 复制,请参阅 启用双向服务端存储桶复制。
- 如需在 MinIO 部署之间配置单向 “active-passive” 复制,请参阅 启用服务端单向存储桶复制。
多站点 Active-Active 复制配置可以跨越多个机架、数据中心或地理位置。多站点配置的部署与维护复杂度通常会随着站点数量和每个站点规模的增加而提高。计划实施多站点复制的企业应考虑借助 MinIO SUBNET 支持,以获取应对此类用例所需的专业知识、规划能力和工程资源。
另请参阅
- 使用
mc replicate update命令修改现有复制规则。 - 使用带有
--state "disable"标志的mc replicate update命令禁用现有复制规则。 - 使用
mc replicate rm命令删除现有复制规则。
要求
你必须满足 Bucket Replication Requirements 中描述的所有存储桶复制基础要求。
此外,要创建多站点存储桶复制配置,你还必须满足以下额外要求:
访问所有集群
要设置多站点 Active-Active 存储桶复制,你必须具备访问所有部署的网络连通性,以及具有正确权限的登录凭证。
你可以通过安装 mc 并使用命令行访问这些部署。 使用 mc alias set 命令为每个 MinIO 部署创建别名。
创建别名时,需要指定该部署上某个用户的 access key。 该用户 必须 具有在该部署上创建和管理用户及策略的权限。
具体来说,请确保该用户 至少 具有以下权限:
admin:CreateUseradmin:ListUsersadmin:GetUseradmin:CreatePolicyadmin:GetPolicyadmin:AttachUserOrGroupPolicy
注意事项
点击展开以下任意条目:
MinIO 支持自定义复制配置,以启用或禁用以下复制行为:
- 复制 delete operations
- 复制删除标记
- 复制现有对象
- 复制仅元数据变更
为存储桶配置复制规则时,请确保参与多站点复制的所有 MinIO 部署使用 相同 的复制行为,以保证对象同步的一致性和可预测性。
MinIO 支持自动复制存储桶中的现有对象。
MinIO 要求使用 mc replicate add --replicate 或 mc replicate update --replicate 显式启用现有对象复制,并包含 existing-objects 复制功能标志。 本过程包含用于启用现有对象复制的必需标志。
MinIO 支持将 delete operations 复制到目标存储桶。 具体来说,MinIO 可以复制版本控制中的 Delete Markers,以及删除指定版本对象的操作:
- 对对象执行删除操作时,MinIO 复制也会在目标存储桶上创建删除标记。
- 对对象的某个版本执行删除操作时,MinIO 复制也会在目标存储桶上删除这些版本。
MinIO 要求使用 mc replicate add --replicate 或 mc replicate update --replicate 显式启用删除操作复制。 本过程包含用于启用删除操作和删除标记复制的必需标志。
MinIO 不会 复制因应用 lifecycle management expiration rules 而产生的删除操作。 请在所有复制站点上为该存储桶配置一致的过期规则,以确保对象过期策略得到一致应用。
过程
对于参与多站点复制配置的每个 MinIO 部署,都需要重复执行本过程中的步骤。根据部署数量的不同,该过程在实施时可能需要投入大量时间并格外谨慎。MinIO 建议在尝试执行文档中的步骤之前,先完整阅读本过程。
-
使用命令行配置多站点存储桶复制
使用命令行 mc 配置多站点存储桶复制
本过程使用占位符 ALIAS 来引用每个被配置为复制端点的 MinIO 部署的 alias。 请将这些值替换为各个 MinIO 部署对应的实际别名。
本过程假设每个别名都对应一个具备 necessary replication permissions 的用户。
变更: RELEASE.2022-12-24T15-21-38Z
mc replicate add 会自动创建所需的复制目标,因此不再需要使用已弃用的 mc admin remote bucket add 命令。 本过程仅记录该版本及之后的操作方式。
1) 创建新的存储桶复制规则
使用 mc replicate add 命令,为每个 MinIO 部署添加新的复制规则。
-
将
ALIAS替换为源 MinIO 部署的 别名。 该名称 必须 与上一步创建远端目标时指定的存储桶名称一致。 -
将
BUCKET替换为源部署上要作为复制源的存储桶名称。 -
使用
--remote-bucket指定ALIAS/BUCKET要复制到的远端 MinIO 部署和存储桶。USER:PASSWORD必须对应远端部署上具有 所需复制权限 的用户。HOSTNAME:PORT必须能解析到远端部署上可访问的 MinIO 实例。BUCKET必须已存在,并满足其他所有 复制要求。 -
--replicate "delete,delete-marker,existing-objects"标志会启用以下复制功能:有关更完整的文档,请参阅
mc replicate add --replicate。 省略任意字段即可禁用对应组件的复制。
可按需为 mc replicate add 指定其他受支持的可选参数。
对于参与多站点复制配置的每个远程 MinIO 部署,都要重复执行这些命令。 例如,一个由 MinIO 部署 minio1、minio2 和 minio3 组成的多站点复制配置,需要在每个部署上针对每个远程端重复执行此步骤。
具体来说,在这种场景下,需要在每个部署上执行两次此步骤:
- 在
minio1部署上,为minio2创建一条规则,再为minio3单独创建另一条规则。 - 在
minio2部署上,为minio1创建一条规则,再为minio3单独创建另一条规则。 - 在
minio3部署上,为minio1创建一条规则,再为minio2单独创建另一条规则。
2) 验证复制配置
在其中一个部署上,使用 mc cp 将新对象复制到已启用复制的存储桶中。
使用 mc ls 验证目标存储桶中存在该对象:
在每个部署上重复执行此测试:复制一个新的唯一文件,并检查该文件是否已复制到其他每个部署。
你也可以使用 mc stat 检查该文件,以查看对象当前的 replication stage。
5 - 从远程副本重新同步存储桶
本页中的步骤使用健康的复制远端来重新同步 MinIO 存储桶中的内容。重新同步可用于在副本配置下的 MinIO 部署发生部分或全部数据丢失后进行恢复。
例如,考虑如下所示的 MinIO 主动-主动复制配置:
重新同步允许使用其中一个参与复制的 MinIO 部署上的健康数据,作为重建另一个部署的源。
重新同步是按存储桶执行的过程。对于远端中每个遭受部分或全部数据丢失的存储桶,都必须重复执行重新同步。
BC/DR 操作期间的专业支持
MinIO SUBNET 用户可以 登录 并创建与重新同步相关的新 issue。通过 SUBNET 与 MinIO Engineering 协调,可以确保重新同步成功并恢复正常运行,包括性能测试和健康诊断。
社区用户可以通过 MinIO Community Slack 寻求支持。社区支持仅按尽力而为原则提供,不对响应速度提供 SLA。
要求
MinIO 部署必须在线
重新同步要求源部署和目标部署都在线,并且能够接受读写操作。源端 必须 具备到远端的完整网络连通性。
远端部署可以处于“不健康”状态,即发生了部分或全部数据丢失。只要源端和目标端保持连通,重新同步就可以修复这些数据丢失问题。
重新同步要求现有复制配置
重新同步要求健康的源部署已经为不健康的目标存储桶配置好了复制配置。此外,重新同步仅适用于使用 existing object replication 选项创建的那些复制规则。
使用 mc replicate ls 查看健康源存储桶已配置的复制规则和目标。
复制要求对象加密设置匹配
MinIO 支持复制使用 SSE-KMS 和 SSE-S3 加密的对象:
- 对于使用 SSE-KMS 加密的对象,MinIO 要求 目标存储桶支持使用与源存储桶对象 加密时 相同的密钥名称 对对象执行 SSE-KMS 加密。
- 对于使用 SSE-S3 加密的对象,MinIO 要求 目标存储桶同样支持 SSE-S3 对象加密,而不考虑密钥名称。
在复制过程中,MinIO 会先在源存储桶上对对象进行 解密,再通过网络传输未加密的 对象。目标 MinIO 部署随后会使用目标端的加密设置重新对该对象进行加密。 因此,MinIO 强烈建议 在源端和目标端部署上都 启用 TLS,以确保对象在传输过程中的安全。
MinIO 不 支持复制客户端加密对象(SSE-C)。
复制要求使用 MinIO 部署
MinIO 服务端复制仅适用于 MinIO 部署之间。 源端和目标端部署 都必须 运行版本匹配的 MinIO Server。
如需在任意 S3 兼容服务之间配置复制,请使用 mc mirror。
复制要求启用版本控制
MinIO 依赖 版本控制 提供的不可变性保护来支持 复制和重新同步。
使用 mc version info 验证源存储桶和远端存储桶的版本控制状态。 必要时使用 mc version enable 命令启用版本控制。
如果你在源存储桶中将某个前缀或文件夹排除在版本控制之外,MinIO 就无法复制该文件夹 或前缀中的对象。
复制要求对象锁定状态匹配
MinIO 支持复制受 WORM 锁定 保护的对象。 两个复制存储桶 都必须 启用对象锁定,MinIO 才能复制被锁定的对象。 对于主动-主动配置,MinIO 建议在两个存储桶上使用 相同的 保留规则,以确保跨站点 行为一致。
根据 S3 的行为要求,你必须在创建存储桶时启用对象锁定。 随后,你可以在任何时候配置对象保留规则。 在开始此过程 之前,请先在状态异常的目标存储桶上配置所需规则。
注意事项
重新同步需要时间
重新同步是一个后台过程,会持续检查源 MinIO 存储桶中的对象,并在需要时将其复制到远端。完成复制所需的时间会因对象数量和大小、到远端 MinIO 部署的吞吐量以及源 MinIO 部署上的负载而异。由于这些变量的存在,总完成时间通常无法预测。
MinIO 建议在同步完成之前,通过配置负载均衡器或代理,仅将流量导向健康集群。以下命令可帮助了解重新同步状态:
- 在源端执行
mc replicate resync status以跟踪重新同步进度。 - 在源端和远端执行
mc replicate status以跟踪正常复制数据。 - 在源端和远端都运行
mc ls -r --versions ALIAS/BUCKET | wc -l,以验证两端的对象总数和对象版本总数。
在数据丢失后重新同步对象
此过程使用现有的 MinIO replication configuration,将缺失数据恢复到参与该配置的某个 MinIO 部署。具体来说,一个健康的 MinIO 部署(即 SOURCE)会将其现有数据同步到不健康的 MinIO 部署(即 TARGET)。
此过程假定 SOURCE 已存在一个 alias,并且该别名具有配置复制所需的 necessary permissions。
你可以对每个需要重新同步的存储桶重复执行此过程。每个存储桶同时最多只能运行一个复制作业。
1) 列出健康源端上已配置的复制目标
运行 mc replicate ls 命令,列出健康 SOURCE 部署上针对需要重新同步的 BUCKET 已配置的远程目标。
- 将
SOURCE替换为源 MinIO 部署的 alias。 - 将
BUCKET替换为要作为重新同步源的存储桶名称。
输出类似如下:
输出中的每个文档都表示一条已配置的复制规则。 Destination.Bucket 字段指定该存储桶上某条规则对应的 ARN。 找出你希望从中重新同步对象的存储桶对应的正确 ARN。
2) 启动重新同步过程
运行 mc replicate resync start 命令以开始重新同步过程:
- 将
--remote-bucket的值替换为TARGETMinIO 部署上不健康BUCKET的 ARN。 - 将
SOURCE替换为源 MinIO 部署的 alias。 - 将
BUCKET替换为健康SOURCEMinIO 部署上的存储桶名称。
该命令会返回一个重新同步作业 ID,表示该过程已经开始。
3) 监控重新同步
在源部署上使用 mc replicate resync status 命令跟踪已接收的复制数据:
输出类似如下:
重新同步过程完成后,Status 会更新为 Completed。
4) 后续步骤
- 如果
TARGET存储桶的损坏已波及复制规则,则必须重新创建这些规则,使其与之前的复制配置一致。更多指导请参见 启用双向服务端存储桶复制。 - 执行基础验证,确认复制配置中的所有存储桶在
mc ls和mc stat等命令下显示出相近的结果。 - 在恢复所有复制规则并验证站点间复制之后,你可以配置负责管理连接的反向代理、负载均衡器或其他网络控制平面,使其恢复向已重新同步的部署发送流量。