文档

存储桶复制

MinIO 支持在源存储桶和目标存储桶之间进行对象服务器端复制和客户端复制。

服务器端存储桶复制

配置每个存储桶的规则,以自动在 MinIO 部署之间同步对象。您配置存储桶复制规则的部署充当“源”,而配置的远程部署充当“目标”。MinIO 将规则应用于对象写入操作(例如,PUT),并自动同步新对象以及对象变动,例如新对象版本或对象元数据更改。

MinIO 服务器端存储桶复制仅支持相同版本发布的 MinIO 集群作为远程复制目标。

客户端存储桶复制

使用命令过程在同一个 S3 兼容集群内的存储桶之间或两个独立的 S3 兼容集群之间同步对象。使用 mc mirror 的客户端复制支持 MinIO 到 S3 和类似的复制配置。

存储桶与站点复制

存储桶复制不同于 站点复制,并且与其互斥。

  • 存储桶复制在存储桶级别同步数据,例如存储桶前缀路径和对象。

    您可以在任何时间配置存储桶复制,并且远程 MinIO 部署可能在复制目标存储桶上存在预先存在的数据。

  • 站点复制将存储桶复制扩展到包括 IAM、安全令牌、访问密钥和存储桶级别配置。

    站点复制通常在最初部署 MinIO 对等站点时配置。在初始配置时,只有一个站点可以保存任何存储桶或对象。

服务器端存储桶复制

MinIO 服务器端存储桶复制是一种自动的存储桶级配置,用于在源存储桶和目标存储桶之间同步对象。MinIO 服务器端复制需要源存储桶和目标存储桶是运行相同 MinIO Server 版本的两个独立的 MinIO 集群。

对于存储桶的每次写入操作,MinIO 会检查存储桶的所有配置的复制规则,并应用配置优先级最高的匹配规则。MinIO 会同步新对象以及对象变动,例如新对象版本或对象元数据的更改。这包括元数据操作,例如启用或修改对象锁定或保留设置。

MinIO 服务器端存储桶复制在功能上类似于 Amazon S3 复制,同时添加了以下 MinIO 独有的功能

  • 源存储桶和目标存储桶名称可以匹配,支持诸如 Splunk 或 Veeam BC/DR 之类的站点到站点用例。

  • 与 S3 存储桶复制配置相比,实施更简单,无需配置诸如 AccessControlTranslation、Metrics 和 SourceSelectionCriteria 之类的设置。

  • 在源存储桶和目标存储桶之间对对象进行双向(双向)复制。

  • 在三个或更多个 MinIO 部署之间对对象进行多站点复制

重新同步(灾难恢复)

重新同步主要支持在复制配置中使用健康的部署在部分或完全丢失 MinIO 部署上的数据后进行恢复。使用 mc replicate resync 命令使用指定的源存储桶完全重新同步远程目标 (mc admin bucket remote)。

重新同步过程会检查源存储桶中的所有对象,以匹配所有包含 现有对象复制 的配置的复制规则。对于匹配规则的每个对象,重新同步过程会将对象放入复制 队列,无论对象的当前 复制状态 如何。

MinIO 跳过同步那些远程副本与源副本完全匹配的对象,包括对象元数据。否则,MinIO 不会优先考虑或修改队列,以考虑目标的现有内容。

mc replicate resync 在存储桶级别运行,不支持前缀级粒度。在大型存储桶上启动重新同步可能会导致与复制相关的负载和流量显着增加。谨慎使用此命令,仅在必要时使用。

对于配置了 对象转换(分层) 的存储桶,复制重新同步将对象恢复到非转换状态,没有关联的转换元数据。因此,之前转移到远程存储的任何数据将永久地与远程 MinIO 部署断开连接。对于在远程配置中指定显式人类可读前缀的分层配置,您可以安全地清除该前缀中的转移数据,以避免与“丢失”数据相关的成本。

删除操作的复制

MinIO 支持复制 删除 操作,其中 MinIO 会同步删除特定对象版本以及新的 删除标记。删除操作复制使用与所有其他复制操作相同的 复制过程

MinIO 需要显式启用版本化删除和删除标记复制。使用 mc replicate add --replicate 字段分别指定 deletedelete-marker 以启用版本化删除和删除标记复制。要启用两者,请使用逗号分隔符 delete,delete-marker 指定这两个字符串。

