对象管理
An 对象是二进制数据,例如图像、音频文件、电子表格,甚至是二进制可执行代码。 术语"Binary Large Object"或"blob"有时与对象存储相关联,尽管blob的大小可以从几字节到几太字节不等。 像MinIO这样的对象存储平台提供专用工具和功能,用于通过标准S3兼容API存储、列出和检索对象。
驱动器独占访问
MinIO需要 独家对象存储所提供的驱动器或卷的访问权限。 任何其他进程、软件、脚本或人员均不得执行任何直接对提供给 MinIO 的驱动器或卷,或 MinIO 置于其上的对象或文件执行操作。
除非得到 MinIO 工程团队指示,否则不得使用脚本或工具直接修改、删除或移动所提供驱动器上的任何数据分片、校验分片或元数据文件,包括在不同驱动器或节点间的转移操作。 此类操作极有可能导致大范围损坏和数据丢失,超出 MinIO 的自我修复能力范围。
MinIO 对象存储采用存储桶用于组织对象。
存储桶类似于文件系统中的顶级驱动器、文件夹或目录。/mnt/data or 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 supports multiple levels of nested directories and objects using prefixes to support even the most dynamic object storage workloads.
MinIO automatically infers the intermediate prefixes, such as/articles/john.doe从完整对象路径中使用/作为分隔符。
客户端和管理员不应手动创建这些前缀。
客户端和管理员都不会手动创建中间前缀,因为MinIO会自动从对象名称推断它们。
Path vs Virtual Host Bucket Access
MinIO 同时支持路径样式(默认)或virtual-host bucket lookups.
例如,考虑一个MinIO部署,其分配的完全限定域名(FQDN)为minio.example.net:
使用路径样式查找时,应用程序需指定存储桶的完整路径,例如
minio.example.net/mybucket.通过虚拟主机查找,应用程序将存储桶指定为子域名,例如
mybucket.minio.example.net/.
某些应用程序在对 MinIO 执行 S3 操作时可能需要或期望支持虚拟主机查找。
要启用虚拟主机存储桶查找,您必须设置MINIO_DOMAIN环境变量设置为FQDN解析到 MinIO 部署的地址。
如果你配置MINIO_DOMAIN你好必须将指定 FQDN 的所有子域名视为专门分配用作存储桶名称。
与这些域名冲突的任何 MinIO 服务(例如复制目标)可能会因命名冲突而出现意外或异常行为。
例如,如果设置MINIO_DOMAIN=minio.example.net你好无法分配任何子域名minio.example.net(以...的形式*.minio.example.net) 到任何 MinIO 服务或目标。
这包括用于连接的主机名桶, 批次或站点复制.
重要
对于部署TLS 已启用你好必须确保您的 TLS 证书 SANs 覆盖指定最左侧域名的所有子域名MINIO_DOMAIN.
例如,这个例子MINIO_DOMAIN=minio.example.net需要包含子域的 TLS SANminio.example.net您可以设置一个额外的 TLS SAN*.minio.example.net以适当覆盖子域名命名空间。
TLS通配符规则阻止链接到额外的子域级别,因此具有通配符SAN的TLS证书*.example.net会不覆盖虚拟主机查找*.minio.example.net.
对象组织与规划
管理员通常控制存储桶的创建和配置。 客户端应用程序随后可以使用S3-compatible SDKs创建、列出、获取和删除MinIO 部署中的对象。 因此,客户端驱动给定存储桶或前缀内的整体数据层次结构,管理员可以通过以下方式进行控制策略授予或拒绝对某个操作或资源的访问权限。
MinIO 没有硬性阈值关于给定部署中的存储桶、对象或前缀数量。 MinIO 部署所依赖的硬件和网络性能可能会对特定前缀或存储桶中的对象数量产生实际限制。 具体来说,使用较慢驱动器或网络基础设施的硬件在对象层级扁平的存储桶或前缀中往往表现较差。 有关其他需要考虑的因素、阈值或限制,请参阅阈值和限制.
请将以下要点作为客户端应用程序工作负载模式的一般指导原则:
对于硬件配置适中或注重成本的部署,应将工作负载架构设计为以每个前缀10,000个对象作为基准目标。 根据实际工作负载的基准测试和监控结果逐步提高此目标,直至达到硬件可有效处理的合理上限。
高性能或企业级部署硬件通常能够处理包含数百万或更多对象的前缀。
MinIO SUBNET企业账户可以利用年度架构审查作为部署和维护策略的一部分,以确保依赖MinIO的项目获得长期性能和成功。
关于限制前缀内容好处的深入讨论,请参阅文章优化 S3 性能.
Note
MinIO 不支持\ or :对象名称中的字符,无论Windows文件系统是否支持这些字符。
使用/作为对象名称中的分隔符,让 MinIO 自动创建文件夹结构前缀.
Object Versioning
客户端在写入、列出、获取时的具体行为删除对存储桶的操作取决于该存储桶的版本控制状态:
操作 |
版本控制已启用 |
版本控制已禁用 | 已暂停 |
|---|---|---|
|
创建对象的新完整版本作为“最新”版本,并分配唯一版本ID |
在命名空间匹配时创建具有覆盖功能的对象。 |
|
默认检索对象的最新版本 支持通过版本ID检索任何对象版本。 |
检索该对象 |
|
检索指定存储桶或前缀中的对象最新版本 支持检索所有对象及其关联的版本ID。 |
检索指定存储桶或前缀下的所有对象 |
|
为对象创建一个0字节的“删除标记”作为“最新版本”(软删除) 支持通过版本ID删除任何对象版本(硬删除)。 硬删除操作无法撤销。 请参考对象删除欲了解更多信息。 |
删除该对象 |
看Bucket Versioning获取更完整的文档。
对象标记
MinIO supports adding custom tags to an object.
A tag is a key-value pair included in the metadata of an object.
Tags can be used to control access with policies or locate an object withmc find --tags.
MinIO 支持为对象添加最多 10 个自定义标签。
有关设置标签的更多信息,请参阅mc tag set.
对象保留
MinIO 对象锁定(“对象保留”)强制执行一次写入多次读取(WORM)不可变性以保护版本化对象from deletion. MinIO 支持两种基于时长的对象保留和无限期法律保留保留期.
针对WORM锁定的对象的删除操作取决于具体的操作类型:
未指定版本ID的删除操作会导致创建“删除标记”
指定已锁定对象版本ID的删除操作将导致WORM锁定错误
您只能在首次创建存储桶时启用对象锁定。 启用存储桶锁定也会同时启用版本控制.
MinIO Object Locking 提供关键数据保留合规性,并满足 SEC17a-4(f)、FINRA 4511(C) 和 CFTC 1.31(c)-(d) 要求,依据Cohasset Associates.
看MinIO 对象锁定和对象删除获取更完整的文档。
对象生命周期管理
MinIO 对象生命周期管理允许创建基于时间或日期的规则,实现对象的自动转移或过期。 对于对象转移,MinIO 会自动将对象移动到配置的远程存储层。 对于对象过期,MinIO 会自动删除对象。
MinIO 对存储桶中的对象应用生命周期管理规则版本化和非版本化存储桶使用与正常客户端操作相同的行为。 您可以指定处理最新对象版本、非当前对象版本或同时处理两者的转换或生命周期规则。
MinIO 生命周期管理旨在实现与 Amazon S3 的行为和语法兼容性AWS S3 生命周期管理MinIO 使用 JSON 来描述生命周期管理规则。 从 S3 或类似兼容平台导入规则时,可能需要与 XML 进行相互转换。
看对象生命周期管理获取更完整的文档。
目标存储桶注意事项
MinIO 确实不要求目标存储桶与源存储桶的对象管理或版本控制配置相匹配。 目标存储桶可能如果定义得当,它会有自己的一套对象管理规则。
目标存储桶应当不有自己的过期规则或附加分层规则。 过期规则可能导致仍在源存储桶中使用的分层数据被移除。 分层到额外的远程存储会在热层与其数据之间增加额外的网络跳转,同时也会增加操作复杂性。
你好可能在远程存储桶上配置对象锁定或版本控制。
在目标存储桶上启用版本控制或对象锁定可能会产生以下影响:
目标存储桶上设置的对象锁定可能会阻止所需操作
delete源存储桶中的操作完成。MinIO 使用自己的对象分层功能
UUID所以,在目标存储桶上启用版本控制充其量是多余的。目标存储效率降低,因为
delete操作导致创建了一个DeleteMarker而不是释放空间。源存储桶和目标存储桶上的重复删除标记。
远程数据的独占访问
MinIO必须有独家对目标存储桶的访问权限。 其他任何用户、进程、应用程序或资源都不应具有对目标存储桶的任何访问权限,也不应对其执行任何操作。
对所有已转换对象的访问必须只能通过 S3 API 操作经由 MinIO 进行。 手动修改已分层迁移的对象——无论是修改"热"MinIO 层上的元数据,还是远程"温/冷"层上的对象数据——都可能导致该对象数据丢失。
MinIO 忽略远程存储桶或存储桶前缀中未被 MinIO 部署显式管理的任何对象。自动分层和透明对象检索依赖于以下假设:
远程存储上的对象没有外部变更、迁移或删除。
远程存储桶上没有生命周期管理规则(如转换或过期)。
为便于此专属访问,授予生命周期管理用户read, write和delete对其目标存储桶的访问权限政策所有其他策略都应deny访问目标存储桶。
冲突对象
应用程序必须为所有对象分配不冲突的唯一键。 这包括避免创建名称可能与父对象或同级对象冲突的对象。 MinIO会在冲突位置对LIST操作返回空集合。
例如,以下操作会导致命名空间冲突
PUT data/invoices/2024/january/vendors.csv
PUT data/invoices/2024/january <- collides with existing object prefix
PUT data/invoices/2024/january
PUT data/invoices/2024/january/vendors.csv <- collides with existing object
虽然您可以对这些对象执行 GET 或 HEAD 操作,但名称冲突会导致 LIST 操作返回空结果集/invoices/2024/januarypath.