对象管理
一个对象 是二进制数据,例如图像、音频文件、电子表格,甚至二进制可执行代码。术语“二进制大型对象”或“blob”有时与对象存储相关联,尽管 blob 的大小可以从几个字节到几个 TB 不等。像 MinIO 这样的对象存储平台提供用于使用标准 S3 兼容 API 存储、列出和检索对象的专用工具和功能。
对驱动器的独占访问
MinIO 需要 对为对象存储提供的驱动器或卷进行独占访问。任何其他进程、软件、脚本或人员不应直接对提供给 MinIO 的驱动器或卷或 MinIO 在其上放置的对象或文件执行任何操作。
除非 MinIO 工程师指示,否则不要使用脚本或工具直接修改、删除或移动提供的驱动器上的任何数据分片、奇偶校验分片或元数据文件,包括从一个驱动器或节点到另一个驱动器或节点。此类操作很可能导致 MinIO 无法修复的广泛损坏和数据丢失。
MinIO 对象存储使用桶 来组织对象。桶类似于文件系统 (/mnt/data
或 C:\
) 中的顶级驱动器、文件夹或目录,每个桶可以容纳任意数量的对象。
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 部署,其分配的完全限定域名 (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。您可以设置 *.minio.example.net
的附加 TLS SAN 以适当地涵盖子域命名空间。
TLS 通配符规则阻止链接到其他子域级别,因此具有 *.example.net
的通配符 SAN 的 TLS 证书不会涵盖 *.minio.example.net
的虚拟主机查找。
对象组织和规划
管理员通常控制存储桶的创建和配置。然后,客户端应用程序可以使用 与 S3 兼容的 SDK 在 MinIO 部署中创建、列出、检索和 删除 对象。因此,客户端驱动给定存储桶或前缀内数据的整体层次结构,管理员可以使用 策略 对操作或资源进行控制,以授予或拒绝访问权限。
MinIO 对给定部署中的存储桶、对象或前缀的数量没有严格的 阈值。MinIO 部署的底层硬件和网络的相对性能可能会对给定前缀或存储桶中的对象数量造成实际限制。具体来说,使用速度较慢的驱动器或网络基础设施的硬件在具有扁平对象层次结构的存储桶或前缀中往往表现出较差的性能。有关其他注意事项、阈值或需要牢记的限制,请参阅 阈值和限制。
请将以下几点作为客户端应用程序工作负载模式的一般指南
具有适度或以预算为中心的硬件的部署应该将其工作负载架构为以每个前缀 10,000 个对象为基准。根据基准测试和对真实世界工作负载的监控,将此目标提高到硬件可以有效处理的程度。
具有高性能或企业级 硬件 的部署通常可以处理具有数百万个或更多对象的存储桶。
MinIO SUBNET 企业帐户可以利用年度架构审查作为部署和维护策略的一部分,以确保依赖 MinIO 的项目的长期性能和成功。
有关限制前缀内容的好处的更深入讨论,请参阅有关 优化 S3 性能 的文章。
对象版本控制
在存储桶上进行写入、列出、获取或 删除 操作的特定客户端行为取决于该存储桶的版本控制状态
操作 |
版本控制已启用 |
版本控制已禁用 | 已暂停 |
---|---|---|
|
创建对象的全新完整版本作为“最新”版本,并分配唯一的版本 ID |
创建对象,并在命名空间匹配时覆盖。 |
|
默认情况下检索对象的最新版本 支持通过版本 ID 检索任何对象版本。 |
检索对象 |
|
检索指定存储桶或前缀中对象的最新版本 支持检索所有对象及其关联的版本 ID。 |
检索指定存储桶或前缀中的所有对象 |
|
为对象创建 0 字节的“删除标记”作为“最新”版本(软删除) 支持通过版本 ID 删除任何对象版本(硬删除)。您无法撤消硬删除操作。 有关更多信息,请参阅 对象删除。 |
删除对象 |
有关更完整的文档,请参阅 存储桶版本控制。
对象标记
MinIO 支持向对象添加自定义标记。标记是对象元数据中包含的键值对。可以使用标记来控制使用策略的访问权限或使用 mc find --tags
查找对象。
MinIO 支持向对象添加最多 10 个自定义标记。
有关设置标记的更多信息,请参阅 mc tag set
。
对象保留
MinIO 对象锁定(“对象保留”)对 版本化对象 强制执行一次写入多次读取 (WORM) 不可变性,以防止删除。MinIO 支持 基于时间的对象保留 和 无限期法律保留。
对 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 来描述生命周期管理规则。可能需要进行从 XML 到 JSON 的转换或从 JSON 到 XML 的转换,以便导入在 S3 或类似兼容平台上创建的规则。
有关更完整的文档,请参阅 对象生命周期管理。
目标存储桶注意事项
MinIO 不需要目标存储桶与源存储桶匹配对象管理或版本控制配置。目标存储桶可以具有自己的对象管理规则集(如果仔细定义)。
目标存储桶不应具有自己的过期规则或额外的分层规则。过期规则会导致删除源存储桶仍在使用的分层数据。将数据分层到额外的远程存储会增加热层级与其数据之间的额外网络跃迁,同时也会增加操作复杂性。
您可以在远程存储桶上配置对象锁定或版本控制。
在目标存储桶上启用版本控制或对象锁定可能会产生以下影响
在目标存储桶上设置的对象锁定可能会阻止源存储桶上的预期
delete
操作完成。MinIO 使用自己的
UUID
分层对象,因此目标存储桶上的版本控制充其量是多余的。目标存储桶上的存储效率降低,因为
delete
操作会创建DeleteMarker
,而不是释放空间。源存储桶和目标存储桶上的重复删除标记。
远程数据独占访问
MinIO **必须**对目标桶有*独占*访问权限。其他用户、进程、应用程序或资源不应该访问或对目标桶执行任何操作。
所有对已转换对象的访问**必须**仅通过 MinIO 通过 S3 API 操作进行。手动修改已转换的对象——无论是“热” MinIO 层上的元数据还是远程“暖/冷”层上的对象数据——都可能导致该对象数据的丢失。
MinIO 忽略远程桶或桶前缀中任何未由 MinIO 部署显式管理的对象。自动转换和透明对象检索依赖于以下假设
远程存储上的对象没有外部修改、迁移或删除。
远程存储桶上没有生命周期管理规则(例如转换或过期)。
为了方便这种独占访问,在它的 策略 中授予生命周期管理用户 read
、write
和 delete
访问目标桶的权限。所有其他策略应该 deny
访问目标桶。