对象管理
对象 是二进制数据,例如图像、音频文件、电子表格,甚至是二进制可执行代码。 术语 “二进制大对象” 或 “blob” 有时与对象存储相关联,尽管 blob 的大小可以从几个字节到几个 TB。 MinIO 等对象存储平台提供了专用工具和功能,用于使用标准 S3 兼容 API 来存储、列出和检索对象。
Exclusive access to drives
MinIO 要求 专有 对提供给对象存储的驱动器或卷的访问。 其他任何进程、软件、脚本或人员都不得直接对提供给MinIO的驱动器或卷执行 任何 操作,也不得对MinIO放置在其上的对象或文件执行操作。
除非由MinIO工程部门指导,否则不要使用脚本或工具直接修改、删除或移动提供给MinIO的驱动器上的任何数据片段、校验片段或元数据文件,包括从一个驱动器或节点移动到另一个驱动器或节点。 这些操作很可能会导致广泛的数据损坏和丢失,超出了MinIO的修复能力。
MinIO 对象存储使用 buckets 来组织对象。
存储桶类似于文件系统中的顶级驱动器、文件夹或目录 ( /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
存储桶。
客户端应用程序使用该对象的完整 “路径” 将对象写入这些存储桶,包括所有中间前缀 prefixes 。
MinIO 使用前缀支持多层嵌套目录和对象,甚至可以支持最动态的对象存储工作负载。
MinIO 使用 /
作为分隔符自动从完整对象路径推断出中间前缀,例如 /articles/john.doe
。
客户端和管理员不应手动创建这些前缀。
客户端和管理员都不会手动创建中间前缀,因为 MinIO 会自动从对象名称中推断出它们。
路径与虚拟主机存储桶访问
MinIO支持两种访问方式: 路径样式 <VirtualHosting.html#path-style-access>`(默认)或 :s3-docs:`虚拟主机桶查找。
例如,考虑一个具有指定完全限定域名(FQDN)的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_DOMAIN=minio.example.net
,那么您 不能 将 minio.example.net
的任何子域(以 *.minio.example.net
的形式)分配给任何MinIO服务或目标。
这包括用于 桶、 批量 或 站点复制 的主机名。
重要
对于启用了 TLS 的部署,您 必须 确保您的TLS证书的SAN(主题备用名称)覆盖了指定给 MINIO_DOMAIN
的最左边的域的所有子域。
例如,对于 MINIO_DOMAIN=minio.example.net
的示例,需要一个TLS SAN,它覆盖了 minio.example.net
的子域。
您可以设置一个额外的TLS SAN为 *.minio.example.net
,以适当地覆盖子域命名空间。
TLS通配符规则阻止了链接到额外子域层级,这意味着一个带有通配符SAN(例如 *.example.net
)的TLS证书将 不会 覆盖在 *.minio.example.net
处的虚拟主机查找。
对象组织和规划
管理员通常控制存储桶的创建和配置。 然后,客户端应用程序可以使用 S3兼容的 SDKs 在 MinIO 部署上创建、列出、检索和:ref:delete <minio-object-delete>`对象。 因此,客户端驱动给定存储桶或前缀内的数据的整体层次结构,其中管理员可以使用 :ref:`policies <minio-policy> 进行控制,以授予或拒绝对操作或资源的访问。
MinIO 对于给定部署中的存储桶、对象或前缀的数量没有硬性 阈值 。 MinIO 部署底层的硬件和网络的相对性能可能会对给定前缀或存储桶中的对象数量造成实际限制。 具体来说,使用较慢驱动器或网络基础设施的硬件往往在具有平坦对象层次结构的存储桶或前缀中表现出较差的性能。 有关其他注意事项、阈值或需要记住的限制,请查看 阈值和限制 。
请考虑以下几点作为客户端应用程序工作负载模式的一般指导:
- 使用适度或以预算为重点的硬件的部署应将其工作负载构建为以每个前缀 10,000 个对象为基准。
根据对现实世界工作负载的基准测试和监控,将这一目标提高到硬件可以有效处理的范围。
具有高性能或企业级 hardware 的部署通常可以处理具有数百万个或更多对象的前缀。
MinIO SUBNET 企业帐户可以利用年度架构审查作为部署和维护策略的一部分,以确保依赖 MinIO 的项目的长期性能和成功。
有关限制前缀内容的好处的更深入讨论,请参考和阅读有关 优化 S3 性能 的文章。
对象版本控制
对存储桶进行写入、列出、获取或:ref:`delete <minio-object-delete>`操作的特定客户端行为取决于该存储桶的版本控制状态:
Operation |
Versioning Enabled |
Versioning Disabled | Suspended |
---|---|---|
|
创建一个新完整版本的对象作为 “最新” 版本,并分配一个唯一的版本ID |
在匹配命名空间时创建对象并覆盖。 |
|
默认情况下,检索对象的最新版本 支持通过版本ID检索任何对象版本。 |
获取对象 |
|
检索指定桶或前缀下对象的最新版本 支持检索所有对象及其关联的版本ID。 |
检索指定桶或前缀下的所有对象 |
|
为对象创建一个0字节的 “删除标记” 作为 “最新” 版本(软删除) 支持通过版本ID删除任何对象版本(硬删除)。 您无法撤销硬删除操作。 请参阅 minio-object-delete 获取更多信息。 |
删除对象 |
请参阅 桶版本控制 以获取更完整的文档。
对象标记
MinIO支持向对象添加自定义标签。
标签是包含在对象元数据中的一对键值。
标签可以用来通过策略控制访问,或者使用 mc find --tags
查找对象。
MinIO 支持为每个对象添加最多 10 个自定义标签。
有关设置标签的更多信息,请参阅 mc tag set
。
对象保留
MinIO 对象锁定(“对象保留”)强制执行一次写入多次读取 (WORM) 不变性,以保护 版本化对象 免遭删除。 MinIO支持两种对象保留方式: 基于持续时间的对象保留 和 无限期的合法持有保留。
针对 WORM 锁定对象的删除操作取决于具体操作:
不指定版本 ID 的删除操作会导致创建“删除标记”
指定锁定对象版本 ID 的删除操作会导致 WORM 锁定错误
您只能在首次创建存储桶时启用对象锁定。 启用存储桶锁定还可以启用 版本控制.
MinIO 对象锁定提供关键数据保留合规性,并符合 SEC17a-4(f), FINRA 4511(C), 、 CFTC 1.31(c)-(d) 等 合规要求.
请参阅 MinIO对象锁定 和 minio-object-delete 获取更完整的文档。
对象生命周期管理
MinIO 对象生命周期管理允许为基于时间或日期的对象自动转换或到期创建规则。 对于对象转换,MinIO 自动将对象移动到配置的远程存储层。 对于对象过期,MinIO 会自动删除该对象。
MinIO 使用与正常客户端操作相同的行为在 版本化 and 非版本化桶 上应用生命周期管理规则。 您可以指定处理最新对象版本、非当前对象版本或两者的转换或生命周期规则。
MinIO 生命周期管理专为与 AWS S3 生命周期管理 的行为和语法兼容性而构建。 MinIO 使用 JSON 来描述生命周期管理规则。 导入在 S3 或类似兼容平台上创建的规则可能需要与 XML 进行转换。
查看和阅读 对象生命周期管理 了解更多文档内容。
在目标数据桶上设置的对象锁定可能会阻止源数据桶完成所需的
删除
操作。MinIO 层对象有自己的
UUID
,因此在目标数据桶上进行版本控制充其量是多余的。降低目标的存储效率,
delete
操作会创建一个 ”DeleteMarker”,而不是释放空间。源数据桶和目标数据桶上的重复删除标记。
远程数据的独家访问权
MinIO must 对目标存储桶拥有 独占 访问权限。 任何其他用户,进程,应用程序或资源都不得访问目标桶或对目标桶执行任何操作。
对过渡对象的所有访问 must 都必须通过 MinIO 进行,只能通过 S3 API 操作。
手动修改过渡对象无论是 MinIO 热
层上的元数据还是远程 冷/暖
层上的对象数据可能会导致对象数据丢失。
MinIO 会忽略远程数据桶或数据桶前缀中未由 MinIO 部署明确管理的任何对象。自动转换和透明对象检索取决于以下假设:
远程存储上的对象不会发生外部突变,迁移或删除。
远程存储桶上没有生命周期管理规则(例如过渡或过期)。
为了促进这种独家访问, 授予生命周期管理用户对其策略 policy <minio-policy>`中的目标存储桶的 ``read` , write
和 delete
访问权限。
所有其他策略应 拒绝
对目标存储桶的访问。