MinIO 会在写入操作中为每个对象添加唯一的版本 ID。
这是本节的多页打印视图。 .
对象管理
- 1: 存储桶版本控制
- 2: 将对象迁移到远程 MinIO 部署
- 3: Silo 对象锁定
- 4: 将对象从 MinIO 迁移到 S3
- 5: 对象删除
- 6: 将对象从 MinIO 迁移到 GCS
-
7: 对象生命周期管理
- 8: 将对象从 MinIO 迁移到 Azure
- 9: 对象自动过期
- 10: 数据压缩
- Versioning overview
- Object locking and retention overview
- MinIO Object Lifecycle Management Part I
- MinIO Object Lifecycle Management Part II
对象 是二进制数据,例如图像、音频文件、电子表格,甚至二进制可执行代码。 “Binary Large Object” 或 “blob” 这一术语有时会与对象存储关联使用,不过 blob 的大小可以从几个字节到数 TB 不等。 像 MinIO 这样的对象存储平台提供专用工具和能力,用于通过标准的 S3 兼容 API 存储、列出和获取对象。
磁盘独占访问
MinIO 要求 对用于对象存储的磁盘或卷拥有 独占 访问权限。 任何其他进程、软件、脚本或人员都不应直接对提供给 MinIO 的磁盘或卷, 或 MinIO 在其上放置的对象或文件执行 任何 操作。
除非得到 MinIO Engineering 的明确指示,否则不要使用脚本或工具直接修改、 删除或移动这些磁盘上的任何数据分片、校验分片或元数据文件,包括在磁盘或节点 之间迁移这些文件。 这类操作极有可能导致大范围损坏和数据丢失,超出 MinIO 的自愈能力。
MinIO 对象存储使用 存储桶 组织对象。 存储桶类似于文件系统中的顶层驱动器、文件夹或目录(/mnt/data 或 C:\),每个存储桶都可以容纳任意数量的对象。
MinIO 服务器上的对象结构可能类似如下:
按照上述示例结构,管理员会创建 /images、/videos 和 /articles 这些存储桶。 客户端应用使用对象的完整“路径”将对象写入这些存储桶,其中包括所有中间 前缀。
MinIO 使用前缀支持多级嵌套目录和对象,以支撑最动态的对象存储工作负载。 MinIO 使用 / 作为分隔符,从完整对象路径中自动推断中间前缀,例如 /articles/john.doe。 客户端和管理员都不应手动创建这些前缀。
客户端和管理员都不需要手动创建中间前缀,因为 MinIO 会根据对象名称自动推断它们。
Path 与 Virtual Host 存储桶访问
MinIO 同时支持 path-style (默认)和 virtual-host bucket lookups 。
例如,假设某个 MinIO 部署分配的完全限定域名(FQDN)为 minio.example.net:
- 使用 path-style 查找时,应用将存储桶的完整路径指定为
minio.example.net/mybucket这类形式。 - 使用 virtual-host 查找时,应用将存储桶指定为子域名,例如
mybucket.minio.example.net/。
某些应用在针对 MinIO 执行 S3 操作时,可能要求或预期支持 virtual-host 查找。 要启用 virtual-host 存储桶查找,必须将 MINIO_DOMAIN 环境变量设置为可解析到 MinIO 部署的 FQDN。
如果配置了 MINIO_DOMAIN,则 必须 视指定 FQDN 的所有子域名为专门保留给存储桶名称使用。 任何与这些域名冲突的 MinIO 服务(例如复制目标)都可能因为冲突而表现出意外或不符合预期的行为。
例如,如果设置 MINIO_DOMAIN=minio.example.net,则 不能 将 minio.example.net 的任何子域名(即 *.minio.example.net 形式)分配给任何 MinIO 服务或目标。 这包括用于 bucket、batch 或 site replication 的主机名。
重要
对于 启用 TLS 的部署,必须 确保 TLS 证书的 SAN 覆盖 MINIO_DOMAIN 中最左侧域名下的所有子域名。
例如,MINIO_DOMAIN=minio.example.net 的情况要求 TLS SAN 覆盖 minio.example.net 的所有子域名。 可以额外设置一个 *.minio.example.net 的 TLS SAN,以正确覆盖该子域命名空间。
TLS 通配符规则不允许继续匹配更深层级的子域名,因此,带有 *.example.net 通配符 SAN 的 TLS 证书 不能 覆盖 *.minio.example.net 这样的 virtual host 查找。
对象组织与规划
管理员通常负责控制存储桶的创建和配置。 之后,客户端应用可以使用 S3 兼容 SDK 在 MinIO 部署上创建、列出、获取并 删除 对象。 因此,客户端决定给定存储桶或前缀中的整体数据层次结构,而管理员则可以通过 策略 控制对某个操作或资源的授权或拒绝。
MinIO 对于给定部署中的存储桶、对象或前缀数量没有硬性的 阈值。 不过,MinIO 部署底层硬件和网络的相对性能,可能会对单个前缀或存储桶中可承载的对象数量形成实际限制。 具体而言,使用较慢驱动器或网络基础设施的硬件,在对象层次结构较为扁平的存储桶或前缀中通常会表现出较差的性能。 有关其他需要注意的考量、阈值或限制,请参见 阈值与限制。
对于客户端应用的工作负载模式,可将以下几点作为一般性指导:
- 使用普通或预算导向硬件的部署,应将每个前缀 10,000 个对象作为工作负载架构设计的基线目标。 然后基于真实工作负载的基准测试和监控结果,提高这一目标,直到硬件能够有意义地承载的上限。
- 使用高性能或企业级 硬件 的部署,通常可以处理每个前缀数百万甚至更多对象。
MinIO SUBNET 企业账户可将年度架构评审纳入部署和维护策略,以确保依赖 MinIO 的项目在长期内保持性能与成功运行。
若要更深入了解限制前缀内容数量的收益,请参阅 优化 S3 性能 一文。
说明
无论 Windows 文件系统是否支持,MinIO 都不支持在对象名称中使用 \ 或 : 字符。 请在对象名称中使用 / 作为分隔符,以便 MinIO 使用 前缀 自动创建文件夹结构。
对象版本控制
在存储桶上执行写入、列出、获取或 删除 操作时,具体的客户端行为取决于该存储桶的版本控制状态:
操作 |
已启用版本控制 |
已禁用版本控制 | 已挂起 |
|---|---|---|
|
为对象创建一个新的完整版本作为“最新”版本,并分配唯一的版本 ID |
创建对象;如果命名空间匹配则覆盖已有对象。 |
|
默认获取对象的最新版本 支持通过版本 ID 获取任意对象版本。 |
获取对象 |
|
获取指定存储桶或前缀下对象的最新版本 支持获取所有对象及其关联的版本 ID。 |
获取指定存储桶或前缀下的所有对象 |
|
为对象创建一个 0 字节的“Delete Marker”作为“最新”版本(软删除) 支持通过版本 ID 删除任意对象版本(硬删除)。 硬删除操作无法撤销。 更多信息请参见 对象删除。 |
删除对象 |
有关更完整的文档,请参见 存储桶版本控制。
对象标签
MinIO 支持向对象添加自定义标签。 标签是包含在对象元数据中的键值对。 标签可用于配合策略控制访问,或者通过 mc find --tags 定位对象。
MinIO 支持为单个对象最多添加 10 个自定义标签。
有关设置标签的更多信息,请参见 mc tag set。
对象保留
MinIO 对象锁定(“对象保留”)通过强制执行一次写入、多次读取(WORM)不可变性,防止 已启用版本控制的对象 被删除。 MinIO 同时支持 基于时长的对象保留 和 无限期 legal hold 保留。
针对受 WORM 锁定对象的删除操作,结果取决于具体操作类型:
- 未指定版本 ID 的删除操作会创建一个 “Delete Marker”
- 指定受锁定对象版本 ID 的删除操作会返回 WORM locking error
只有在首次创建存储桶时才能启用对象锁定。 启用存储桶锁定也会同时启用 版本控制。
根据 Cohasset Associates 的说明,MinIO 对象锁定 提供关键的数据保留合规能力,并满足 SEC17a-4(f)、FINRA 4511(C) 和 CFTC 1.31(c)-(d) 的要求。
有关更完整的文档,请参见 MinIO 对象锁定 和 对象删除。
对象生命周期管理
MinIO 对象生命周期管理允许为对象创建基于时间或日期的自动过渡或过期规则。 对于对象过渡,MinIO 会自动将对象移动到已配置的远程存储层。 对于对象过期,MinIO 会自动删除对象。
MinIO 在 启用和未启用版本控制的存储桶 上应用生命周期管理规则时,其行为与常规客户端操作一致。 可以指定处理最新对象版本、非当前对象版本或同时处理两者的过渡或生命周期规则。
MinIO 生命周期管理在行为和语法上与 AWS S3 Lifecycle Management 保持兼容。 MinIO 使用 JSON 描述生命周期管理规则。 导入在 S3 或类似兼容平台上创建的规则时,可能需要在 XML 和 JSON 之间进行转换。
有关更完整的文档,请参见 对象生命周期管理。
目标存储桶注意事项
MinIO 不 要求目标存储桶在对象管理或版本控制配置上与源存储桶保持一致。 目标存储桶 可以 拥有自己的一组对象管理规则,但前提是经过谨慎定义。
目标存储桶 不应 拥有自己的过期规则或额外分层规则。 过期规则可能导致仍被源存储桶使用的分层数据被移除。 分层到额外远端会在热层与其数据之间增加额外的网络跳数,同时也会提升运维复杂度。
远程存储桶 可以 配置对象锁定或版本控制。
在目标存储桶上启用版本控制或对象锁定可能带来如下影响:
- 目标存储桶上设置的对象锁定,可能导致源存储桶期望执行的
delete操作无法完成。 - MinIO 对对象进行分层时会为其分配自己的
UUID,因此目标存储桶上的版本控制至多只是冗余配置。 - 目标端的存储效率降低,因为
delete操作会创建DeleteMarker,而不是释放空间。 - 源存储桶和目标存储桶中可能出现重复的删除标记。
对远程数据的独占访问
MinIO 必须 对目标存储桶拥有 独占 访问权。 任何其他用户、进程、应用或资源都不应访问目标存储桶,也不应对其执行任何操作。
对已过渡对象的所有访问都 必须 仅通过 MinIO 的 S3 API 操作进行。 手动修改已过渡对象,无论是热 MinIO 层上的元数据,还是远程温/冷层上的对象数据,都可能导致该对象数据丢失。
MinIO 会忽略远程存储桶或存储桶前缀中任何不由该 MinIO 部署显式管理的对象。 自动过渡和透明对象读取依赖以下假设:
- 远程存储上的对象不会被外部修改、迁移或删除。
- 远程存储桶上不存在生命周期管理规则(例如过渡或过期)。
为实现这种独占访问,应在其 策略 中向生命周期管理用户授予目标存储桶的 read、write 和 delete 访问权限。 所有其他策略都应对目标存储桶 deny 访问。
冲突对象
应用必须为所有对象分配不冲突的唯一键。 这包括避免创建名称与其父对象或同级对象发生冲突的对象。 在发生冲突的位置,MinIO 对 LIST 操作返回空结果集。
例如,以下操作会创建命名空间冲突
虽然仍然可以对这些对象执行 GET 或 HEAD 操作,但名称冲突会导致在 /invoices/2024/january 路径上的 LIST 操作返回空结果集。
1 - 存储桶版本控制
概述
MinIO 支持在单个存储桶中保留对象的多个“版本”。
启用后,版本控制允许 MinIO 保留同一对象的多个迭代版本。 原本会覆盖现有对象的写入操作,将改为为该对象创建一个新版本。 MinIO 版本控制可以防止意外覆盖和删除,同时支持对写入操作执行“撤销”。 配置 对象锁定和保留规则 的前提条件之一,就是启用存储桶版本控制。
对于已启用版本控制的存储桶,写入操作会为该对象创建一个带有唯一版本 ID 的新版本。 MinIO 会将对象的“最新”版本标记为客户端默认获取的版本。 之后,客户端可以显式选择列出、获取或移除某个特定对象版本。
可以定义 对象过期 规则,按版本数量或版本日期等条件移除不再需要的对象版本。
带版本对象的读取操作
查看本组中的四张图片,了解 MinIO 如何在启用版本控制的存储桶中获取对象。 使用图片两侧的箭头可在各张图片之间切换。
MinIO 会保留对象的所有版本,并将最近的版本标记为“最新”版本。
未指定版本 ID 的读取请求会返回该对象的最新版本。
在读取操作中指定版本 ID,即可获取对象的特定版本。
变更: MinIO
Server RELEASE.2023-05-04T21-44-30Z
对于显式目录对象(“prefixes”)的创建、变更或删除,MinIO 不会创建版本。 在该显式目录对象内创建的对象,仍保留正常的版本控制行为。
MinIO 会根据对象路径隐式推断前缀。 显式创建前缀通常只会出现在 Spark 及类似工作负载中,这类工作负载会在 S3 场景下采用传统 POSIX/HDFS 的目录创建行为。
版本控制按命名空间生效
MinIO 使用对象的完整命名空间(即存储桶和对象路径)来判断对象的唯一性。 例如,下列所有命名空间都对应“唯一”对象,对其中任一对象的变更,都会在 该命名空间下 创建新的对象版本:
尽管各个命名空间中的 object.blob 可能是相同的二进制数据, MinIO 仅在特定命名空间内实施版本控制,因此会将上面的每个 object.blob 视为彼此独立且唯一的对象。
版本控制与存储容量
MinIO 不执行增量式或差异式版本控制。 对于频繁变更的工作负载,较旧或老化的对象版本可能会占用大量磁盘空间。
例如,假设一个包含日志数据的对象大小为 1GB。应用向该日志追加 100MB 数据后重新上传到 MinIO。 此时 MinIO 会同时保存该对象的 1GB 和 1.1GB 两个版本。 如果应用连续 10 天每天都重复这一过程,那么该存储桶最终会为这一个对象累计保存超过 14GB 的数据。
MinIO 支持配置 对象生命周期管理规则,以自动过期或过渡老旧对象版本并释放存储容量。 例如,你可以配置一条规则,使对象版本在变为非当前版本(即不再是该对象的“最新”版本)90 天后自动过期。 更多信息请参见 MinIO 对象过期。
你也可以使用以下命令手动移除对象版本:
-
mc rm --versions- 删除对象的所有版本。 -
mc rm --versions --older-than-删除对象中早于指定日历日期的所有版本。
新增: RELEASE.2024-04-18T19-09-19Z
如果任一单个对象的版本累计大小超过 1TiB,MinIO 会发出警告。
版本 ID 生成
MinIO 会在写入操作中为每个对象版本生成唯一且不可变的标识符。 每个对象版本 ID 都由一个 128 位固定长度的 UUIDv4 组成。 UUID 的生成具有足够随机性,可在任何环境中以极高概率保证唯一性,计算上也难以猜测,并且无需依赖中心化注册流程或机构来保证唯一性。
MinIO 不支持由客户端管理版本 ID 的分配。 所有版本 ID 的生成都由 MinIO 服务端进程处理。
对于在版本控制禁用或挂起期间创建的对象,MinIO 会使用 null 版本 ID。 在 S3 操作中将 null 指定为版本 ID,即可访问或移除这些对象。
版本控制下的删除操作
对带版本的对象执行 DELETE 操作时,会创建一个 0 字节的 DeleteMarker 作为该对象的最新版本。 如果对象的最新版本是 DeleteMarker,客户端必须指定版本控制相关标志或标识符,才能对该对象的先前版本执行 GET/HEAD/LIST/DELETE 操作。 在未显式指定版本的操作中,服务端默认会忽略 DeleteMarker 对象。
MinIO 可以利用 生命周期管理过期规则 自动永久移除对象的旧版本。 否则,可使用手动 DELETE 操作永久删除非当前版本对象或 DeleteMarker 对象。
MinIO 实现幂等 Delete Marker
变更: RELEASE.2022-08-22T23-53-06Z
标准 S3 实现处理未指定版本标识符的简单 DeleteObject 请求时,可能会为同一对象连续创建多个删除标记。 关于更多细节,请参见 S3 文档中的 管理删除标记。
MinIO 与标准 S3 实现不同,会避免这种潜在的删除标记重复。 处理未指定版本标识符的 Delete 请求时,MinIO 最多只会为指定对象创建一个 Delete Marker。 MinIO 不会 像 S3 那样创建多个连续的删除标记。
若要永久删除某个对象版本,请执行 DELETE 操作并指定待删除对象的版本 ID。 这种删除操作 不可逆。
对带版本的对象执行 DELETE 操作时,会为该对象生成一个 DeleteMarker。
客户端默认获取对象的“最新”版本。 如果最新版本是 DeleteMarker,MinIO 会返回类似 404 的响应。
即使“最新”版本是 DeleteMarker,客户端仍可通过指定版本 ID 获取该对象的任意先前版本。
客户端可在 DELETE 操作中指定版本 ID,以删除某个特定对象版本。 删除特定版本属于 永久 删除,不会创建 DeleteMarker。
以下 mc 命令可用于处理 DeleteMarkers 或带版本的对象:
- 使用
mc ls --versions查看对象的所有版本,包括删除标记。 - 使用
mc cp --version-id=UUID ...获取UUID匹配的“已删除”对象版本。 - 使用
mc rm --version-id=UUID ...删除UUID匹配的对象版本。 - 使用
mc rm --versions删除对象的 所有 版本。
教程
启用存储桶版本控制
你可以使用 MinIO Console、MinIO mc CLI 或兼容 S3 的 SDK 启用版本控制。
使用 mc version enable 命令为现有存储桶启用版本控制:
在启用版本控制之前创建的对象,其 版本 ID 为 null。
从版本控制中排除前缀
你可以使用 MinIO Client 将某些 前缀 排除在版本控制之外。 这对于 Spark/Hadoop 等起初会使用临时前缀创建对象的工作负载尤其有用。
-
使用带
--excluded-prefixes选项的mc version enable:
--excluded-prefixes 中的前缀列表会匹配前缀或名称中包含指定字符串的所有对象,其行为类似 prefix* 形式的正则表达式。 若仅按前缀匹配对象,请使用 prefix/*。
例如,以下命令会将前缀或名称中包含 _test 或 _temp 的对象排除在版本控制之外:
每个存储桶最多可排除 10 个前缀。 若要添加或移除前缀,请使用更新后的列表再次执行 mc version enable 命令。 新列表会替换先前的列表。
若要查看当前排除的前缀,请使用带 --json 选项的 mc version info:
命令输出类似如下,排除前缀列表位于 ExcludedPrefixes 属性中:
若要禁用前缀排除并恢复对所有前缀启用版本控制,请在不带 --excluded-prefixes 的情况下再次执行 mc version enable:
从版本控制中排除文件夹
你可以使用 MinIO Client 将文件夹排除在版本控制之外。
对象锁定
已 启用对象锁定 的存储桶要求启用版本控制,且不支持排除文件夹。
-
使用带
--exclude-folders选项的mc version enable,将名称以/结尾的对象排除在版本控制之外:
若要检查某个存储桶中的文件夹是否启用版本控制,请使用带 --json 选项的 mc version enable 命令。 如果 ExcludeFolders 属性为 true,则该存储桶中的文件夹不启用版本控制。
命令输出类似如下:
若要禁用文件夹排除并恢复对所有文件夹启用版本控制,请在不带 --exclude-folders 的情况下再次执行 mc version enable:
挂起存储桶版本控制
你可以随时使用 MinIO mc CLI 或兼容 S3 的 SDK 挂起存储桶版本控制。
使用 mc version suspend 命令挂起现有存储桶的版本控制:
在版本控制挂起期间创建的对象会被分配一个 null 版本 ID。 在版本控制挂起期间,对对象的任何变更都会覆盖该 null 版本对象。 MinIO 在挂起版本控制时不会删除或以其他方式更改已有的对象版本。 客户端仍可继续与存储桶中已有的各个对象版本进行交互。
2 - 将对象迁移到远程 MinIO 部署
本页中的操作步骤用于创建新的对象生命周期管理规则,将对象从主 MinIO 部署上的某个存储桶迁移到远程 MinIO 部署上的某个存储桶。 该流程支持成本管理策略,例如将对象从使用 NVMe 存储的“热” MinIO 部署分层到使用 SSD 的“温” MinIO 部署。
前提条件
安装并配置 mc
此过程使用 mc 对 MinIO 集群执行操作。 请在一台同时具备源集群和目标集群网络访问能力的机器上安装 mc。 有关下载和安装 mc 的说明,请参见 mc 安装快速开始。
使用 mc alias set 命令为源 MinIO 集群创建别名。 创建别名时,需要为源集群和目标集群上的用户指定 access key。 所指定的用户必须具备配置和应用迁移操作所需的 权限。
所需的源 MinIO 权限
MinIO 要求对要为其创建生命周期管理规则的存储桶授予以下权限。
对于要在其中为对象迁移生命周期管理规则创建远程层的集群,MinIO 还要求具备以下管理权限:
例如,以下策略授予在该集群任意存储桶上配置对象迁移生命周期管理规则的权限:
所需的远程 MinIO 权限
对象迁移生命周期管理规则要求在远程存储层上具备额外权限。 具体而言,MinIO 要求远程层凭据对远程存储桶具备读取、写入、列出和删除权限。
例如,远程 MinIO 部署上的以下策略提供了将对象迁入和迁出远程层所需的权限:
请修改 Resource,使其指向 MinIO 要迁移对象进入的存储桶。
有关配置所需权限的更完整指导,请参见 访问管理 文档。
远程存储桶必须已存在
必须先创建远程存储桶,然后才能配置以该存储桶为目标的生命周期管理层或规则。
如果远程存储桶中包含现有数据,请使用 prefix 功能,将已迁移对象与该存储桶中的其他对象隔离开来。
注意事项
生命周期管理对象扫描器
MinIO 使用 扫描器进程 根据所有已配置的生命周期管理规则检查对象。 高 IO 负载或系统资源受限导致的扫描变慢,可能会延迟生命周期管理规则的生效。
对远程数据的独占访问
MinIO 要求对远程存储层上的已转移数据拥有独占访问权限。 “hot” MinIO 源端上的对象元数据与远程 “warm/cold” 层上的对象数据紧密关联。 如果无法访问远程层,MinIO 就无法检索对象数据; 同样,远程层也不能用于恢复源端丢失的元数据。
对已转移对象的所有访问都必须仅通过 MinIO 发起的 S3 API 操作完成。 手动修改已转移对象时,无论修改的是 “hot” MinIO 层上的元数据, 还是远程 “warm/cold” 层上的对象数据,都可能导致该对象的数据丢失。
对于远程存储桶或存储桶前缀中不受该 MinIO 部署明确管理的任何对象, MinIO 都会将其忽略。 自动转移与透明对象检索依赖以下前提:
- 不会在远程存储上由外部修改、迁移或删除对象。
- 远程存储桶上不存在生命周期管理规则 (例如转移或过期)。
MinIO 会将所有已转移对象存储在远程存储桶或资源下、 每个部署唯一的前缀值之中。 该值并非用于在后端识别源部署。 在配置远程目标时,MinIO 还支持附加一个可选的人类可读前缀, 这可能有助于诊断、维护或灾难恢复相关操作。
对于包含其他数据的远程存储层, 包括来自其他 MinIO 部署的已转移对象, MinIO 建议指定此可选前缀。 本教程包含设置此前缀所需的语法。
远程数据的可用性
MinIO 分层行为依赖远程存储在收到请求后立即返回对象 (毫秒到秒级)。 因此,MinIO 不支持需要 rehydration、等待窗口 或人工干预的远程存储。
MinIO 会为每个已转移对象创建元数据,用于标识其在远程存储中的位置。 应用程序无法脱离 MinIO 直接识别和访问已转移对象。 因此,已转移数据的可用性仍依赖于 纠删码 和分布式部署拓扑 为 MinIO 部署中所有对象提供的核心保护能力。 使用对象转移不会带来任何额外的业务连续性或灾难恢复收益。
需要 BC/DR 保护的工作负载应实现 MinIO Server-Side replication。 复制可确保对象保存在远程复制站点上, 从而使用户能够在发生部分或全部数据丢失时从远端重新同步。 有关如何使用复制在部分或全部数据丢失后恢复的更完整文档, 请参见 重新同步(灾难恢复)。
过程
1) 配置生命周期管理的用户账户和策略
此步骤会在 MinIO 部署上创建用于支持生命周期管理操作的用户和策略。 如果该部署已经存在具备所需 permissions 的用户,则可以跳过此步骤。
以下示例使用 Alpha 作为 MinIO 部署 alias 的占位符。 请将其替换为配置生命周期管理规则时所使用的 MinIO 部署别名。 同时,请按照所在组织的密码生成最佳实践, 将密码 LongRandomSecretKey 替换为足够长、随机且安全的密钥。
此示例假定所指定的 alias 具有在该部署上创建策略和用户所需的权限。 有关 MinIO 用户和策略的更完整文档, 请分别参见 用户管理 和 MinIO Policy Based Access Control。
2) 配置远程存储层
使用 mc ilm tier add 命令将远程 MinIO 部署添加为新的远程存储层:
上面的示例使用了以下参数:
参数 |
说明 |
|---|---|
要在其上配置 MinIO 远程层的 MinIO 部署 |
|
要关联到新 MinIO 远程存储层的名称。
请使用全大写名称,例如 |
|
MinIO 存储后端的 URL endpoint。 |
|
MinIO 用于访问存储桶的 access key。 该 access key 必须 对应到具备所需 权限. |
|
与指定 |
|
远程 MinIO 部署上用于接收 |
|
MinIO 迁移对象时使用的可选存储桶前缀。 MinIO 会将所有已迁移对象存储到指定的 对于包含其他数据的远程存储层,包括来自其他 MinIO 部署的已迁移对象,MinIO 建议指定此可选前缀。 该前缀应能清晰标识回源 MinIO 部署,以便开展诊断、维护或灾难恢复等运维工作。 |
|
MinIO 对迁移到远程 MinIO 存储桶的对象应用的 纠删码存储类。 请指定以下受支持存储类之一:
|
|
指定 MinIO 部署通常不需要在安装时设置 region。
只有在您为该部署显式设置了 |
3) 创建并应用迁移规则
使用 mc ilm rule add 命令为存储桶创建新的转移规则。 以下示例将对象配置为在指定的日历天数后执行转移:
上述示例指定了以下参数:
参数 |
说明 |
|---|---|
指定要为其创建生命周期管理规则的 MinIO 部署
|
|
指定要为其创建生命周期管理规则的存储桶完整路径。 |
|
MinIO 将对象转移到的远程存储层。 指定在上一步中创建的远程存储层名称。 如果要将非当前对象版本转移到不同的远程层,
请为 |
|
MinIO 在经过多少个日历天后将对象标记为可转移。
该值必须为整数,例如 |
|
MinIO 在经过多少个日历天后将非当前对象版本标记为可转移。
MinIO 具体计算的是对象变为非当前版本后的时间,
而不是对象创建时间。该值必须为整数,
例如 省略此值可忽略非当前对象版本。 此选项对未启用版本控制的存储桶无效。 |
4) 验证迁移规则
使用 mc ilm rule ls 命令检查已配置的迁移规则:
3 - Silo 对象锁定
概述
MinIO 对象锁定(“对象保留”)通过强制执行一次写入、多次读取(WORM)不可变性,防止 已启用版本控制的对象 被删除。MinIO 同时支持 基于时长的对象保留 和 无限期 legal hold 保留。
根据 Cohasset Associates 的说明,MinIO 对象锁定 提供关键的数据保留合规能力,并满足 SEC17a-4(f)、FINRA 4511(C) 和 CFTC 1.31(c)-(d) 的要求。
MinIO 版本控制会保留对象变更的完整历史。 但应用仍可显式删除特定对象版本。
对存储桶中的对象应用默认 30 天的 WORM 锁,可确保所有对象版本在最短保留期内受到保护。
删除操作 在 已启用版本控制的存储桶 中遵循常规行为,即 MinIO 会为对象创建 DeleteMarker。不过,对象中非 Delete Marker 的版本仍受保留规则约束,可防止任何针对特定版本的删除或覆盖尝试。
对于受 WORM 锁定保护的特定对象版本,MinIO 会阻止任何 删除 尝试。客户端最早只能在锁过期后删除该版本。
MinIO 对象锁定在功能和 API 层面与 AWS S3 兼容。 本页概述了 MinIO 中对象锁定/保留的实现概念。更多信息请参见 AWS S3 文档 How S3 Object Lock works。
按照 S3 的行为, 只能在创建存储桶时启用对象锁定。对于创建时未启用锁定的存储桶,之后无法再启用对象锁定。启用后,你可以在任意时刻配置对象保留规则。对象锁定依赖 版本控制,并会隐式启用该特性。
与版本控制的交互
受 WORM 锁定保护的对象在锁过期或被显式解除之前均不可变更。锁定以对象版本为粒度,每个版本都独立保持不可变。
如果应用对受锁定对象执行未指定版本的删除操作,该操作会生成一个 Delete Marker。 任何显式删除受 WORM 锁定对象的尝试都会报错失败。Delete Marker 不 受 WORM 锁定保护。 更多信息请参见 S3 文档 Managing delete markers and object lifecycles。
例如,考虑以下默认启用了 GOVERNANCE 模式 锁定的存储桶:
由于对象锁定设置,对 data.csv 的 特定版本 执行删除会失败:
对 data.csv 执行未指定版本的删除会成功,并为对象创建一个新的 DeleteMarker:
与生命周期管理的交互
对于受过期规则覆盖的对象,MinIO 对象过期 会遵循所有生效中的对象锁定和保留设置。
- 对于仅作用于 当前 对象版本的过期规则, MinIO 会为受锁定对象创建一个 Delete Marker。
- 对于作用于 非当前对象版本 的过期规则, MinIO 只能在保留期结束 之后,或保留已被显式解除时(例如 legal hold)对非当前版本执行过期。
例如,考虑以下默认启用了 GOVERNANCE 模式 且保留期为 45 天的存储桶:
为超过 7 天的 当前 对象创建过期规则时,会为该对象生成一个 Delete Marker:
不过,对于超过 7 天的 非当前 对象,过期规则只有在已配置的 WORM 锁过期 之后 才会生效。由于该存储桶设置了 45 天的 GOVERNANCE 保留,因此只有 data.csv 的 v1 版本已解锁,因而可被删除。
教程
创建启用对象锁定的存储桶
按照 S3 的行为,必须在创建存储桶时启用对象锁定。 你可以使用 MinIO mc CLI 或 S3 兼容 SDK 创建启用了对象锁定的存储桶。
使用带有 --with-lock 选项的 mc mb 命令创建启用了对象锁定的存储桶:
配置存储桶默认对象保留
你可以使用 MinIO mc CLI 或 S3 兼容 SDK 配置对象锁定规则(“对象保留”)。
MinIO 同时支持设置存储桶默认保留规则和按对象设置保留规则。 以下示例演示的是存储桶默认保留。对于按对象设置保留,请参见所选 SDK 中相应 PUT 操作的文档。
使用带有 --recursive 和 --default 选项的 mc retention set 命令,为存储桶设置默认保留模式:
- 将
MODE替换为 COMPLIANCE 或 GOVERNANCE。 - 将
DURATION替换为对象锁定持续生效的时长。 - 将
ALIAS替换为已配置 MinIO 部署的alias。 - 将
BUCKET替换为要设置默认保留规则的存储桶名称。
启用 Legal Hold 保留
你可以使用 MinIO mc CLI 或 S3 兼容 SDK,为对象启用或禁用无限期 legal hold 保留。
你可以对已经处于 COMPLIANCE 或 GOVERNANCE 锁定下的对象设置 legal hold。 即使保留锁过期,对象在 legal hold 生效期间仍会保持 WORM 锁定。 你或其他拥有必要权限的用户必须显式解除 legal hold,才能移除 WORM 锁。
使用 mc legalhold set 命令切换对象的 legal hold 状态。
对象保留模式
MinIO 实现了以下 S3 对象锁定模式:
模式 |
说明 |
|---|---|
阻止非特权用户执行任何会变更对象或其锁定设置的操作。 在存储桶或对象上拥有 在配置的保留规则持续时间结束后,MinIO 会自动解除该锁。 |
|
阻止任何会变更对象或其锁定设置的操作。 包括 MinIO root 用户在内的任何 MinIO 用户都无法修改对象或其设置。 在配置的保留规则持续时间结束后,MinIO 会自动解除该锁。 |
GOVERNANCE 模式
处于 GOVERNANCE 锁定下的对象可防止非特权用户执行写操作。
GOVERNANCE 锁定对象提供受管控的不可变性。拥有 s3:BypassGovernanceRetention 操作权限的用户可以修改被锁定对象、调整保留时长,或完全解除该锁。绕过 GOVERNANCE 保留还要求在请求中设置 x-amz-bypass-governance-retention:true header。
MinIO 的 GOVERNANCE 锁在功能上与 S3 GOVERNANCE 模式 完全一致。
COMPLIANCE 模式
处于 COMPLIANCE 锁定下的对象可防止 所有 用户执行写操作,包括 MinIO root 用户。
COMPLIANCE 锁定对象提供完全不可变性。 在配置的保留时长结束之前,无法更改或移除该锁。
MinIO 的 COMPLIANCE 锁在功能上与 S3 COMPLIANCE 模式 完全一致。
Legal Hold
处于 legal hold 状态下的对象可防止 所有 用户执行写操作,包括 MinIO root 用户。
legal hold 为无限期,并对锁定对象强制执行完全不可变性。 只有拥有 s3:PutObjectLegalHold 权限的特权用户才能设置或解除 legal hold。
legal hold 在对象级别生效。 如果你为一组对象启用 legal hold,例如某个存储桶中的现有内容,则该存储桶后续新创建的对象不会受到影响。
legal hold 与 GOVERNANCE 模式 和 COMPLIANCE 模式 保留设置是互补关系。 同时受 legal hold 和 GOVERNANCE/COMPLIANCE 保留规则保护的对象,会持续保持 WORM 锁定,直到 legal hold 被解除 且 规则到期。
对于 GOVERNANCE 锁定对象,即使用户拥有绕过保留的必要权限,legal hold 仍会阻止其修改该对象。
4 - 将对象从 MinIO 迁移到 S3
本页中的步骤将创建一条新的对象生命周期管理规则,用于将对象从 MinIO 存储桶迁移到 Amazon Web Services S3 存储后端或兼容 S3 的服务上的远程存储层。该过程适用于这类场景:在经过一定时间周期或达到某个日历日期后,将对象分层到低成本存储或归档存储。
要求
安装并配置 mc
此过程使用 mc 在 MinIO 集群上执行操作。 请在一台能够同时访问源集群和目标集群网络的机器上安装 mc。 有关下载和安装 mc 的说明,请参见 mc 快速安装。
使用 mc alias set 命令为源 MinIO 集群创建别名。 创建别名时,需要为源集群和目标集群上的用户指定 access key。 指定的用户必须具备配置和应用迁移操作所需的 权限。
所需的 MinIO 权限
MinIO 要求为要创建生命周期管理规则的一个或多个存储桶授予以下权限。
MinIO 还要求在为对象迁移生命周期管理规则创建远程层的集群上具备以下管理权限:
例如,以下策略授予在集群中任意存储桶上配置对象迁移生命周期管理规则的权限:
所需的 S3 权限
对象迁移生命周期管理规则还要求远程存储层具备额外权限。 具体来说,MinIO 要求远程层凭证对远程存储桶具备读取、写入、列出和删除权限。
例如,以下策略提供了将对象迁入和迁出远程层所需的权限:
请根据 MinIO 分层对象所使用的存储桶修改 Resource。
有关如何配置所需权限的更完整说明,请参见 Amazon S3 Permissions 文档。
远程存储桶必须已存在
在配置以该存储桶为目标的生命周期管理层或规则之前,先创建远程 S3 存储桶。
注意事项
生命周期管理对象扫描器
MinIO 使用 scanner process 根据所有已配置的生命周期管理规则检查对象。 如果由于高 IO 工作负载或系统资源有限导致扫描速度较慢,可能会延迟生命周期管理规则的应用。 更多信息请参见 生命周期管理对象扫描器。
对远程数据的独占访问
MinIO 要求对远程存储层上的已转移数据拥有独占访问权限。 “hot” MinIO 源端上的对象元数据与远程 “warm/cold” 层上的对象数据紧密关联。 如果无法访问远程层,MinIO 就无法检索对象数据; 同样,远程层也不能用于恢复源端丢失的元数据。
对已转移对象的所有访问都必须仅通过 MinIO 发起的 S3 API 操作完成。 手动修改已转移对象时,无论修改的是 “hot” MinIO 层上的元数据, 还是远程 “warm/cold” 层上的对象数据,都可能导致该对象的数据丢失。
对于远程存储桶或存储桶前缀中不受该 MinIO 部署明确管理的任何对象, MinIO 都会将其忽略。 自动转移与透明对象检索依赖以下前提:
- 不会在远程存储上由外部修改、迁移或删除对象。
- 远程存储桶上不存在生命周期管理规则 (例如转移或过期)。
MinIO 会将所有已转移对象存储在远程存储桶或资源下、 每个部署唯一的前缀值之中。 该值并非用于在后端识别源部署。 在配置远程目标时,MinIO 还支持附加一个可选的人类可读前缀, 这可能有助于诊断、维护或灾难恢复相关操作。
对于包含其他数据的远程存储层, 包括来自其他 MinIO 部署的已转移对象, MinIO 建议指定此可选前缀。 本教程包含设置此前缀所需的语法。
远程数据的可用性
MinIO 分层行为依赖远程存储在收到请求后立即返回对象 (毫秒到秒级)。 因此,MinIO 不支持需要 rehydration、等待窗口 或人工干预的远程存储。
MinIO 会为每个已转移对象创建元数据,用于标识其在远程存储中的位置。 应用程序无法脱离 MinIO 直接识别和访问已转移对象。 因此,已转移数据的可用性仍依赖于 纠删码 和分布式部署拓扑 为 MinIO 部署中所有对象提供的核心保护能力。 使用对象转移不会带来任何额外的业务连续性或灾难恢复收益。
需要 BC/DR 保护的工作负载应实现 MinIO Server-Side replication。 复制可确保对象保存在远程复制站点上, 从而使用户能够在发生部分或全部数据丢失时从远端重新同步。 有关如何使用复制在部分或全部数据丢失后恢复的更完整文档, 请参见 重新同步(灾难恢复)。
步骤
1) 配置生命周期管理的用户账户和策略
此步骤会在 MinIO 部署上创建用于支持生命周期管理操作的用户和策略。 如果该部署已经存在具备所需 权限 的用户,则可以跳过此步骤。
以下示例使用 Alpha 作为 MinIO 部署 alias 的占位符。 请将其替换为配置生命周期管理规则时所使用的 MinIO 部署别名。 同时,请按照所在组织的密码生成最佳实践, 将密码 LongRandomSecretKey 替换为足够长、随机且安全的密钥。
此示例假定所指定的 alias 具有在该部署上创建策略和用户所需的权限。 有关 MinIO 用户和策略的更完整文档, 请分别参见 用户管理 和 MinIO Policy Based Access Control。
2) 配置远程存储层
使用 mc ilm tier add 命令将 Amazon S3 服务添加为新的远程存储层:
上面的示例使用了以下参数:
参数 |
说明 |
|---|---|
要在其上配置 S3 远程层的 MinIO 部署的 |
|
与新建 S3 远程存储层关联的名称。请使用全大写形式,例如 |
|
S3 存储后端的 URL 端点。 |
|
MinIO 用于访问该存储桶的 S3 access key。 该 access key 必须 对应一个具备所需 权限 的 IAM 用户。 |
|
与指定 |
|
S3 存储后端上 MinIO 用于迁移对象的存储桶名称。 |
|
MinIO 迁移对象时使用的可选存储桶前缀。 MinIO 会将所有已迁移对象存储在指定 对于包含其他数据的远程存储层,包括来自其他 MinIO 部署的已迁移对象,MinIO 建议指定此可选前缀。 该前缀应能清晰指向源 MinIO 部署,以便于执行诊断、维护或灾难恢复相关操作。 |
|
MinIO 迁移对象时使用的 S3 storage class。 MinIO 的分层行为依赖远程存储在收到请求后立即返回对象(毫秒到秒级)。 因此,MinIO 不能 支持需要 rehydration、等待周期或人工干预的远程存储。 以下 S3 storage class 满足 MinIO 对远程层的要求:
省略此值将使用该存储桶的默认 storage class。 指定此值会覆盖存储桶的 storage class。 更多信息请参见 Using Amazon S3 storage classes。 |
|
指定 |
3) 创建并应用迁移规则
使用 mc ilm rule add 命令为存储桶创建新的转移规则。 以下示例将对象配置为在指定的日历天数后执行转移:
上述示例指定了以下参数:
参数 |
说明 |
|---|---|
指定要为其创建生命周期管理规则的 MinIO 部署
|
|
指定要为其创建生命周期管理规则的存储桶完整路径。 |
|
MinIO 将对象转移到的远程存储层。 指定在上一步中创建的远程存储层名称。 如果要将非当前对象版本转移到不同的远程层,
请为 |
|
MinIO 在经过多少个日历天后将对象标记为可转移。
该值必须为整数,例如 |
|
MinIO 在经过多少个日历天后将非当前对象版本标记为可转移。
MinIO 具体计算的是对象变为非当前版本后的时间,
而不是对象创建时间。该值必须为整数,
例如 省略此值可忽略非当前对象版本。 此选项对未启用版本控制的存储桶无效。 |
4) 验证迁移规则
使用 mc ilm rule ls 命令查看已配置的迁移规则:
5 - 对象删除
概述
本页概述 DELETE 操作会如何影响对象,具体取决于包含该对象的存储桶配置。
以下因素的任意组合都可能影响 DELETE 操作的行为:
权限
MinIO 使用 基于策略的访问控制 系统进行访问管理。 用户或服务账户必须提供正确的策略操作和条件,才能对该存储桶和对象执行 DELETE。
未启用版本控制的对象
如果对未启用版本控制的存储桶中的对象执行 DELETE 操作,其行为比较直接。 在确认用户或服务账户具有执行 DELETE 操作的权限后,MinIO 会永久删除该对象。
请求删除操作的用户或服务账户必须对该存储桶和对象具有 s3:DeleteObject 操作权限。
已启用版本控制的对象
启用版本控制后,DELETE 操作的行为会有所不同。
用户或服务账户必须对该存储桶和对象具有 s3:DeleteObjectVersion 操作权限。
删除当前版本
如果对已启用版本控制的对象执行 DELETE 操作,但未指定版本 UUID,则会创建一个 DeleteMarker,并将其置为该对象的 head。
在这种情况下,MinIO 实际上不会从磁盘中删除该对象或其任何版本。 该对象的所有现有版本仍可通过指定对应版本的 UUID 进行访问。 当 DeleteMarker 成为该对象的 head 时,MinIO 不会为未指定版本 ID 的 GET 请求返回该对象。 相反,MinIO 会返回类似 404 的响应。
可以使用 mc ls --versions 查找对象版本的 UUID。
如需从驱动器中删除对象的当前版本,请先找到该版本的 UUID,然后使用 mc rm --version-id=UUID ... 删除当前版本。 在这种情况下,该对象紧邻的前一个版本将成为当前版本,并用于响应未指定 UUID 的该对象 GET 请求。
警告
在 DELETE 操作中指定 version-id 是不可逆的。 MinIO 会从驱动器中删除指定版本,并且 无法 恢复。
删除先前版本
如需删除对象的先前版本,请指定该版本的 UUID。 可以使用 mc ls --versions 获取版本 UUID。 当 DELETE 请求指定 version-id,且用户具有删除该对象版本的正确权限时,MinIO 会从驱动器中永久删除指定版本。
警告
在 DELETE 操作中指定 version-id 是不可逆的。 MinIO 会从驱动器中删除指定版本,并且 无法 恢复。
删除所有版本
使用 mc rm --versions 删除对象的 所有 版本。 此操作不可逆。
生命周期管理过期
可以定义一个或多个 生命周期管理过期规则,使对象在达到指定的版本数量或经过指定时间后过期。 当版本数量超过规则指定值,或某个版本的时间早于指定阈值时,MinIO 会从驱动器中永久删除该对象版本。
这些规则依赖 扫描器 在存储桶上处理规则。 扫描器以较低优先级持续运行,系统会优先处理 READ 和 WRITE 操作。 因此,满足过期条件的对象版本可能不会立即从 MinIO 中移除。
有关扫描器工作方式和配置选项的更多信息,请参阅 扫描器 页面。
DeleteMarkers 本身也是对象。 生命周期规则可以删除作为对象唯一剩余版本的 DeleteMarkers。
变更: MinIO
RELEASE.2024-05-01T01-11-10Z
使用 JSON 时,生命周期规则可以在指定天数后删除已删除对象的所有版本。
受保留规则保护的对象
MinIO 会保护受 锁定规则 约束的对象,防止其被覆盖或删除。 这些规则要求对象在规则过期或被移除之前必须予以保留。
对已锁定对象执行未指定版本的 DELETE 操作,会为该对象创建一个 DeleteMarker。 但对象各版本本身仍会按锁定要求予以保留。
指定对象版本的 DELETE 操作受保留规则约束。 对于受锁定保护的对象版本,MinIO 会在锁定过期或被移除之前防止其被覆盖或删除。
已复制对象
复制会将对象从一个位置复制到另一个位置。 MinIO 支持存储桶级别或集群(“site”)级别的复制。
删除操作是否会被复制,取决于复制类型以及复制配置方式。
站点复制
对于启用了 多站点复制 的集群,MinIO 会将任一集群上执行的所有 delete 操作复制到对等组中的其他每个集群。
任一单个对等节点上的删除行为,都遵循普通 MinIO 部署相同的处理流程。
存储桶复制
通过 存储桶复制,MinIO 支持在源存储桶与配置好的远程存储桶之间复制删除操作。 MinIO 会同步删除特定对象版本以及新的 delete markers。 删除操作复制使用与其他所有复制操作相同的 复制流程。
MinIO 要求 显式启用 带版本删除和 delete marker 复制。 使用 mc replicate add --replicate 字段指定 delete、delete-marker 或两者,以分别启用带版本删除和 delete marker 复制。 如需同时启用两者,请使用逗号分隔这两个字符串:delete,delete-marker。
对于 delete marker 复制,MinIO 会在删除操作创建 delete marker 后启动复制流程。 MinIO 使用 X-Minio-Replication-DeleteMarker-Status 元数据字段跟踪 delete marker 的复制状态。 在 active-active 复制配置中,如果两个集群并发为某个对象创建 delete marker,或者在复制事件同步前一个或两个集群处于宕机状态,MinIO 可能会产生重复的 delete marker。
对于复制特定对象版本的删除,MinIO 会将该对象版本标记为 PENDING,直到复制完成。 一旦远程目标删除了该对象版本,MinIO 就会删除源端的该对象版本。 虽然此过程可确保版本删除近似同步,但它也可能导致在初始删除操作之后,列表操作仍返回该对象版本。 MinIO 使用 X-Minio-Replication-Delete-Status 跟踪删除版本的复制状态。
MinIO 只复制由客户端显式触发的删除操作。 MinIO 不会 复制由 生命周期管理过期规则 删除的对象。 对于 active-active 配置,应在 所有 复制存储桶上设置相同的过期规则,以确保对象过期行为一致。
如果某次删除操作移除了某个存储桶前缀中的最后一个对象,MinIO 会递归删除该前缀中直到存储桶根为止的每一个空层级。 MinIO 仅对作为对象写入操作一部分而 隐式 创建的前缀执行这种递归删除。 对于使用显式目录创建命令(例如 mc mb)创建的前缀,MinIO 不会递归删除。
如果复制规则启用了删除操作复制,则复制过程在目标 MinIO 集群上 同样 会应用这种隐式前缀清理行为。
例如,考虑一个名为 photos 的存储桶,其中包含以下对象前缀:
photos/2021/january/myphoto.jpg//2021/january/根据对象名隐式创建photos/2021/february/myotherphoto.jpg//2021/february/根据对象名隐式创建photos/NYE21/NewYears.jpg//NYE21/在存储桶中显式创建
photos/NYE21 是 唯一 使用 mc mb 显式创建的前缀。 其他所有前缀都是在写入位于该前缀下的对象时 隐式 创建的。
- 某个命令删除了
myphoto.jpg。 MinIO 会自动清理空的/january/前缀。 - 某个命令随后删除了
myotherphoto.jpg。 MinIO 会自动清理/february/前缀,以及此时已为空的/2021前缀。 - 某个命令删除了
NewYears.jpg对象。 由于/NYE21/是 显式 创建的,MinIO 会保留该前缀。
6 - 将对象从 MinIO 迁移到 GCS
本页中的过程会创建一条新的对象生命周期管理规则,将对象从 MinIO 存储桶迁移到 Google Cloud Storage 后端上的远程存储层。该过程适用于这类场景:在达到特定时间周期或日历日期后, 将陈旧数据迁移到低成本的公有云存储方案。
要求
安装并配置 mc
该过程使用 mc 在 MinIO 集群上执行操作。 请在一台可同时通过网络访问源集群和目标集群的机器上安装 mc。 有关下载和安装 mc 的说明,请参见 mc Installation Quickstart。
使用 mc alias set 命令为源 MinIO 集群创建别名。 创建别名时,需要为源集群和目标集群上的用户指定访问密钥。 指定的用户必须具备用于配置和应用迁移操作的 权限。
所需的 MinIO 权限
MinIO 要求在您为其创建生命周期管理规则的一个或多个存储桶范围内,具备以下权限。
此外,在为对象迁移生命周期管理规则创建远程层的集群上,MinIO 还要求具备以下管理权限:
例如,以下策略授予在集群中任意存储桶上配置对象迁移生命周期管理规则的权限:
所需的 GCS 权限
对象迁移生命周期管理规则要求在远程存储层上具备额外权限。 具体来说,MinIO 要求 GCS 凭证对远程存储桶具备读取、写入、列出和删除权限。
有关配置所需权限的更完整说明,请参见 GCS IAM permissions 文档。
远程存储桶必须已存在
在配置以该存储桶为目标的生命周期管理层或规则之前,请先创建远程 GCS 存储桶。
如果您设置了默认的 GCS storage class,那么在定义远程层时,如果未指定 storage class,MinIO 就会使用该默认值。 请确保记录您的 GCS 存储桶设置以及 MinIO 分层配置,以避免潜在的混淆、错误配置或其他意外结果。
注意事项
生命周期管理对象扫描器
MinIO 使用 scanner process 根据所有已配置的生命周期管理规则检查对象。 高 IO 工作负载或有限的系统资源导致的扫描缓慢,可能会延迟生命周期管理规则的应用。 更多信息请参见 生命周期管理对象扫描器。
对远程数据的独占访问
MinIO 要求对远程存储层上的已转移数据拥有独占访问权限。 “hot” MinIO 源端上的对象元数据与远程 “warm/cold” 层上的对象数据紧密关联。 如果无法访问远程层,MinIO 就无法检索对象数据; 同样,远程层也不能用于恢复源端丢失的元数据。
对已转移对象的所有访问都必须仅通过 MinIO 发起的 S3 API 操作完成。 手动修改已转移对象时,无论修改的是 “hot” MinIO 层上的元数据, 还是远程 “warm/cold” 层上的对象数据,都可能导致该对象的数据丢失。
对于远程存储桶或存储桶前缀中不受该 MinIO 部署明确管理的任何对象, MinIO 都会将其忽略。 自动转移与透明对象检索依赖以下前提:
- 不会在远程存储上由外部修改、迁移或删除对象。
- 远程存储桶上不存在生命周期管理规则 (例如转移或过期)。
MinIO 会将所有已转移对象存储在远程存储桶或资源下、 每个部署唯一的前缀值之中。 该值并非用于在后端识别源部署。 在配置远程目标时,MinIO 还支持附加一个可选的人类可读前缀, 这可能有助于诊断、维护或灾难恢复相关操作。
对于包含其他数据的远程存储层, 包括来自其他 MinIO 部署的已转移对象, MinIO 建议指定此可选前缀。 本教程包含设置此前缀所需的语法。
远程数据的可用性
MinIO 分层行为依赖远程存储在收到请求后立即返回对象 (毫秒到秒级)。 因此,MinIO 不支持需要 rehydration、等待窗口 或人工干预的远程存储。
MinIO 会为每个已转移对象创建元数据,用于标识其在远程存储中的位置。 应用程序无法脱离 MinIO 直接识别和访问已转移对象。 因此,已转移数据的可用性仍依赖于 纠删码 和分布式部署拓扑 为 MinIO 部署中所有对象提供的核心保护能力。 使用对象转移不会带来任何额外的业务连续性或灾难恢复收益。
需要 BC/DR 保护的工作负载应实现 MinIO Server-Side replication。 复制可确保对象保存在远程复制站点上, 从而使用户能够在发生部分或全部数据丢失时从远端重新同步。 有关如何使用复制在部分或全部数据丢失后恢复的更完整文档, 请参见 重新同步(灾难恢复)。
过程
1) 配置生命周期管理的用户账户和策略
此步骤会在 MinIO 部署上创建用于支持生命周期管理操作的用户和策略。 如果该部署已经存在具备所需 permissions 的用户,则可以跳过此步骤。
以下示例使用 Alpha 作为 MinIO 部署 alias 的占位符。 请将其替换为配置生命周期管理规则时所使用的 MinIO 部署别名。 同时,请按照所在组织的密码生成最佳实践, 将密码 LongRandomSecretKey 替换为足够长、随机且安全的密钥。
此示例假定所指定的 alias 具有在该部署上创建策略和用户所需的权限。 有关 MinIO 用户和策略的更完整文档, 请分别参见 用户管理 和 MinIO Policy Based Access Control。
2) 配置远程存储层
使用 mc ilm tier add 命令将新的 Google Cloud Storage 服务添加为远程存储层:
上述示例使用了以下参数:
参数 |
说明 |
|---|---|
要在其上配置 GCS 远程层的 MinIO 部署的
|
|
与新 GCS 远程存储层关联的名称。
请使用全大写指定该名称,例如 |
|
MinIO 迁移对象所使用的 GCS 存储后端上的存储桶名称。 |
|
MinIO 迁移对象时使用的可选存储桶前缀。 MinIO 会将所有已迁移对象存储到指定的 对于包含其他数据(包括来自其他 MinIO 部署的已迁移对象)的远程存储层, MinIO 建议指定此可选前缀。该前缀应能清晰映射到源 MinIO 部署, 以便简化与诊断、维护或灾难恢复相关的运维工作。 |
|
远程 GCS 层上用户的 credential file。 指定的用户凭证必须对应一个具备所需 权限 的 GCS 用户。 |
|
MinIO 应用于迁移到 GCS 存储桶中的对象的 GCS 存储类别。 MinIO 的分层行为依赖于远程存储在收到请求后立即返回对象(毫秒到秒级)。 因此,MinIO 无法支持需要回温、等待周期或人工干预的远程存储。 以下 GCS 存储类别满足 MinIO 作为远程层的要求:
更多信息请参见 GCS storage class。 |
3) 创建并应用迁移规则
使用 mc ilm rule add 命令为存储桶创建新的转移规则。 以下示例将对象配置为在指定的日历天数后执行转移:
上述示例指定了以下参数:
参数 |
说明 |
|---|---|
指定要为其创建生命周期管理规则的 MinIO 部署
|
|
指定要为其创建生命周期管理规则的存储桶完整路径。 |
|
MinIO 将对象转移到的远程存储层。 指定在上一步中创建的远程存储层名称。 如果要将非当前对象版本转移到不同的远程层,
请为 |
|
MinIO 在经过多少个日历天后将对象标记为可转移。
该值必须为整数,例如 |
|
MinIO 在经过多少个日历天后将非当前对象版本标记为可转移。
MinIO 具体计算的是对象变为非当前版本后的时间,
而不是对象创建时间。该值必须为整数,
例如 省略此值可忽略非当前对象版本。 此选项对未启用版本控制的存储桶无效。 |
4) 验证迁移规则
使用 mc ilm rule ls 命令查看已配置的迁移规则:
7 - 对象生命周期管理
- MinIO Object Lifecycle Management Part I
- MinIO Object Lifecycle Management Part II
- MinIO Object Lifecycle Management Lab
使用 MinIO 对象生命周期管理,可以创建基于时间或日期的规则,自动迁移或过期对象。 对于对象迁移,MinIO 会自动将对象移动到已配置的远程存储层。 对于对象过期,MinIO 会自动删除该对象。
为了兼容将工作负载和生命周期规则从 S3 迁移到 MinIO 的场景,MinIO 的行为和语法遵循 S3 lifecycle。 例如,您可以导出 S3 生命周期管理规则并将其导入 MinIO,反之亦然。 MinIO 使用 JSON 描述生命周期管理规则,因此在导入 S3 生命周期规则时,可能需要在 XML 与 JSON 之间进行转换。
对象迁移(”Tiering”)
MinIO 支持创建对象迁移生命周期管理规则,使 MinIO 可以自动将对象移动到远程存储“层”。 MinIO 支持以下任意一种远程层目标:
MinIO 对象迁移适用于这类场景:将私有云或公有云基础设施中 MinIO 集群里的陈旧数据迁移到低成本的私有云或公有云存储方案中。 目录对象,即名称以 / 结尾的 0 字节对象,不会被分层迁移。 MinIO 会按需管理已分层对象的取回,无需应用端添加额外逻辑。
使用 mc ilm tier add 命令为分层数据创建远程目标。 然后,您可以使用 mc ilm rule add --transition-days 命令,在指定的日历天数后将对象迁移到该层。
新增: RELEASE.2022-11-10T18-20-21Z
您可以对存储桶或存储桶前缀使用 mc ls,验证对象的分层状态。 输出中会包含每个对象的存储层:
STANDARD表示对象存储在 MinIO 部署上。WARM表示对象存储在同名远程层上。
重要
MinIO 对象迁移支持这类成本优化策略:将较旧或陈旧的数据移动到成本优化的远程存储层,例如云存储或高密度 HDD 存储。
MinIO 对象迁移 不 提供备份与恢复功能。 在 MinIO 发生数据丢失时,您不能将远程层用作恢复源。
如需支持备份/恢复或 BC/DR 需求,请使用 site replication 或 bucket replication。
对远程数据的独占访问
MinIO 要求对远程存储层上的已转移数据拥有独占访问权限。 “hot” MinIO 源端上的对象元数据与远程 “warm/cold” 层上的对象数据紧密关联。 如果无法访问远程层,MinIO 就无法检索对象数据; 同样,远程层也不能用于恢复源端丢失的元数据。
对已转移对象的所有访问都必须仅通过 MinIO 发起的 S3 API 操作完成。 手动修改已转移对象时,无论修改的是 “hot” MinIO 层上的元数据, 还是远程 “warm/cold” 层上的对象数据,都可能导致该对象的数据丢失。
对于远程存储桶或存储桶前缀中不受该 MinIO 部署明确管理的任何对象, MinIO 都会将其忽略。 自动转移与透明对象检索依赖以下前提:
- 不会在远程存储上由外部修改、迁移或删除对象。
- 远程存储桶上不存在生命周期管理规则 (例如转移或过期)。
MinIO 会将所有已转移对象存储在远程存储桶或资源下、 每个部署唯一的前缀值之中。 该值并非用于在后端识别源部署。 在配置远程目标时,MinIO 还支持附加一个可选的人类可读前缀, 这可能有助于诊断、维护或灾难恢复相关操作。
对于包含其他数据的远程存储层, 包括来自其他 MinIO 部署的已转移对象, MinIO 建议指定此可选前缀。 本教程包含设置此前缀所需的语法。
远程数据的可用性
MinIO 分层行为依赖远程存储在收到请求后立即返回对象 (毫秒到秒级)。 因此,MinIO 不支持需要 rehydration、等待窗口 或人工干预的远程存储。
MinIO 会为每个已转移对象创建元数据,用于标识其在远程存储中的位置。 应用程序无法脱离 MinIO 直接识别和访问已转移对象。 因此,已转移数据的可用性仍依赖于 纠删码 和分布式部署拓扑 为 MinIO 部署中所有对象提供的核心保护能力。 使用对象转移不会带来任何额外的业务连续性或灾难恢复收益。
需要 BC/DR 保护的工作负载应实现 MinIO Server-Side replication。 复制可确保对象保存在远程复制站点上, 从而使用户能够在发生部分或全部数据丢失时从远端重新同步。 有关如何使用复制在部分或全部数据丢失后恢复的更完整文档, 请参见 重新同步(灾难恢复)。
启用版本控制的存储桶
对于已启用 版本控制 的存储桶迁移规则,MinIO 采用 S3 behavior。 具体来说,MinIO 默认将迁移操作应用于对象的 当前 版本。
如需迁移对象的非当前版本,请在创建迁移规则时指定 --noncurrent-transition-days 和 --noncurrent-transition-tier 选项。
对象过期
MinIO 生命周期管理支持对存储桶中的对象执行过期操作。 对象“过期”是指对该对象执行 DELETE 操作。 例如,您可以创建生命周期管理规则,使所有超过 365 天的对象过期。
使用 mc ilm rule add --expire-days 可以让对象在指定的日历天数后过期。
对于已配置 replication 的存储桶,MinIO 不会复制由生命周期管理过期规则删除的对象。 更多信息请参见 删除操作的复制。
启用版本控制的存储桶
对于已启用 版本控制 的存储桶过期规则,MinIO 采用 S3 behavior。 对于启用版本控制的存储桶,MinIO 具有以下默认行为:
-
MinIO 仅将过期选项应用于对象的 当前 版本,具体方式是像版本化删除的常规行为一样创建
DeleteMarker。如需让对象的非当前版本过期,请在创建过期规则时指定
--noncurrent-expire-days选项。 -
MinIO 不会让
DeleteMarkers过期,即使该对象已不存在其他版本。如需在该对象已无剩余版本时让删除标记过期,请在创建过期规则时指定
--expire-delete-marker选项。 -
如需让一个没有删除标记的对象在指定天数后其所有版本都过期,请将
--expire-all-object-versions标志与--expire-days标志一同使用。 这允许该对象在指定天数过去后被永久删除。说明变更: MinIO
RELEASE.2024-05-01T01-11-10Z
此标志仅适用于没有删除标记的对象。
生命周期管理对象扫描器
MinIO 使用内置的 scanner 主动检查对象是否符合所有已配置的生命周期管理规则。
扫描器是一个低优先级进程,在 I/O 负载较高时会让出资源,以避免因规则触发时机导致性能尖峰。 因此,扫描器可能要到生命周期规则周期已经过去 之后,才会检测到某个对象已满足配置的迁移或过期生命周期规则条件。
8 - 将对象从 MinIO 迁移到 Azure
本页中的过程将创建一条新的对象生命周期管理规则,用于将 MinIO 存储桶中的对象迁移到 Azure 存储后端上的远程存储层。该过程适用于如下场景: 在达到特定时间周期或日历日期后,将陈旧数据移动到低成本的公有云存储方案中。
要求
安装并配置 mc
该过程使用 mc 在 MinIO 集群上执行操作。 请将 mc 安装在一台同时具备源集群和目标集群网络访问能力的主机上。 有关下载和安装 mc 的说明,请参见 mc 安装快速开始。
使用 mc alias set 命令为源 MinIO 集群创建别名。 创建别名时,需要为源集群和目标集群上的用户指定访问密钥。 所指定的用户必须具备配置和应用迁移操作所需的 权限。
所需的 MinIO 权限
MinIO 要求在要创建生命周期管理规则的一个或多个存储桶范围内具备以下权限。
此外,在为对象迁移生命周期管理规则创建远程层的集群上,MinIO 还要求具备以下管理权限:
例如,以下策略授予在集群中任意存储桶上配置对象迁移生命周期管理规则的权限:
所需的 Azure 权限
对象迁移生命周期管理规则要求在远程存储层上具备额外权限。 具体而言,MinIO 要求 Azure 凭证对远程存储账户和容器具备读取、 写入、列出和删除权限。
有关配置所需权限的更完整说明,请参阅 Azure RBAC 文档。
远程存储账户和容器必须预先存在
在将该资源配置为生命周期管理层或规则的目标之前,先创建远程 Azure 存储账户 和容器。 在 创建 Azure 存储账户 时,请确保该存储账户对应 Standard 或 Premium blob storage,并使用本地冗余存储(LRS)选项。 MinIO 使用的 Azure Go SDK API 不支持其他任何冗余选项。
如果您为存储账户设置了 默认访问层,那么在定义远程层时,如果未指定 storage class,MinIO 将使用该默认值。 请确保记录 Azure 存储账户和 MinIO 分层配置的相关设置,以避免潜在的混淆、误配置或其他意外结果。
有关 Azure 存储账户的更多信息,请参见 Storage accounts。
注意事项
对远程数据的独占访问
MinIO 要求对远程存储层上的已转移数据拥有独占访问权限。 “hot” MinIO 源端上的对象元数据与远程 “warm/cold” 层上的对象数据紧密关联。 如果无法访问远程层,MinIO 就无法检索对象数据; 同样,远程层也不能用于恢复源端丢失的元数据。
对已转移对象的所有访问都必须仅通过 MinIO 发起的 S3 API 操作完成。 手动修改已转移对象时,无论修改的是 “hot” MinIO 层上的元数据, 还是远程 “warm/cold” 层上的对象数据,都可能导致该对象的数据丢失。
对于远程存储桶或存储桶前缀中不受该 MinIO 部署明确管理的任何对象, MinIO 都会将其忽略。 自动转移与透明对象检索依赖以下前提:
- 不会在远程存储上由外部修改、迁移或删除对象。
- 远程存储桶上不存在生命周期管理规则 (例如转移或过期)。
MinIO 会将所有已转移对象存储在远程存储桶或资源下、 每个部署唯一的前缀值之中。 该值并非用于在后端识别源部署。 在配置远程目标时,MinIO 还支持附加一个可选的人类可读前缀, 这可能有助于诊断、维护或灾难恢复相关操作。
对于包含其他数据的远程存储层, 包括来自其他 MinIO 部署的已转移对象, MinIO 建议指定此可选前缀。 本教程包含设置此前缀所需的语法。
重要
MinIO 不 支持更改与 Azure 远程层关联的账户名称。 Azure 存储后端与该账户绑定,因此更改账户会改变存储后端,并导致无法访问已迁移到原始账户/后端的任何对象。
如果您需要与 Azure 远程层配置相关的场景化指导,请联系 MinIO Support。
远程数据的可用性
MinIO 分层行为依赖远程存储在收到请求后立即返回对象 (毫秒到秒级)。 因此,MinIO 不支持需要 rehydration、等待窗口 或人工干预的远程存储。
MinIO 会为每个已转移对象创建元数据,用于标识其在远程存储中的位置。 应用程序无法脱离 MinIO 直接识别和访问已转移对象。 因此,已转移数据的可用性仍依赖于 纠删码 和分布式部署拓扑 为 MinIO 部署中所有对象提供的核心保护能力。 使用对象转移不会带来任何额外的业务连续性或灾难恢复收益。
需要 BC/DR 保护的工作负载应实现 MinIO Server-Side replication。 复制可确保对象保存在远程复制站点上, 从而使用户能够在发生部分或全部数据丢失时从远端重新同步。 有关如何使用复制在部分或全部数据丢失后恢复的更完整文档, 请参见 重新同步(灾难恢复)。
过程
1) 为生命周期管理配置用户账户和策略
此步骤会在 MinIO 部署上创建用于支持生命周期管理操作的用户和策略。 如果该部署已经存在具备所需 permissions 的用户,则可以跳过此步骤。
以下示例使用 Alpha 作为 MinIO 部署 alias 的占位符。 请将其替换为配置生命周期管理规则时所使用的 MinIO 部署别名。 同时,请按照所在组织的密码生成最佳实践, 将密码 LongRandomSecretKey 替换为足够长、随机且安全的密钥。
此示例假定所指定的 alias 具有在该部署上创建策略和用户所需的权限。 有关 MinIO 用户和策略的更完整文档, 请分别参见 用户管理 和 MinIO Policy Based Access Control。
2) 配置远程存储层
使用 mc ilm tier add 命令添加新的远程存储层:
上述示例使用了以下参数:
参数 |
说明 |
|---|---|
要在其上配置远程层的 MinIO 部署的 |
|
为新的 Azure blob 远程存储层指定的名称。
请使用全大写名称,例如 |
|
用作远程存储资源的 Storage Account。 创建该层后,无法更改此账户名称。 |
|
指定 该账户密钥对应的 Azure 策略必须具备所需 权限。 更多信息请参见 Managing storage account access keys。 |
|
MinIO 将对象迁移到其上的 Azure 存储后端中的容器名称。 |
|
(可选)MinIO 将对象迁移到其上的 Azure blob 存储后端的完整 URL。
如果未指定,默认为 |
|
MinIO 迁移对象时使用的可选容器前缀。 MinIO 会将所有已迁移对象存储在指定 对于包含其他数据的远程存储层,包括来自其他 MinIO 部署的已迁移对象,MinIO 建议指定该可选前缀。 此前缀应能清晰指向源 MinIO 部署,以便开展与诊断、维护或灾难恢复相关的操作。 |
|
MinIO 应用于迁移到 Azure 容器中对象的 Azure 访问层。 MinIO 的分层行为依赖远程存储在收到请求后立即返回对象(毫秒到秒级)。 因此,MinIO 不能 支持需要 rehydration、等待周期或人工干预的远程存储。 以下 Azure 访问层满足 MinIO 对远程层的要求:
|
3) 创建并应用迁移规则
使用 mc ilm rule add 命令为存储桶创建新的转移规则。 以下示例将对象配置为在指定的日历天数后执行转移:
上述示例指定了以下参数:
参数 |
说明 |
|---|---|
指定要为其创建生命周期管理规则的 MinIO 部署
|
|
指定要为其创建生命周期管理规则的存储桶完整路径。 |
|
MinIO 将对象转移到的远程存储层。 指定在上一步中创建的远程存储层名称。 如果要将非当前对象版本转移到不同的远程层,
请为 |
|
MinIO 在经过多少个日历天后将对象标记为可转移。
该值必须为整数,例如 |
|
MinIO 在经过多少个日历天后将非当前对象版本标记为可转移。
MinIO 具体计算的是对象变为非当前版本后的时间,
而不是对象创建时间。该值必须为整数,
例如 省略此值可忽略非当前对象版本。 此选项对未启用版本控制的存储桶无效。 |
4) 验证迁移规则
使用 mc ilm rule ls 命令查看已配置的迁移规则:
9 - 对象自动过期
本页中的每个过程都会创建一条新的对象生命周期管理规则,用于让 MinIO 存储桶中的对象过期。该过程适用于在特定时间段或日历日期之后删除“旧”对象 等场景。
要求
安装并配置 mc
该过程使用 mc 对 MinIO 集群执行操作。请在一台可同时通过网络访问源集群 和目标集群的机器上安装 mc。有关下载和安装 mc 的说明,请参阅 mc 快速安装。
使用 mc alias set 命令为源 MinIO 集群和目标 S3 兼容服务创建别名。 创建别名时,需要为源集群和目标集群上的用户指定访问密钥。指定的用户必须具备 配置和应用过期操作所需的 权限。
所需权限
MinIO 要求对创建生命周期管理规则的存储桶或多个存储桶授予以下权限。
如果要在某个集群上为对象转换生命周期管理规则创建远程层,MinIO 还要求在该 集群上具备以下管理权限:
例如,以下策略授予了在该集群任意存储桶上配置对象转换生命周期管理规则的 权限:
按天数使对象过期
使用带有 --expire-days 的 mc ilm rule add, 可在对象创建若干天后使存储桶内容过期:
- 将
ALIAS替换为 S3 兼容主机的alias。 - 将
PATH替换为 S3 兼容主机上该存储桶的 路径。 - 将
DAYS替换为对象过期前的天数。 例如,指定30表示对象会在创建 30 天后过期。
使已版本控制的对象过期
使用 mc ilm rule add 使非当前对象版本和对象删除标记过期:
- 若要让非当前对象版本在指定天数后过期,请包含
--noncurrent-expire-days。 - 若要让没有剩余版本的对象的删除标记过期,请包含
--expire-delete-marker。
-
若要让对象的所有版本过期,请包含
--expire-all-object-versions。此过期规则仅适用于 最新版本或当前版本不是DeleteMarker的对象。 -
将
PATH替换为 S3 兼容主机上该存储桶的 路径。 -
将
NONCURRENT_DAYS替换为非当前对象版本过期前的 天数。例如,指定30d表示某个版本在成为非当前版本至少 30 天后过期。
10 - 数据压缩
概述
MinIO Server 支持对对象进行压缩,以减少磁盘使用量。 对象在 PUT 时会先压缩再写入磁盘,在 GET 时会先解压再发送给客户端。这样一来,压缩过程对客户端应用程序和服务是透明的。
根据数据类型的不同,压缩还可能提高整体吞吐量。 在生产部署中,写入吞吐量通常为系统中每个可用 CPU 核心每秒 500MB 或更高。 解压吞吐量大约为每个 CPU 核心每秒 1 GB 或更高。
为获得最佳效果,请参阅 MinIO 的 推荐硬件配置,或使用 MinIO SUBNET 与工程师直接协作分析压缩性能。
默认文件类型
数据压缩是全局选项,所配置的设置会应用于部署中的所有存储桶。 启用数据压缩后,默认会压缩以下类型的数据:
文件扩展名 |
媒体(MIME)类型 |
|---|---|
|
|
你可以通过指定所需的文件扩展名和 media (MIME) types 来控制哪些对象会被压缩。
现有对象不会被修改
启用、禁用或更新某个部署的压缩设置时,不会修改现有对象。 新对象会根据其创建时生效的设置进行压缩。
排除的文件类型
某些数据无法被有效压缩。 例如:视频、已经压缩过的数据,或小于 4KiB 的文件。 MinIO 不会压缩常见的不可压缩文件类型,即使它们已在压缩配置中指定。
这些类型的对象永远不会被压缩:
对象类型 |
文件扩展名 |
媒体(MIME)类型 |
|---|---|---|
音频 |
|
|
视频 |
*.mp4*.mkv*.mov |
|
图像 |
*.jpg*.png*.gif |
|
7ZIP 压缩文件 |
|
|
BZIP2 压缩文件 |
|
|
GZIP 压缩文件 |
|
|
RAR 压缩文件 |
|
|
LZMA 压缩文件 |
|
|
ZIP 压缩文件 |
|
application/zipapplication-x-zip-compressed |
小于 4 KiB |
数据压缩与加密
MinIO 支持对压缩后的对象进行加密,但不建议在未事先进行风险评估的情况下同时启用压缩和加密。 在为压缩对象启用加密之前,请仔细评估你的环境中的安全需求。
有关如何同时使用压缩和加密的更多信息,请参阅 Transparent Data Compression on MinIO。 MinIO SUBNET 用户可以 log in 并与我们的工程和安全团队沟通,以评估加密选项。
教程
启用数据压缩
要启用数据压缩,请使用 mc admin config set 将 compression 键的 enable 选项设置为 on。
以下命令会为 默认类型 的新对象启用压缩:
- 将
ALIAS替换为已配置 MinIO 部署的alias。
现有的未压缩对象不会被修改。 要配置需要压缩的扩展名和类型,请参阅 配置要压缩哪些对象。
要查看当前的压缩设置:
禁用数据压缩
要禁用数据压缩,请使用 mc admin config set 将 compression 键的 enable 选项设置为 off:
以下命令会禁用新对象的数据压缩:
- 将
ALIAS替换为已配置 MinIO 部署的alias。
现有的已压缩对象不会被修改。
配置要压缩哪些对象
通过在 extensions 或 mime_types 参数中指定所需的文件扩展名和媒体类型,来配置需要压缩的对象。
默认的数据压缩配置会压缩以下类型的数据:
文件扩展名 |
媒体(MIME)类型 |
|---|---|
|
|
默认排除的扩展名和类型永远不会被压缩
某些对象无法被高效压缩。 即使这些对象已在 extensions 或 mime_types 参数中指定,MinIO 也不会尝试压缩它们。 排除类型列表请参阅 排除的文件类型。
以下各节介绍如何为所需的文件扩展名和媒体类型配置压缩。
压缩所有可压缩对象
要压缩除 默认排除类型 之外的所有对象,请使用 mc admin config set 将 compression 键的 extensions 和 mime_types 选项设置为空列表:
- 将
ALIAS替换为已配置 MinIO 部署的alias。
按文件扩展名压缩对象
要压缩具有特定文件扩展名的对象,请使用 mc admin config set 在 extensions 参数中设置所需的文件扩展名。
以下命令会压缩扩展名为 .bin 和 .txt 的文件:
- 将
ALIAS替换为已配置 MinIO 部署的alias。
新的文件扩展名列表会替换之前的列表。 如果要添加或删除扩展名,请使用完整的待压缩扩展名列表重新执行 extensions 命令。
以下命令会将 .pdf 添加到上一个示例中的文件扩展名列表:
- 将
ALIAS替换为已配置 MinIO 部署的alias。
按媒体类型压缩对象
要压缩特定媒体类型的对象,请使用 mc admin config set 将 compression 键的 mime_types 选项设置为所需类型的列表。
以下示例会压缩类型为 application/json 和 image/bmp 的文件:
- 将
ALIAS替换为已配置 MinIO 部署的alias。
新的媒体类型列表会替换之前的列表。 如果要添加或删除类型,请使用完整的待压缩类型列表重新执行 mime_types 命令。
你可以使用 * 指定某一媒体类型下的所有子类型。 以下命令会将所有 text 子类型添加到上一个示例中的列表:
- 将
ALIAS替换为已配置 MinIO 部署的alias。