存储桶复制
MinIO 支持在源存储桶和目标存储桶之间进行对象服务器端和客户端复制。
- 服务器端存储桶复制
配置每个存储桶的规则,以自动在 MinIO 部署之间同步对象。您配置存储桶复制规则的部署充当“源”,而配置的远程部署充当“目标”。MinIO 将规则应用于对象写入操作(例如
PUT
)的一部分,并自动同步新对象 *和* 对象更改,例如新对象版本或对象元数据更改。MinIO 服务器端存储桶复制仅支持远程复制目标上相同版本的 MinIO 集群。
- 客户端存储桶复制
使用命令过程在同一 S3 兼容集群内的存储桶之间 *或* 两个独立的 S3 兼容集群之间同步对象。使用
mc mirror
的客户端复制支持 MinIO 到 S3 和类似的复制配置。
存储桶复制与站点复制
存储桶复制与 站点复制 不同,并且是互斥的。
存储桶复制在存储桶级别同步数据,例如存储桶前缀路径和对象。
您可以随时配置存储桶复制,并且远程 MinIO 部署可能在复制目标存储桶上具有预先存在的数据。
站点复制扩展存储桶复制,以包括 IAM、安全令牌、访问密钥和存储桶级配置。
站点复制通常在最初部署 MinIO 对等站点时配置。在初始配置时,只有一个站点可以保存任何存储桶或对象。
服务器端存储桶复制
MinIO 服务器端存储桶复制是一种自动的存储桶级配置,用于在源存储桶和目标存储桶之间同步对象。MinIO 服务器端复制 *要求* 源存储桶和目标存储桶是两个单独的 MinIO 集群,运行相同的 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 在源和远程桶上修剪空对象前缀
如果删除操作删除了桶前缀中的最后一个对象,MinIO 会递归删除从前缀到桶根的每个空部分。MinIO 仅将递归删除应用于作为对象写入操作**隐式**创建的前缀 - 也就是说,该前缀不是使用显式目录创建命令(如mc mb
)创建的。
如果复制规则启用了复制删除操作,则复制过程也会在目标 MinIO 集群上应用隐式前缀修剪行为。
例如,考虑一个名为 photos
的桶,其中包含以下对象前缀
photos/2021/january/myphoto.jpg
photos/2021/february/myotherphoto.jpg
photos/NYE21/NewYears.jpg
photos/NYE21
是使用mc mb
**显式**创建的**唯一**前缀。所有其他前缀都是作为写入位于该前缀的对象的一部分**隐式**创建的。
一个命令删除了
myphoto.jpg
。MinIO 会自动修剪空的/janaury
前缀。然后,一个命令删除了
myotherphoto.jpg
。MinIO 会自动修剪/february
前缀**以及**现在为空的/2021
前缀。一个命令删除了
NewYears.jpg
对象。MinIO 会保留/NYE21
前缀,因为它已**显式**创建。
现有对象的复制
默认情况下,MinIO 会将源桶中的现有对象复制到配置的远程存储,类似于AWS:在 S3 桶之间复制现有对象,无需联系技术支持的额外开销。
MinIO 将满足复制规则的所有对象或对象前缀标记为可同步到远程集群和桶。MinIO 仅排除那些没有版本 ID 的对象,例如在启用桶版本控制之前写入的对象。
您可以在配置或修改桶复制规则时禁用现有对象复制。您必须在创建或修改期间指定**所有**所需的复制功能。
对于新的复制规则,请从指定给
mc replicate add --replicate
的复制功能列表中排除"existing-objects"
。对于现有复制规则,请使用
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 会在复制操作连续失败三次后将其从队列中移除。扫描器可以在稍后时间拾取受影响的对象并将其重新排队以进行复制。
版本 RELEASE.2022-08-11T04-37-28Z 中已更改: 在执行列表或任何 GET
或 HEAD
API 方法时,失败或挂起的复制操作会自动重新排队。例如,在远程位置恢复联机后,使用 mc stat
、mc cat
或 mc ls
会重新排队复制操作。
MinIO 会根据对象的复制状态设置 X-Amz-Replication-Status
元数据字段。
复制状态 |
描述 |
---|---|
|
对象尚未复制。如果对象满足存储桶上配置的复制规则之一,MinIO 将应用此状态。MinIO 会持续扫描尚未进入复制队列的 对于多站点复制,对象将保持 |
|
对象已成功复制到远程集群。 |
|
对象复制到远程集群失败。 MinIO 会持续扫描尚未进入复制队列的 |
|
对象本身就是来自远程源的副本。 |
复制过程通常具有以下流程之一
PENDING -> COMPLETED
PENDING -> FAILED -> COMPLETED