对于删除标记复制,MinIO 在删除操作创建删除标记后开始复制过程。MinIO 使用 X-Minio-Replication-DeleteMarker-Status 元数据字段跟踪删除标记复制状态。在 双向 复制配置中,如果两个集群同时为对象创建删除标记如果一个或两个集群在复制事件同步之前都已关闭,MinIO 可能会生成重复的删除标记。

为了复制特定对象版本的删除,MinIO 将对象版本标记为 PENDING,直到复制完成。远程目标删除该对象版本后,MinIO 会删除源上的对象。虽然此过程确保了版本删除几乎同步,但它可能会导致列出操作在初始删除操作后返回对象版本。MinIO 使用 X-Minio-Replication-Delete-Status 跟踪删除版本复制状态。

MinIO 仅复制显式的客户端驱动的删除操作。MinIO 复制从应用 生命周期管理过期规则 删除的对象。对于 双向 配置,在所有复制存储桶上设置相同的过期规则,以确保一致地应用对象过期。

现有对象的复制

默认情况下,MinIO 会将源存储桶中的现有对象复制到配置的远程,类似于 AWS:在 S3 存储桶之间复制现有对象,而无需联系技术支持的额外开销。

MinIO 将所有满足复制规则的对象或对象前缀标记为有资格同步到远程集群和存储桶。MinIO 仅排除没有版本 ID 的对象,例如在启用存储桶的版本控制之前写入的对象。

您可以在配置或修改存储桶复制规则时禁用现有对象复制。您必须在创建或修改期间指定所有所需的复制功能

禁用现有对象复制不会删除已复制到远程存储桶的任何对象。

同步与异步复制

MinIO 支持为给定的远程目标指定异步(默认)或同步复制。

使用异步复制,MinIO 在将对象放入 复制队列 之前,会完成原始的 PUT 操作。因此,原始客户端可能会在对象被复制之前看到成功的 PUT 操作。虽然这可能会导致远程对象陈旧或丢失,但它可以减轻由于复制负载导致的写入操作缓慢的风险。

使用同步复制,MinIO 会在完成原始的 PUT 操作之前尝试复制对象。无论复制尝试是否成功,MinIO 都会返回成功的 PUT 操作。这减少了缓慢写入操作的风险,但也可能导致远程位置上的对象陈旧或丢失。

使用 mc admin bucket remote add 命令(带 add 标志)配置远程目标时,必须显式启用同步复制。

复制内部机制

本节记录了内部复制行为,对于使用或实现复制来说并不重要。此文档仅供学习和教育目的提供。

复制过程

MinIO 使用一个复制排队系统,该系统有多个并发复制工作器在队列上运行。MinIO 不断努力复制和从队列中删除对象,同时扫描以添加新未复制对象到队列中。

Changed in version RELEASE.2022-07-18T17-49-40Z: MinIO 会将失败的复制操作排队,并最多重试三次。

MinIO 会将尝试三次后仍无法复制的复制操作从队列中删除。扫描器可以稍后获取这些受影响的对象并将它们重新排队以进行复制。

Changed in version RELEASE.2022-08-11T04-37-28Z: 在执行列表或任何 GETHEAD API 方法时,失败或待处理的复制操作会自动重新排队。例如,使用 mc statmc catmc ls,在远程位置恢复联机后会重新排队复制。

MinIO 根据对象的复制状态设置 X-Amz-Replication-Status 元数据字段。

复制状态

描述

PENDING

对象尚未被复制。如果对象满足存储桶上的配置复制规则之一,MinIO 会应用此状态。MinIO 不断扫描尚未在复制队列中的 PENDING 对象,并在有空间时将它们添加到队列中。

对于多站点复制,对象会一直处于 PENDING 状态,直到复制到该存储桶或存储桶前缀的所有配置远程位置。

COMPLETED

对象已成功复制到远程集群。

FAILED

对象未能复制到远程集群。

MinIO 不断扫描尚未在复制队列中的 FAILED 对象,并在有空间时将它们添加到队列中。

REPLICA

对象本身是来自远程源的副本。

复制过程通常具有以下流程之一:

  • PENDING -> COMPLETED

  • PENDING -> FAILED -> COMPLETED