存储桶复制
MinIO支持在源存储桶和目标存储桶之间进行服务端与客户端的对象复制。
- 服务器端存储桶复制
为MinIO部署之间的对象自动同步配置按存储桶规则。 配置存储桶复制规则的部署作为"源",而配置的远程部署作为"目标"。 MinIO会在对象写入操作(例如PUT)时应用这些规则。
PUT并自动同步新对象和对象变更,例如新对象版本或对象元数据的更改。MinIO 服务端存储桶复制仅支持版本完全一致的 MinIO 集群作为远程复制目标。
- 客户端存储桶复制
使用 process 命令在同一 S3 兼容集群内的存储桶之间同步对象。or在两个独立的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部署之间的对象多站点复制
重新同步(灾难恢复)
Resynchronization primarily supports recovery after partial or total loss of the
data on a MinIO deployment using a healthy deployment in the replica
configuration. Use the
再同步主要支持在使用副本配置的健康部署中,对MinIO部署上的数据部分或全部丢失后进行恢复。使用mc replicate resync命令完全
重新同步远程目标(mc admin bucket remote) 使用指定的源存储桶。
重新同步过程会检查源存储桶中的所有对象,针对所有配置的包含现有对象复制对于每个匹配规则的对象,重新同步过程会将该对象放入复制队列中。队列无论对象的当前复制状态.
MinIO 会跳过同步那些远程副本与源完全匹配的对象,包括对象元数据。除此之外,MinIO 不会根据目标的现有内容对队列进行优先级排序或修改。
mc replicate resync在存储桶级别运行,不不支持前缀级别的粒度。在大型存储桶上启动重新同步可能会导致复制相关负载和流量的显著增加。请谨慎使用此命令,仅在必要时使用。
对于具有对象转换(分层)配置完成后,复制再同步会将对象以非转移状态恢复,且不包含任何关联的转移元数据。因此,先前转移到远程存储的任何数据将与远程MinIO部署永久断开连接。对于在远程配置中指定了明确人类可读前缀的分层配置,您可以安全地清除该前缀下已转移的数据,以避免因"丢失"数据而产生相关成本。
删除操作的复制
MinIO 支持复制删除操作,其中 MinIO 同步 删除特定对象版本和新删除标记. Delete operation 复制使用相同的复制过程如同所有其他复制操作一样。
MinIO 需要显式启用版本化删除和删除标记复制功能。使用mc replicate add --replicate字段用于
指定两者或其中之一delete和delete-marker以分别启用版本化删除和删除标记复制。要同时启用两者,请使用逗号分隔符同时指定这两个字符串delete,delete-marker.
对于删除标记复制,MinIO在删除操作创建删除标记后开始复制过程。MinIO使用X-Minio-Replication-DeleteMarker-Status用于跟踪删除标记复制状态的元数据字段。主动-主动replication configurations, MinIO may produce duplicate delete markers if
both clusters concurrently create a delete marker for an object
在复制配置中,如果两个集群同时为某个对象创建删除标记,MinIO 可能会产生重复的删除标记or如果一个或两个集群在复制事件同步之前就已关闭。
对于复制特定对象版本的删除操作,MinIO 将该对象版本标记为PENDING直到复制完成。一旦远程目标删除该对象版本,MinIO 将在源端删除该对象。
虽然此过程确保近乎同步的版本删除,但可能导致列出操作在初始删除操作后仍返回该对象版本。MinIO 使用X-Minio-Replication-Delete-Status用于
跟踪删除版本复制状态。
MinIO 仅复制显式的客户端驱动的删除操作。MinIO 不会不从应用程序中删除的复制对象生命周期管理过期规则. 对于主动-主动配置,设置相同的 过期规则全部复制存储桶的对象过期策略,确保对象过期策略的一致性应用。
MinIO 修剪源存储桶和远程存储桶中的空对象前缀
如果删除操作移除了存储桶前缀中的最后一个对象,MinIO
会递归地删除该前缀的每个空部分,直到存储桶根目录。
MinIO 仅对创建的前缀应用递归删除隐式地作为对象写入操作的一部分 - 也就是说,此前缀不是通过显式目录创建命令(如mc mb.
如果复制规则启用了复制删除操作,复制过程也在目标 MinIO 集群上应用隐式前缀修剪行为。
例如,考虑一个存储桶photos使用以下对象前缀:
photos/2021/january/myphoto.jpgphotos/2021/february/myotherphoto.jpgphotos/NYE21/NewYears.jpg
photos/NYE21是仅使用显式创建的前缀mc mb所有其他前缀都是隐式地作为写入该前缀处对象的一部分创建。
一条命令移除
myphoto.jpgMinIO 会自动修剪空置的/janauryprefix.然后一个命令移除
myotherphoto.jpg. MinIO 自动 修剪/februaryprefix和现在空着的/2021prefix.一个命令移除
NewYears.jpgobject. MinIO 保留/NYE21前缀保持不变,因为它已经就位明确地已创建。
现有对象的复制
MinIO 默认将源存储桶中的现有对象复制到配置的远程目标,类似于AWS: 在S3存储桶之间复制现有对象无需联系技术支持的开销。
MinIO 将所有满足复制规则的对象或对象前缀标记为符合同步到远程集群和存储桶的条件。 MinIO 仅排除那些没有版本 ID 的对象,例如在存储桶上启用版本控制之前写入的对象。
您可以在配置或修改存储桶复制规则时禁用现有的对象复制。 您必须指定全部创建或修改时所需的复制功能:
对于新的复制规则,请排除
"existing-objects"从指定的复制功能列表中mc replicate add --replicate.对于现有的复制规则,进行移除
"existing-objects"从现有复制功能列表中使用mc replicate update --replicate新规则替换之前的规则。
禁用现有对象复制不会移除已复制到远程存储桶的任何对象。
同步复制 vs 异步复制
MinIO 支持为指定的远程目标配置异步(默认)或同步复制模式。
使用异步复制,MinIO 完成原始PUT操作之前将对象放入一个复制队列因此,发起请求的客户端可能会看到成功的PUT操作之前对象会被复制。
虽然这可能导致远程对象过时或缺失,但它减轻了因复制负载导致的写入操作缓慢的风险。
使用同步复制,MinIO 尝试复制对象之前完成发起PUT操作。
MinIO 返回成功PUT无论复制尝试是否成功,操作都会继续。
这降低了写入操作变慢的风险,但可能以远程位置存在过时或缺失对象为代价。
您必须在使用时显式启用同步复制来配置远程目标mc admin bucket remote add带有命令的addflag.
Replication Internals
本节记录了内部复制行为,对于使用或实现复制并不关键。本文档严格用于学习和教育目的。
复制过程
MinIO 使用复制队列系统,多个并发复制工作器在该队列上运行。MinIO 持续工作以复制和移除队列中的对象,同时扫描新的未复制对象以添加到队列中。
Changed in version RELEASE.2022-07-18T17-49-40Z:MinIO 会将失败的数据复制操作加入队列,并最多重试三次。
MinIO 会将三次尝试后仍复制失败的操作移出复制队列。 扫描器可以在稍后时间检测到这些受影响的对象,并将它们重新加入复制队列。
Changed in version RELEASE.2022-08-11T04-37-28Z:执行列表或任何操作时,失败或挂起的复制任务会自动重新排队。GET or HEADAPI 方法。
例如,使用mc stat, mc cat, 或mc ls远程位置恢复在线后重新排队复制。
MinIO 设置X-Amz-Replication-Status根据对象的复制状态设置元数据字段:
复制状态 |
描述 |
|---|---|
|
该对象尚未被复制。如果对象满足存储桶上配置的复制规则之一,MinIO 会应用此状态。MinIO 持续扫描 对于多站点复制,对象保留在 |
|
该对象已成功复制到远程集群。 |
|
该对象未能复制到远程集群。 MinIO 持续扫描 |
|
该对象本身是来自远程源的副本。 |
复制过程通常遵循以下流程之一:
PENDING -> COMPLETEDPENDING -> FAILED -> COMPLETED