文档

将对象从 MinIO 迁移到 S3

此页面上的步骤创建一个新的对象生命周期管理规则,该规则将对象从 MinIO 存储桶迁移到 Amazon Web Services S3 存储后端上的远程存储层兼容 S3 的服务。此步骤支持用例,例如在一定时间段或日历日期后将对象分层到低成本或归档存储中。

要求

安装和配置 mc

此步骤使用 mc 执行 MinIO 集群上的操作。在具有到源和目标集群的网络访问权限的机器上安装 mc。有关下载和安装 mc 的说明,请参阅 mc 安装快速入门

使用 mc alias set 命令为源 MinIO 集群创建别名。别名创建需要指定源和目标集群上用户的访问密钥。指定的用户必须具有 权限 用于配置和应用迁移操作。

所需的 MinIO 权限

MinIO 需要以下权限,这些权限的作用范围是您要为其创建生命周期管理规则的存储桶或存储桶。

MinIO 还需要以下管理权限,这些权限在您创建用于对象迁移生命周期管理规则的远程层的集群上。

例如,以下策略提供了在集群中的任何存储桶上配置对象迁移生命周期管理规则的权限:。

{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "admin:SetTier",
               "admin:ListTier"
            ],
            "Effect": "Allow",
            "Sid": "EnableRemoteTierManagement"
      },
      {
            "Action": [
               "s3:PutLifecycleConfiguration",
               "s3:GetLifecycleConfiguration"
            ],
            "Resource": [
                        "arn:aws:s3:::*"
            ],
            "Effect": "Allow",
            "Sid": "EnableLifecycleManagementRules"
      }
   ]
}

所需的 S3 权限

对象迁移生命周期管理规则需要远程存储层上的其他权限。具体而言,MinIO 需要远程层凭据提供对远程存储桶的读、写、列出和删除权限。

例如,以下策略提供了将对象转移进出远程层级的必要权限。

