

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 适用于 Amazon OpenSearch 服务的冷存储
<a name="cold-storage"></a>

冷存储允许您在您的 Amazon Ser OpenSearch vice 域中存储任意数量的不经常访问的数据或历史数据，并按需进行分析，成本低于其他存储层。如果您需要对旧数据进行定期研究或取证分析，则适合使用冷存储。适用于冷存储的数据的实际示例包括不经常访问的日志、为满足法规遵从性要求而必须保留的数据或具有历史价值的日志。

与[UltraWarm](ultrawarm.md)存储类似，冷存储由 Amazon S3 提供支持。当你需要查询冷数据时，你可以有选择地将其附加到现有 UltraWarm节点。您可以手动或使用索引状态管理策略管理冷数据的迁移和生命周期。

**Topics**
+ [先决条件](#coldstorage-pp)
+ [冷存储要求和性能注意事项](#coldstorage-calc)
+ [冷存储定价](#coldstorage-pricing)
+ [启用冷存储](#coldstorage-enable)
+ [在 OpenSearch 仪表板中管理冷索引](#coldstorage-dashboards)
+ [将索引迁移到冷存储](#coldstorage-migrating)
+ [自动迁移到冷存储](#coldstorage-ism)
+ [取消迁移到冷存储](#coldstorage-cancel)
+ [列出冷索引](#coldstorage-list)
+ [将冷索引迁移到温存储](#coldstorage-migrating-back)
+ [从快照恢复冷索引](#cold-snapshot)
+ [取消从冷存储迁移到热存储](#coldtowarm-cancel)
+ [更新冷索引元数据](#cold-update-metadata)
+ [删除冷索引](#cold-delete)
+ [禁用冷存储](#coldstorage-disable)

## 先决条件
<a name="coldstorage-pp"></a>

冷存储具有以下先决条件：
+ 冷存储需要 OpenSearch 或 Elasticsearch 版本 7.9 或更高版本。
+ 要在 OpenSearch 服务域上启用冷存储，还必须在同一域上启用热存储。
+ 要使用冷存储，域必须具有[专用的主节点](managedomains-dedicatedmasternodes.md)。
+ 如果您的域为数据节点使用 T2 或者 T3 实例类型，则无法使用冷存储。
+ 如果您的索引使用近似 k-NN（`"index.knn":true`），则可将版本 2.17及更高版本移至冷存储。版本低于 2.17 的域可升级至 2.17 以使用此功能，但创建于 2.x 之前的 KNN 索引无法迁移至冷存储。
+ 如果域使用[精细的访问控制](fgac.md)，则必须将非管理员用户[映射到](fgac.md#fgac-mapping) OpenSearch 仪表板中的`cold_manager`角色才能管理冷索引。

**注意**  
某些先前存在的 OpenSearch 服务域中可能不存在该`cold_manager`角色。如果没有在控制面板中看到角色，则需要[手动创建它](#coldstorage-create-role)。

### 配置权限
<a name="coldstorage-create-role"></a>

如果您在先前存在的 OpenSearch 服务域上启用冷存储，则可能无法在该域上定义该`cold_manager`角色。如果您的域使用[精细访问控制](fgac.md)，则非管理员用户必须映射至此角色，以管理冷索引。手动创建 `cold_manager` 角色，请执行下列步骤：

1. 在 “ OpenSearch 控制面板” 中，转至 “**安全**”，然后选择 “**权限**”。

1. 选择**创建操作组**并配置以下组：    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/cold-storage.html)

1. 选择 **Role (角色)**，然后选择 **Create role (创建角色)**。

1. 将角色命名为 **cold\_manager**。

1. 针对**集群权限**，选择您创建的 `cold_cluster` 组。

1. 针对**索引**，输入 `*`。

1. 针对**索引权限**，选择您创建的 `cold_index` 组。

1. 选择**创建**。

1. 创建角色之后，[将其映射](fgac.md#fgac-mapping)设置为管理冷索引的任何用户或后端角色。

## 冷存储要求和性能注意事项
<a name="coldstorage-calc"></a>

由于冷存储使用 Amazon S3，因此不会产生任何热存储开销，例如副本、Linux 预留空间和 OpenSearch 服务预留空间。冷存储没有特定的实例类型，因为它没有附加任何计算容量。您可以将任意数量的数据存储在冷存储中。在 Amazon CloudWatch 中监控该`ColdStorageSpaceUtilization`指标，了解您正在使用多少冷存储空间。

## 冷存储定价
<a name="coldstorage-pricing"></a>

与 UltraWarm 存储类似，使用冷存储时，您只需为数据存储付费。冷数据没有计算成本，如果冷存储中没有数据，则不会收取计费。

在冷存储和热存储之间移动数据时，您不会产生任何传输费用。当索引在温存储和冷存储之间迁移时，您仍然只需为索引的一个副本付费。迁移完成后，索引将根据其迁移到的存储层计费。有关冷存储定价的更多信息，请参阅 [Amazon OpenSearch 服务定价](https://aws.amazon.com/opensearch-service/pricing/)。

## 启用冷存储
<a name="coldstorage-enable"></a>

控制台是创建使用冷存储的域的最简单方法。创建域时，请先选择**启用温数据节点**，因为您必须在同一域上启用热存储。然后，选择**启用冷存储**。

相同的基本过程适用于现有域，前提是它们满足[先决条件](#coldstorage-pp)。即使域状态从 **Processing (正在处理)** 变为 **Active (活动)** 后，冷存储可能也会在几个小时内无法使用。

您也可以使用 [AWS CLI](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/opensearch/index.html) 或者[配置 API](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/Welcome.html)以启用冷存储。

### 示例 CLI 命令
<a name="coldstorage-sample-cli"></a>

以下 AWS CLI 命令创建一个包含三个数据节点、三个专用主节点、启用冷存储并启用细粒度访问控制的域：

```
aws opensearch create-domain \
  --domain-name {{my-domain}} \
  --engine-version Opensearch_1.0 \
  --cluster-config ColdStorageOptions={Enabled=true},WarmEnabled=true,WarmCount=4,WarmType=ultrawarm1.medium.search,InstanceType=r6g.large.search,DedicatedMasterEnabled=true,DedicatedMasterType=r6g.large.search,DedicatedMasterCount=3,InstanceCount=3 \
  --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=11 \
  --node-to-node-encryption-options Enabled=true \
  --encryption-at-rest-options Enabled=true \
  --domain-endpoint-options EnforceHTTPS=true,TLSSecurityPolicy=Policy-Min-TLS-1-2-2019-07 \
  --advanced-security-options Enabled=true,InternalUserDatabaseEnabled=true,MasterUserOptions='{MasterUserName={{master-user}},MasterUserPassword={{master-password}}}' \
  --region {{us-east-2}}
```

有关更多信息，请参阅 [AWS CLI 命令参考](https://docs.aws.amazon.com/cli/latest/reference/)。

### 示例配置 API 请求
<a name="coldstorage-sample-config-api"></a>

以下对配置 API 的请求创建一个具有三个数据节点、三个专用主节点、启用冷存储和启用精细访问控制的域：

```
POST https://es.us-east-2.amazonaws.com/2021-01-01/opensearch/domain
{
  "ClusterConfig": {
    "InstanceCount": 3,
    "InstanceType": "r6g.large.search",
    "DedicatedMasterEnabled": true,
    "DedicatedMasterType": "r6g.large.search",
    "DedicatedMasterCount": 3,
    "ZoneAwarenessEnabled": true,
    "ZoneAwarenessConfig": {
      "AvailabilityZoneCount": 3
     },
    "WarmEnabled": true,
    "WarmCount": 4,
    "WarmType": "ultrawarm1.medium.search",
    "ColdStorageOptions": {
       "Enabled": true
     }
  },
  "EBSOptions": {
    "EBSEnabled": true,
    "VolumeType": "gp2",
    "VolumeSize": 11
  },
  "EncryptionAtRestOptions": {
    "Enabled": true
  },
  "NodeToNodeEncryptionOptions": {
    "Enabled": true
  },
  "DomainEndpointOptions": {
    "EnforceHTTPS": true,
    "TLSSecurityPolicy": "Policy-Min-TLS-1-2-2019-07"
  },
   "AdvancedSecurityOptions": {
    "Enabled": true,
    "InternalUserDatabaseEnabled": true,
    "MasterUserOptions": {
      "MasterUserName": "{{master-user}}",
      "MasterUserPassword": "{{master-password}}"
    }
  },
  "EngineVersion": "Opensearch_1.0",
  "DomainName": "{{my-domain}}"
}
```

有关详细信息，请参阅《[亚马逊 OpenSearch 服务 API 参考](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/Welcome.html)》。

## 在 OpenSearch 仪表板中管理冷索引
<a name="coldstorage-dashboards"></a>

您可以使用 OpenSearch 服务域中现有的仪表板界面管理热索引、温索引和冷索引。使用控制面板，您可以在温存储和冷存储之间迁移索引，并监控索引迁移状态，而无需使用 CLI 或配置 API。有关更多信息，请参阅[管理 OpenSearch 仪表板中的索引](dashboards.md#dashboards-indices)。

## 将索引迁移到冷存储
<a name="coldstorage-migrating"></a>

将索引迁移到冷存储时，您可以为数据提供一个时间范围，以便更轻松地发现。您可以根据索引中的数据选择时间戳字段，手动提供开始和结束时间戳，或选择不指定时间戳。


| 参数 | 支持的值 | 说明 | 
| --- | --- | --- | 
| timestamp\_field | 索引映射中的 date/time 字段。 | 所提供字段的最小值和最大值将计算并存储为冷索引的 `start_time` 和 `end_time` 元数据。 | 
| start\_time 和 end\_time | 使用以下格式之一：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/cold-storage.html) | 所提供的值将存储为冷索引的 `start_time` 和 `end_time` 元数据。 | 

如果您不想指定时间戳，请将 `?ignore=timestamp` 添加到请求。

以下请求将热索引迁移到冷存储，并为该索引中的数据提供开始和结束时间：

```
POST _ultrawarm/migration/{{my-index}}/_cold
  {
    "start_time": "2020-03-09",
    "end_time": "2020-03-09T23:00:00Z"
  }
```

然后检查迁移的状态：

```
GET _ultrawarm/migration/{{my-index}}/_status

{
  "migration_status": {
    "index": "{{my-index}}",
    "state": "RUNNING_METADATA_RELOCATION",
    "migration_type": "WARM_TO_COLD"
  }
}
```

OpenSearch 服务一次将一个索引迁移到冷存储。队列中最多可包含 100 个迁移。任何超出限制的请求都将被拒绝。要检查队列中的当前迁移数，请监控 `WarmToColdMigrationQueueSize` [指标](managedomains-cloudwatchmetrics.md#managedomains-cloudwatchmetrics-coldstorage)。迁移过程具有以下状态：

```
ACCEPTED_COLD_MIGRATION - Migration request is accepted and queued.
RUNNING_METADATA_MIGRATION - The migration request was selected for execution and metadata is migrating to cold storage.
FAILED_METADATA_MIGRATION - The attempt to add index metadata has failed and all retries are exhausted.
PENDING_INDEX_DETACH - Index metadata migration to cold storage is completed. Preparing to detach the warm index state from the local cluster.
RUNNING_INDEX_DETACH - Local warm index state from the cluster is being removed. Upon success, the migration request will be completed.
FAILED_INDEX_DETACH - The index detach process failed and all retries are exhausted.
```

## 自动迁移到冷存储
<a name="coldstorage-ism"></a>

我们建议在索引达到特定期限或满足其他条件后使用[索引状态管理](ism.md)自动执行迁移过程。请参阅[示例策略，该策略](ism.md#ism-example-cold)演示了如何自动将索引从热存储迁移 UltraWarm 到冷存储。

**注意**  
需要显式 `timestamp_field` 才能使用索引状态管理策略将索引移动到冷存储。

## 取消迁移到冷存储
<a name="coldstorage-cancel"></a>

如果迁移到冷存储器已排队或处于失败状态，您可以使用以下请求取消迁移：

```
POST _ultrawarm/migration/_cancel/{{my-index}}

{
  "acknowledged" : true
}
```

如果您的域使用精细访问控制，则需要 `indices:admin/ultrawarm/migration/cancel` 权限提出此请求。

## 列出冷索引
<a name="coldstorage-list"></a>

在查询之前，您可以列出冷存储中的索引，以决定要迁移到哪些索引以 UltraWarm 供进一步分析。以下请求列出所有冷索引（按索引名称排序）：

```
GET _cold/indices/_search
```

**示例响应**

```
{
  "pagination_id" : "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY",
  "total_results" : 3,
  "indices" : [
    {
      "index" : "my-index-1",
      "index_cold_uuid" : "hjEoh26mRRCFxRIMdgvLmg",
      "size" : 10339,
      "creation_date" : "2021-06-28T20:23:31.206Z",
      "start_time" : "2020-03-09T00:00Z",
      "end_time" : "2020-03-09T23:00Z"
    },
    {
      "index" : "my-index-2",
      "index_cold_uuid" : "0vIS2n-oROmOWDFmwFIgdw",
      "size" : 6068,
      "creation_date" : "2021-07-15T19:41:18.046Z",
      "start_time" : "2020-03-09T00:00Z",
      "end_time" : "2020-03-09T23:00Z"
    },
    {
      "index" : "my-index-3",
      "index_cold_uuid" : "EaeXOBodTLiDYcivKsXVLQ",
      "size" : 32403,
      "creation_date" : "2021-07-08T00:12:01.523Z",
      "start_time" : "2020-03-09T00:00Z",
      "end_time" : "2020-03-09T23:00Z"
    }
  ]
}
```

### 筛选
<a name="coldstorage-filter"></a>

您可以根据基于前缀的索引模式和时间范围偏移过滤冷索引。

以下请求列出了匹配 `event-*` 的前缀模式的索引：

```
GET _cold/indices/_search
 {
   "filters":{
      "index_pattern": "event-*"
   }
 }
```

**示例响应**

```
{
  "pagination_id" : "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY",
  "total_results" : 1,
  "indices" : [
    {
      "index" : "events-index",
      "index_cold_uuid" : "4eFiab7rRfSvp3slrIsIKA",
      "size" : 32263273,
      "creation_date" : "2021-08-18T18:25:31.845Z",
      "start_time" : "2020-03-09T00:00Z",
      "end_time" : "2020-03-09T23:00Z"
    }
  ]
}
```

以下请求将返回 `2019-03-01` 和 `2020-03-01` 之间的 `start_time` 和 `end_time` 元数据字段的索引：

```
GET _cold/indices/_search
{
  "filters": {
    "time_range": {
      "start_time": "2019-03-01",
      "end_time": "2020-03-01"
    }
  }
}
```

**示例响应**

```
{
  "pagination_id" : "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY",
  "total_results" : 1,
  "indices" : [
    {
      "index" : "my-index",
      "index_cold_uuid" : "4eFiab7rRfSvp3slrIsIKA",
      "size" : 32263273,
      "creation_date" : "2021-08-18T18:25:31.845Z",
      "start_time" : "2019-05-09T00:00Z",
      "end_time" : "2019-09-09T23:00Z"
    }
  ]
}
```

### 排序
<a name="coldstorage-sort"></a>

您可以按索引名称或大小等元数据字段对冷索引进行排序。以下请求按降序列出了所有按大小排序的索引：

```
GET _cold/indices/_search
 {
 "sort_key": "size:desc"
 }
```

**示例响应**

```
{
  "pagination_id" : "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY",
  "total_results" : 5,
  "indices" : [
    {
      "index" : "my-index-6",
      "index_cold_uuid" : "4eFiab7rRfSvp3slrIsIKA",
      "size" : {{32263273}},
      "creation_date" : "2021-08-18T18:25:31.845Z",
      "start_time" : "2020-03-09T00:00Z",
      "end_time" : "2020-03-09T23:00Z"
    },
    {
      "index" : "my-index-9",
      "index_cold_uuid" : "mbD3ZRVDRI6ONqgEOsJyUA",
      "size" : {{57922}},
      "creation_date" : "2021-07-07T23:41:35.640Z",
      "start_time" : "2020-03-09T00:00Z",
      "end_time" : "2020-03-09T23:00Z"
    },
    {
      "index" : "my-index-5",
      "index_cold_uuid" : "EaeXOBodTLiDYcivKsXVLQ",
      "size" : {{32403}},
      "creation_date" : "2021-07-08T00:12:01.523Z",
      "start_time" : "2020-03-09T00:00Z",
      "end_time" : "2020-03-09T23:00Z"
    }
  ]
}
```

其他有效的排序键是 `start_time:asc/desc`、`end_time:asc/desc` 和 `index_name:asc/desc`。

### 分页
<a name="coldstorage-pagination"></a>

您可以对冷索引列表进行分页。使用 `page_size` 参数（默认值为 10）配置每页要返回的索引数。冷索引中的每个 `_search` 请求将返回 `pagination_id`，您可以将其用于后续调用。

以下请求对冷索引的 `_search` 请求结果进行分页，并显示接下来的 100 个结果：

```
GET _cold/indices/_search?page_size=100
{
"pagination_id": "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY"
}
```

## 将冷索引迁移到温存储
<a name="coldstorage-migrating-back"></a>

使用上一节中的筛选条件缩小冷索引列表范围后，将其迁移回可以查询数据 UltraWarm 的位置，然后使用它来创建可视化效果。

以下请求会将两个冷索引迁移回热存储：

```
POST _cold/migration/_warm
 {
 "indices": "{{my-index1,my-index2}}"
 }


{
  "acknowledged" : true
}
```

要检查迁移的状态并检索迁移 ID，请发送以下请求：

```
GET _cold/migration/_status
```

**示例响应**

```
{
  "cold_to_warm_migration_status" : [
    {
      "migration_id" : "tyLjXCA-S76zPQbPVHkOKA",
      "indices" : [
        "{{my-index1,my-index2}}"
      ],
      "state" : "RUNNING_INDEX_CREATION"
    }
  ]
}
```

要获取特定于索引的迁移信息，请包括索引名称：

```
GET _cold/migration/{{my-index}}/_status
```

您可以按索引的当前迁移状态列出索引，而不是指定索引。有效值包括 `_failed`、`_accepted` 和 `_all`。

以下命令可获取单个迁移请求中所有索引的状态：

```
GET _cold/migration/_status?migration_id={{my-migration-id}}
```

使用状态请求检索迁移 ID。有关迁移的详细信息，请添加 `&verbose=true`。

您可以分批（10 个或更少）将索引从冷存储迁移到温存储，最多可同时迁移 100 个索引。任何超出限制的请求都将被拒绝。要检查目前执行的迁移数，请监控 `ColdToWarmMigrationQueueSize` [指标](managedomains-cloudwatchmetrics.md#managedomains-cloudwatchmetrics-coldstorage)。迁移过程具有以下状态：

```
ACCEPTED_MIGRATION_REQUEST - Migration request is accepted and queued.
RUNNING_INDEX_CREATION - Migration request is picked up for processing and will create warm indexes in the cluster.
PENDING_COLD_METADATA_CLEANUP - Warm index is created and the migration service will attempt to clean up cold metadata.
RUNNING_COLD_METADATA_CLEANUP - Cleaning up cold metadata from the indexes migrated to warm storage.
FAILED_COLD_METADATA_CLEANUP - Failed to clean up metadata in the cold tier.
FAILED_INDEX_CREATION - Failed to create an index in the warm tier.
```

## 从快照恢复冷索引
<a name="cold-snapshot"></a>

如果需要还原已删除的冷索引，您可以按照 [从快照恢复温索引](ultrawarm.md#ultrawarm-snapshot) 中的说明将其还原到暖层，然后再次将索引迁回冷层。您无法将已删除的冷索引直接恢复到冷层。 OpenSearch 删除冷索引后，服务会将其保留 14 天。

## 取消从冷存储迁移到热存储
<a name="coldtowarm-cancel"></a>

如果从冷存储到热存储的索引迁移已排队或处于失败状态，您可以通过以下请求取消它：

```
POST _cold/migration/{{my-index}}/_cancel

{
  "acknowledged" : true
}
```

要取消一批索引的迁移（一次最多 10 个），请指定迁移 ID：

```
POST _cold/migration/_cancel?migration_id={{my-migration-id}}

{
  "acknowledged" : true
}
```

使用状态请求检索迁移 ID。

## 更新冷索引元数据
<a name="cold-update-metadata"></a>

您可以更新 `start_time` 和 `end_time` 字段，用于冷索引：

```
PATCH _cold/{{my-index}}
 {
 "start_time": "2020-01-01",
 "end_time": "2020-02-01"
 }
```

您无法更新在冷存储索引中的 `timestamp_field`。

**注意**  
OpenSearch 仪表板不支持 PATCH 方法。使用 [curl](https://curl.haxx.se/)、[Postman](https://www.getpostman.com/) 或其他方法来更新冷元数据。

## 删除冷索引
<a name="cold-delete"></a>

如果不使用 ISM 策略，则可以手动删除冷索引。以下请求删除冷索引：

```
DELETE _cold/{{my-index}}

{
  "acknowledged" : true
}
```

## 禁用冷存储
<a name="coldstorage-disable"></a>

 OpenSearch 服务控制台是禁用冷存储的最简单方法。选择域，依次选择 **Actions（操作）**、**Edit cluster configuration（编辑集群配置）**，然后取消选择 **Enable cold storage（启用冷存储）**。

要使用 AWS CLI 或配置 API`ColdStorageOptions`，请在下方设置`"Enabled"="false"`。

在禁用冷存储之前，必须先删除所有冷索引或将其迁移回温存储，否则禁用操作将失败。