桶复制
MinIO支持源存储桶和目标存储桶之间对象的 服务器端和客户端复制。
- 服务器端存储桶复制
配置每个存储桶规则,以便在MinIO部署之间自动同步对象。 您配置存储桶复制规则的部署充当
source
,而配置为远程部署充当target
。 MinIO将规则应用作对象写操作(例如PUT
)的一部分,并自动同步新对象 和 对象变更,例如新对象版本或更改对象元数据。MinIO的服务端存储桶复制仅支持与远程复制目标相同版本的MinIO集群。
- 客户端存储桶复制
使用命令行工具process在同一S3兼容集群中的两个存储桶之间 或 在两个独立的S3兼容集群之间同步对象。 使用
mc mirror
进行客户端复制支持MinIO到S3及类似的复制配置。
Bucket vs 站点复制
存储桶复制与 站点复制 是不同的,两者互斥。
存储桶复制同步存储桶级别的数据,例如存储桶前缀路径和对象。
您可以随时配置存储桶复制,远程MinIO部署可能在复制目标存储桶上具有现有数据。
站点复制扩展了存储桶复制的范围,包括 IAM、安全令牌、访问密钥和存储桶级别配置。
通常在最初部署MinIO同级站点时配置站点复制。 只有一个站点可以在初始配置时保存任何存储桶或对象。
服务器端存储桶复制
MinIO的服务器端存储桶复制是一种自动的存储桶级别配置,它在源存储桶和目标存储桶之间同步对象。 MinIO服务器端复制 需要 源存储桶和目标存储桶是两个独立的MinIO集群,运行相同版本的MinIO Server才能进行。
对于桶的每个写入操作,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 支持复制 delete 操作,其中 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 Trims Empty Object Prefixes on Source and Remote Bucket
如果一个删除操作移除了桶前缀中的最后一个对象,
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
对象。由于/NYE21
前缀 是 明确地 创建的,MinIO 将其保留在原位。
现有对象的复制
MinIO 默认将源存储桶中的现有对象复制到配置的远程位置,类似于 AWS: 在 S3 存储桶之间复制现有对象,但无需联系技术支持的开销。
MinIO 将所有满足复制规则的对象或对象前缀标记为有资格同步到远程集群和存储桶。 MinIO 仅排除那些没有版本 ID 的对象,例如在启用存储桶版本控制之前写入的对象。
您可以在配置或修改存储桶复制规则时禁用现有对象的复制。 在创建或修改时,您必须指定 所有 所需的复制特性:
对于新的复制规则,请从指定给
mc replicate add --replicate
的复制特性列表中排除existing-objects
。对于现有的复制规则,请使用
mc replicate update --replicate
从现有复制特性列表中移除existing-objects
。 新规则 替换 之前的规则。
禁用现有对象复制并不会删除已复制到远程存储桶的任何对象。
同步与异步复制
MinIO 支持为给定的远程目标指定异步(默认)或同步复制。
通过异步复制,MinIO 在将对象放入 replication queue 之前 完成原始的 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
元数据字段。
Replication State |
描述 |
---|---|
|
对象尚未复制。MinIO在对象满足存储桶上配置的复制规则时
应用此状态。MinIO持续扫描尚未进入
复制队列的 对于多站点复制,对象会保持在 |
|
对象已成功复制到远程集群。 |
|
对象未能复制到远程集群。 MinIO 持续扫描尚未进入复制队列的 |
|
该对象本身是从远程源复制的副本。 |
复制过程通常有以下几种流程:
PENDING -> COMPLETED
PENDING -> FAILED -> COMPLETED