{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:s3:::MyDestinationBucket"
            ],
            "Sid": ""
      },
      {
            "Action": [
               "s3:GetObject",
               "s3:PutObject",
               "s3:DeleteObject"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:s3:::MyDestinationBucket/*"
            ],
            "Sid": ""
      }
   ]
}

修改 MinIO 用于对对象分层处理的存储桶的 Resource

有关配置所需权限的更完整指南,请参阅 Amazon S3 权限 文档。

远程存储桶必须存在

在使用该存储桶作为目标配置生命周期管理层级或规则之前,请创建远程 S3 存储桶。

注意事项

生命周期管理对象扫描器

MinIO 使用 扫描器进程 来检查对象是否符合所有已配置的生命周期管理规则。由于高 I/O 工作负载或系统资源有限而导致扫描速度缓慢可能会延迟生命周期管理规则的应用。有关更多信息,请参阅 生命周期管理对象扫描器

对远程数据的独占访问

MinIO 需要对远程存储层级上的转移数据进行独占访问。 “热” MinIO 源上的对象元数据与 “温/冷” 远程层级上的对象数据紧密相关。MinIO 无法在没有访问远程存储的情况下检索对象数据,也不能使用远程存储来恢复源上的丢失元数据。

所有对转移对象的访问必须通过 MinIO 进行,并且只能通过 S3 API 操作。手动修改转移对象(无论是 “热” MinIO 层级上的元数据还是远程 “温/冷” 层级上的对象数据)都可能导致对象数据的丢失。

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

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

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

MinIO 将所有转移对象存储在远程存储桶或资源中的一个唯一的每个部署前缀值下。该值不打算用于支持从后端识别源部署。MinIO 在配置远程目标时支持一个额外的可选人性化前缀,这可能有利于与诊断、维护或灾难恢复相关的操作。

MinIO 建议为包含其他数据的远程存储层级指定此可选前缀,包括来自其他 MinIO 部署的转移对象。本教程包含为设置此前缀所需的语法。

远程数据的可用性

MinIO 分层行为取决于远程存储在请求时立即(毫秒到秒)返回对象。因此,MinIO 无法支持需要重新水合、等待时间或手动干预的远程存储。

MinIO 为每个转移对象创建元数据,用于识别其在远程存储上的位置。应用程序不能独立于 MinIO 来简单地识别和访问转移对象。因此,转移数据的可用性取决于 擦除编码 和分布式部署拓扑为 MinIO 部署上的所有对象提供的相同核心保护。使用对象转移不会提供任何额外的业务连续性或灾难恢复优势。

需要 BC/DR 保护的工作负载应实施 MinIO 服务器端复制。复制确保对象保留在远程复制站点上,以便您可以在部分或全部数据丢失的情况下从远程站点重新同步。有关使用复制在部分或全部数据丢失后进行恢复的更完整文档,请参阅 重新同步(灾难恢复)

流程

1) 为生命周期管理配置用户帐户和策略

此步骤在 MinIO 部署上创建用户和策略,以支持生命周期管理操作。如果部署已经拥有具有必要 权限 的用户,则可以跳过此步骤。

以下示例使用 Alpha 作为 MinIO 部署的占位符 别名。请将此值替换为要在其上配置生命周期管理规则的 MinIO 部署的适当别名。请将密码 LongRandomSecretKey 替换为符合您组织的最佳实践的长期、随机且安全的密钥,以生成密码。

wget -O - http://min-io.cn/docs/minio/linux/examples/LifecycleManagementAdmin.json | \
mc admin policy create Alpha LifecycleAdminPolicy /dev/stdin
mc admin user add Alpha alphaLifecycleAdmin LongRandomSecretKey
mc admin policy attach Alpha LifecycleAdminPolicy --user=alphaLifecycleAdmin

本示例假定指定的别名具有在部署上创建策略和用户的必要权限。有关 MinIO 用户和策略的更完整文档,请参阅 用户管理MinIO 基于策略的访问控制

2) 配置远程存储层级

使用 mc ilm tier add 命令将 Amazon S3 服务添加为新的远程存储层级

mc ilm tier add s3 TARGET TIER_NAME  \
   --endpoint https://HOSTNAME       \
   --access-key ACCESS_KEY           \
   --secret-key SECRET_KEY           \
   --bucket BUCKET                   \
   --prefix PREFIX                   \
   --storage-class STORAGE_CLASS     \
   --region REGION

上面的示例使用以下参数:

参数

描述

TARGET

要在其上配置 S3 远程层级的 MinIO 部署的 别名

TIER_NAME

与新的 S3 远程存储层级相关联的名称。请使用全大写字母指定名称,例如 S3_TIER。此值在下一步中是必需的。

HOSTNAME

S3 存储后端的 URL 终结点。

ACCESS_KEY

MinIO 用于访问存储桶的 S3 访问密钥。访问密钥必须对应于具有所需 权限 的 IAM 用户。

SECRET_KEY

指定 ACCESS_KEY 的相应密钥。

BUCKET

S3 存储后端上 MinIO 将对象转移到的存储桶的名称。

PREFIX

MinIO 将对象转移到的存储桶内的可选前缀。

MinIO 将所有转移对象存储在指定的 BUCKET 中,位于每个部署前缀值下。省略此参数仅使用该值来隔离和组织远程存储中的数据。

MinIO 建议为包含其他数据的远程存储层级指定此可选前缀,包括来自其他 MinIO 部署的转移对象。此前缀应提供一个清晰的引用,以返回到源 MinIO 部署,以便于与诊断、维护或灾难恢复相关的操作。

STORAGE_CLASS

MinIO 将对象转移到的 S3 存储类别。

MinIO 分层行为取决于远程存储在请求时立即(毫秒到秒)返回对象。因此,MinIO 无法支持需要重新水合、等待时间或手动干预的远程存储。

以下 S3 存储类别满足 MinIO 作为远程层级的要求:

  • STANDARD

  • STANDARD-IA

  • STANDARD-ONEZONE

省略此值以使用存储桶的默认存储类别。指定此值将覆盖存储桶存储类别。

有关更多信息,请参阅 使用 Amazon S3 存储类别

REGION

指定 BUCKET 的 AWS S3 区域。如果 HOSTNAME 包含区域,则可以安全地省略此选项。

3) 创建并应用转移规则

使用 mc ilm rule add 命令为存储桶创建新的转移规则。以下示例配置在指定的日历天数后进行转移。

mc ilm rule add ALIAS/BUCKET \
--transition-tier TIERNAME \
--transition-days DAYS \
--noncurrent-transition-days NONCURRENT_DAYS
--noncurrent-transition-tier TIERNAME

上面的示例指定了以下参数:

参数

描述

ALIAS

指定您要为其创建生命周期管理规则的 MinIO 部署的 别名

BUCKET

指定您要为其创建生命周期管理规则的存储桶的完整路径。

TIERNAME

MinIO 将对象转移到的远程存储层级。指定上一步中创建的远程存储层级名称。

如果您要将非当前对象版本转移到不同的远程层级,请为 --noncurrent-transition-tier 指定不同的层级名称。

DAYS

MinIO 将对象标记为符合转移条件的日历天数。请将天数指定为整数,例如 30 表示 30 天。

NONCURRENT_DAYS

MinIO 将非当前对象版本标记为符合转移条件的日历天数。MinIO 特别是在对象变为非当前状态后,而不是从对象创建时间开始测量时间。请将天数指定为整数,例如 90 表示 90 天。

省略此值以忽略非当前对象版本。

此选项对非版本化存储桶没有影响。

4) 验证转移规则

使用 mc ilm rule ls 命令查看已配置的转移规则。

mc ilm rule ls ALIAS/PATH --transition
  • 请将 ALIAS 替换为 MinIO 部署的 别名

  • 用要检索配置的生命周期管理规则的存储桶名称替换 PATH