文档

存储桶复制

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 字段来指定 delete 和/或 delete-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 操作。这降低了写入操作缓慢的风险,但可能以远程位置出现过时或丢失的对象为代价。

您必须在配置远程目标时使用带有 add 标志的 mc admin bucket remote add 命令明确启用同步复制。

复制内部机制

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

复制过程

MinIO 使用一个复制排队系统,有多个并发的复制工作者在该队列上操作。MinIO 不断地工作以复制和移除队列中的对象,同时扫描新的未复制对象以添加到队列中。

版本 RELEASE.2022-07-18T17-49-40Z 中的变更:MinIO 会将失败的复制操作排队,并最多重试这些操作三(3)次。

MinIO 会将三次尝试后仍复制失败的操作从队列中移除。扫描器可以在稍后时间发现那些受影响的对象,并重新将它们排队进行复制。

版本 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

English 中文