文档

对象管理

一个对象是二进制数据,例如图像、音频文件、电子表格,甚至二进制可执行代码。“二进制大对象”或“blob”一词有时与对象存储相关联,尽管 blob 的大小可以从几个字节到几个 TB 不等。像 MinIO 这样的对象存储平台提供了用于使用标准 S3 兼容 API 存储、列出和检索对象的专用工具和功能。

对驱动器的独占访问

MinIO**需要**对为对象存储提供的驱动器或卷进行*独占*访问。任何其他进程、软件、脚本或人员都不应对提供给 MinIO 的驱动器或卷或 MinIO 在其上放置的对象或文件执行*任何*操作。

除非 MinIO 工程师指示,否则不要使用脚本或工具直接修改、删除或移动提供的驱动器上的任何数据分片、奇偶校验分片或元数据文件,包括从一个驱动器或节点移动到另一个驱动器或节点。此类操作很可能导致广泛的损坏和数据丢失,超出 MinIO 的修复能力。

MinIO 对象存储使用存储桶来组织对象。存储桶类似于文件系统中的顶级驱动器、文件夹或目录(/mnt/dataC:\),其中每个存储桶可以容纳任意数量的对象。

MinIO 服务器上的对象结构可能类似于以下结构

/ #root
/images/
   2020-01-02-MinIO-Diagram.png
   2020-01-03-MinIO-Advanced-Deployment.png
   MinIO-Logo.png
/videos/
   2020-01-04-MinIO-Interview.mp4
/articles/
   /john.doe/
      2020-01-02-MinIO-Object-Storage.md
      2020-01-02-MinIO-Object-Storage-comments.json
   /jane.doe/
      2020-01-03-MinIO-Advanced-Deployment.png
      2020-01-02-MinIO-Advanced-Deployment-comments.json
      2020-01-04-MinIO-Interview.md

使用示例结构,管理员将创建/images/videos/articles存储桶。客户端应用程序使用对象的完整“路径”(包括所有中间前缀)将对象写入这些存储桶。

MinIO 支持使用前缀进行多级嵌套目录和对象,以支持最动态的对象存储工作负载。MinIO 使用/作为分隔符,从完整对象路径自动推断中间前缀,例如/articles/john.doe。客户端和管理员不应手动创建这些前缀。

客户端和管理员都不会手动创建中间前缀,因为 MinIO 会根据对象名称自动推断它们。

路径与虚拟主机存储桶访问

MinIO 支持 路径风格(默认)或 虚拟主机存储桶查找 两种方式。

例如,考虑一个 MinIO 部署,其分配的完全限定域名 (FQDN) 为 minio.example.net

  • 使用路径风格查找,应用程序指定存储桶的完整路径,例如 minio.example.net/mybucket

  • 使用虚拟主机查找,应用程序将存储桶指定为子域名,例如 mybucket.minio.example.net/

某些应用程序在对 MinIO 执行 S3 操作时可能需要或期望虚拟主机查找支持。要启用虚拟主机存储桶查找,必须将 MINIO_DOMAIN 环境变量设置为解析到 MinIO 部署的 FQDN

如果配置了 MINIO_DOMAIN,则**必须**将指定 FQDN 的所有子域视为专门分配用于存储桶名称。由于冲突,任何与这些域冲突的 MinIO 服务(例如复制目标)可能会表现出意外或不希望有的行为。

例如,如果设置 MINIO_DOMAIN=minio.example.net,则**不能**将 minio.example.net 的任何子域(以 *.minio.example.net 的形式)分配给任何 MinIO 服务或目标。这包括与 存储桶批处理站点复制 一起使用的主机名。

重要

对于启用了 TLS 的部署,**必须**确保您的 TLS 证书 SAN 涵盖指定给 MINIO_DOMAIN 的最左侧域的所有子域。

例如,MINIO_DOMAIN=minio.example.net 的示例需要一个涵盖 minio.example.net 子域的 TLS SAN。您可以设置一个额外的 TLS SAN *.minio.example.net 以适当地覆盖子域命名空间。

TLS 通配符规则阻止链接到其他子域级别,因此,具有 *.example.net 通配符 SAN 的 TLS 证书**不会**涵盖 *.minio.example.net 上的虚拟主机查找。

对象组织和规划

管理员通常控制存储桶的创建和配置。然后,客户端应用程序可以使用 兼容 S3 的 SDK 在 MinIO 部署上创建、列出、检索和 删除 对象。因此,客户端驱动给定存储桶或前缀内数据的整体层次结构,管理员可以使用 策略 来控制权限,以授予或拒绝对操作或资源的访问权限。

MinIO 对给定部署上的存储桶、对象或前缀的数量没有硬性 阈值。MinIO 部署的基础硬件和网络的相对性能可能会为给定前缀或存储桶中的对象数量设置实际限制。具体而言,使用较慢驱动器或网络基础设施的硬件在具有扁平对象层次结构的存储桶或前缀中往往表现出较差的性能。有关其他注意事项、阈值或需要牢记的限制,请参阅 阈值和限制

将以下几点作为客户端应用程序工作负载模式的一般指南

  • 具有适度或预算型硬件的部署应将其工作负载架构设计为以每个前缀 10,000 个对象为基准。根据基准测试和对实际工作负载的监控,将此目标提高到硬件能够有效处理的程度。

  • 具有高性能或企业级 硬件 的部署通常可以处理具有数百万个或更多对象的的前缀。

MinIO SUBNET 企业帐户可以使用年度架构审查作为部署和维护策略的一部分,以确保 MinIO 相关项目的长期性能和成功。

有关限制前缀内容的好处的更深入讨论,请参阅有关 优化 S3 性能 的文章。

对象版本控制

Object with Multiple Versions

在存储桶上执行写入、列出、获取或 删除 操作的特定客户端行为取决于该存储桶的版本控制状态

操作

已启用版本控制

已禁用/已暂停版本控制

PUT(写入)

将对象的新完整版本创建为“最新”版本并分配唯一的版本 ID

创建对象,并在命名空间匹配时覆盖。

GET(读取)

默认情况下检索对象的最新版本

支持通过版本 ID 检索任何对象版本。

检索对象

LIST(读取)

检索指定存储桶或前缀中对象的最新版本

支持检索所有对象及其关联的版本 ID。

检索指定存储桶或前缀中的所有对象

DELETE(写入)

为对象创建 0 字节的“删除标记”作为“最新”(软删除)

支持通过版本 ID 删除任何对象版本(硬删除)。您无法撤消硬删除操作。

有关更多信息,请参阅 对象删除

删除对象

有关更完整的文档,请参阅 存储桶版本控制

对象标记

MinIO 支持向对象添加自定义标签。标签是包含在对象元数据中的键值对。标签可用于使用策略控制访问或使用 mc find --tags 定位对象。

MinIO 支持向对象添加最多 10 个自定义标签。

有关设置标签的更多信息,请参阅 mc tag set

对象保留

MinIO 对象锁定(“对象保留”)强制执行写入一次读取多次 (WORM) 不可变性,以保护 版本化对象 免遭删除。MinIO 支持 基于期限的对象保留无限期法律保留

30 Day Locked Objects

针对 WORM 锁定对象的删除操作取决于具体操作

  • 不指定版本 ID 的删除操作会导致创建“删除标记”

  • 指定锁定对象的版本 ID 的删除操作会导致 WORM 锁定错误

您只能在首次创建存储桶时启用对象锁定。启用存储桶锁定也会启用 版本控制

MinIO 对象锁定提供关键数据保留合规性,并满足根据 Cohasset Associates 的 SEC17a-4(f)、FINRA 4511(C) 和 CFTC 1.31(c)-(d) 要求。

有关更完整的文档,请参阅 MinIO 对象锁定对象删除

对象生命周期管理

MinIO 对象生命周期管理允许为基于时间或日期的对象自动转换或过期创建规则。对于对象转换,MinIO 会自动将对象移动到配置的远程存储层。对于对象过期,MinIO 会自动删除对象。

MinIO 使用与普通客户端操作相同的行为,在 版本化和非版本化存储桶 上应用生命周期管理规则。您可以指定处理最新对象版本、非当前对象版本或两者的转换或生命周期规则。

MinIO 生命周期管理构建为与 AWS S3 生命周期管理 在行为和语法上兼容。MinIO 使用 JSON 来描述生命周期管理规则。对于从 S3 或类似兼容平台导入创建的规则,可能需要转换为或从 XML 转换。

有关更完整的文档,请参阅 对象生命周期管理

目标存储桶注意事项

MinIO **不需要**目标桶与源桶的对象管理或版本控制配置匹配。目标桶**可以**拥有自己的对象管理规则集,如果谨慎定义的话。

目标桶**不应该**有自己的过期或额外分层规则。过期规则可能导致源桶仍在使用的分层数据被删除。分层到额外的远程存储会在热层与其数据之间增加额外的网络跳数,同时也会增加操作复杂性。

您**可以**在远程桶上配置对象锁定或版本控制。

在目标桶上启用版本控制或对象锁定可能会产生以下影响

  • 在目标桶上设置的对象锁定可能会阻止来自源桶的所需delete操作完成。

  • MinIO 使用其自己的UUID对对象进行分层,因此目标桶上的版本控制充其量是冗余的。

  • 降低目标存储的效率,因为delete操作会导致创建DeleteMarker而不是释放空间。

  • 源桶和目标桶上的重复删除标记。

远程数据独占访问

MinIO **必须**对目标桶拥有独占访问权限。任何其他用户、进程、应用程序或资源都不应该访问或对目标桶执行任何操作。

对已转换对象的所有访问**必须**通过 MinIO 仅通过 S3 API 操作进行。手动修改已转换的对象——无论是“热”MinIO 层上的元数据还是远程“温/冷”层上的对象数据——都可能导致该对象数据丢失。

MinIO 会忽略远程桶或桶前缀中任何未由 MinIO 部署明确管理的对象。自动转换和透明对象检索依赖于以下假设

  • 远程存储上的对象没有外部修改、迁移或删除。

  • 远程存储桶上没有生命周期管理规则(例如转换或过期)。

为了促进这种独占访问,请在目标桶的策略中授予生命周期管理用户readwritedelete访问权限。所有其他策略都应deny对目标桶的访问。