

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

# 在亚马逊 OpenSearch 服务中管理索引
<a name="managing-indices"></a>

将数据添加到 Amazon S OpenSearch ervice 后，您通常需要重新索引该数据、使用索引别名、将索引移到更具成本效益的存储空间或将其全部删除。本章介绍存储分层解决方案、索引状态管理和其他索引操作。有关 OpenSearch 索引的信息 APIs，请参阅[OpenSearch 文档](https://docs.opensearch.org/latest/opensearch/reindex-data/)。

**Topics**
+ [OpenSearch Amazon OpenSearch 服务域的优化实例](or1.md)
+ [适用于 Amazon OpenSearch 服务的多层存储](multi-tier-storage.md)
+ [UltraWarm 亚马逊 OpenSearch 服务的存储空间](ultrawarm.md)
+ [适用于 Amazon OpenSearch 服务的冷存储](cold-storage.md)
+ [Amazon OpenSearch 服务中的索引状态管理](ism.md)
+ [使用索引汇总汇总 Amazon OpenSearch 服务中的索引](rollup.md)
+ [在 Amazon OpenSearch 服务中转换索引](transforms.md)
+ [Amazon OpenSearch 服务的跨集群复制](replication.md)
+ [使用远程重新索引迁移亚马逊 OpenSearch 服务索引](remote-reindex.md)
+ [使用数据流管理 Amazon OpenSearch 服务中的时间序列数据](data-streams.md)

# OpenSearch Amazon OpenSearch 服务域的优化实例
<a name="or1"></a>

针对 Amazon S OpenSearch ervice 的 OpenSearch 优化实例系列是一种经济实惠的解决方案，用于存储大量数据。具有 OpenSearch 优化实例的域使用本地存储作为主存储，数据到达时同步复制到 Amazon S3。这种存储结构提供了更高的索引吞吐量和较高的耐久性。 OR1 OR2， OM2 使用本地使用亚马逊弹性区块存储 (Amazon EB `gp3` S) `io1` 或卷， OI2 而实例使用本地磁盘。 NVMe OpenSearch 经过优化的实例系列还支持在出现故障时自动恢复数据。有关 OpenSearch 优化的实例类型选项的信息，请参阅[当前一代实例类型](supported-instance-types.md#latest-gen)。

如果您正在运行索引繁重的运营分析工作负载，例如日志分析、可观察性或安全分析，则可以受益于 OpenSearch 优化实例的性能和计算效率的提高。此外， OpenSearch 优化实例提供的自动数据恢复功能可提高域的整体可靠性。

OpenSearch 服务向 Amazon 发送与存储相关的 OpenSearch 优化实例指标。 CloudWatch有关可用指标的列表，请参阅 [OpenSearch 优化实例 (OR1) 指标](managedomains-cloudwatchmetrics.md#managedomains-cloudwatchmetrics-or1)。

OpenSearch 优化的实例可按需提供，也可以按预留实例定价提供，在 Amazon EBS 和 Amazon S3 中预置的实例和存储按小时费率提供。

**Topics**
+ [限制](#or1-considerations)
+ [进行微调以提高摄取吞吐量](#or1-ultrawarm-tuning)
+ [OpenSearch 优化后的实例与其他实例有何不同](#or1-optimized-instances)
+ [OpenSearch 优化后的实例与实例有何不同 UltraWarm](#or1-ultrawarm-differences)
+ [为域配置 OpenSearch 经过优化的实例](#or1-using)

## 限制
<a name="or1-considerations"></a>

在为您的域使用 OpenSearch 经过优化的实例时，请考虑以下限制。
+ 新创建的域名必须运行 2.11 或更高 OpenSearch 版本。
+ 现有域名必须运行 OpenSearch 版本 2.15 或更高版本。
+ 域必须启用静态加密。有关更多信息，请参阅 [为 Amazon OpenSearch 服务加密静态数据](encryption-at-rest.md)。
+ 如果您的域使用专用主节点，则这些节点必须使用 Graviton 实例。有关专用主节点的更多信息，请参阅 [Amazon OpenSearch 服务中的专用主节点](managedomains-dedicatedmasternodes.md)。
+  OpenSearch 优化实例上索引的刷新间隔必须为 10 秒或更长。 OpenSearch 优化实例的默认刷新间隔为 10 秒。

## 进行微调以提高摄取吞吐量
<a name="or1-ultrawarm-tuning"></a>

为了从您的 OpenSearch 优化实例中获得最佳的索引吞吐量，我们建议您执行以下操作：
+ 使用大批量大小以提高缓冲区利用率。建议的大小为 10 MB。
+ 使用多个客户端来提高并行处理性能。
+ 活动主分片数量的设置要与数据节点的数量相匹配，从而尽可能提高资源利用率。

## OpenSearch 优化后的实例与其他实例有何不同
<a name="or1-optimized-instances"></a>

OpenSearch 优化实例与未优化实例的区别在以下方面：
+ 对于 OpenSearch 经过优化的实例，仅在主分片上执行索引。
+ 如果为 OpenSearch 优化后的实例配置了副本，则索引速率可能低于实际水平。例如，假设有 1 个主分片和 1 个副本分片，则索引创建速率可能显示为 1000，而实际索引创建速率为 2000。
+ OpenSearch 优化的实例在发送到远程源之前执行缓冲操作。这会导致摄取延迟更高。
**注意**  
`IndexingLatency` 指标不受影响，因为该指标不包括同步 translog 的时间。
+ 副本分片相比主分片可能有几秒的延迟。您可以使用 A `ReplicationLagMaxTime` mazon CloudWatch 指标监控延迟 

## OpenSearch 优化后的实例与实例有何不同 UltraWarm
<a name="or1-ultrawarm-differences"></a>

OpenSearch 服务提供的 UltraWarm 实例是一种经济实惠的方式来存储大量只读数据。 OpenSearch 优化版和 UltraWarm 实例都将数据存储在本地的 Amazon EBS 中，并远程存储在 Amazon S3 中。但是， OpenSearch 优化 UltraWarm 实例和实例在几个重要方面有所不同：
+ OpenSearch 优化的实例在您的本地和远程存储中*都*保留一份数据副本。在 UltraWarm 某些情况下，为了降低存储成本，数据主要保存在远程存储中。根据您的使用模式，可以将数据移动到本地存储。
+ OpenSearch 优化的实例处于活动状态，可以接受读取和写入操作，而 UltraWarm 实例上的数据在您手动将其移回热存储之前是只读的。
+ UltraWarm 依靠索引快照来保证数据的持久性。 OpenSearch 相比之下，优化的实例在幕后执行复制和恢复。如果索引为红色， OpenSearch 经过优化的实例将自动从 Amazon S3 中的远程存储中恢复丢失的分片。恢复时间因要恢复的数据量而异。

有关 UltraWarm 存储的更多信息，请参阅[UltraWarm 亚马逊 OpenSearch 服务的存储空间](ultrawarm.md)。

## 为域配置 OpenSearch 经过优化的实例
<a name="or1-using"></a>

使用 AWS 管理控制台 或 AWS Command Line Interface (AWS CLI) 创建新域时，您可以为数据节点选择 OpenSearch 优化的实例。您可以使用现有的工具来创建索引和查询数据。

### 控制台
<a name="or1-console"></a>

1. 导航到亚马逊 OpenSearch 服务控制台，网址为[https://console.aws.amazon.com/aos/](https://console.aws.amazon.com/aos/)。

1. 在左侧导航窗格中，选择 **域**。

1. 选择**创建域**。

1. 在**数据节点数量**部分中，展开**实例系列**菜单并选择**OpenSearch 已优化**。

1. 选择实例类型和其他存储设置。

1. 在**加密**部分，确保选中**启用静态数据加密**。

1. 配置域的其余部分，选择**创建**。

### AWS CLI
<a name="or1-cli"></a>

要使用配置使用 OpenSearch 优化存储的域 AWS CLI，您必须在中提供特定实例类型大小的值（例如 OR1 OR2 OM2、、或 OI2）`InstanceType`。

以下示例创建一个 OR1 实例大小为的域`2xlarge`并启用静态加密。

```
aws opensearch create-domain \
  --domain-name test-domain \
  --engine-version OpenSearch_2.11 \
  --cluster-config "InstanceType=or1.2xlarge.search,InstanceCount=3,DedicatedMasterEnabled=true,DedicatedMasterType=r6g.large.search,DedicatedMasterCount=3" \
  --ebs-options "EBSEnabled=true,VolumeType=gp3,VolumeSize=200" \
  --encryption-at-rest-options Enabled=true \
  --advanced-security-options "Enabled=true,InternalUserDatabaseEnabled=true,MasterUserOptions={MasterUserName=test-user,MasterUserPassword=test-password}" \
  --node-to-node-encryption-options Enabled=true \
  --domain-endpoint-options EnforceHTTPS=true \
  --access-policies '{"Version": "2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal":{"AWS":"*"},"Action":"es:*","Resource":"arn:aws:es:us-east-1:account-id:domain/test-domain/*"}]}'
```

以下示例创建一个 OI2 实例大小为的域`large`并启用静态加密。请注意， OI2 实例不需要配置 EBS，因为它们使用本地 NVMe 存储。

```
aws opensearch create-domain \
  --domain-name test-domain-oi2 \
  --engine-version OpenSearch_2.11 \
  --cluster-config "InstanceType=oi2.2xlarge.search,InstanceCount=3,DedicatedMasterEnabled=true,DedicatedMasterType=r6g.large.search,DedicatedMasterCount=3" \
  --encryption-at-rest-options Enabled=true \
  --advanced-security-options "Enabled=true,InternalUserDatabaseEnabled=true,MasterUserOptions={MasterUserName=test-user,MasterUserPassword=test-password}" \
  --node-to-node-encryption-options Enabled=true \
  --domain-endpoint-options EnforceHTTPS=true \
  --access-policies '{"Version": "2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal":{"AWS":"*"},"Action":"es:*","Resource":"arn:aws:es:us-east-1:account-id:domain/test-domain-oi2/*"}]}'
```

# 适用于 Amazon OpenSearch 服务的多层存储
<a name="multi-tier-storage"></a>

Amazon Ser OpenSearch vice 的多层存储是一种智能数据管理解决方案，它通过管理不同存储层的数据来优化性能和成本。这种架构允许组织通过将频繁访问的数据保存在高性能热存储中，同时将访问频率较低的数据转移到更具成本效益的温存储中，从而有效地权衡性能和成本。

Amazon OpenSearch 服务为 hot/warm 存储层提供了两种架构选项：
+ **OpenSearch 多层存储架构**
  + 将 Amazon S3 与本地实例存储相结合
  + 由 OpenSearch 优化实例提供支持
  + 支持暖层中的写入操作
  + 支持热层和温层之间的无缝数据迁移
  + 在 OpenSearch 3.3 及以上版本中可用
  + 不支持冰冷等级
+ **UltraWarm基于体系结构**
  + 将 Amazon S3 与本地实例存储相结合
  + 由 UltraWarm 实例提供支持
  + 针对只读温层工作负载进行了优化
  + 在 Elasticsearch 6.8 及以上版本以及所有版本上可用 OpenSearch 
  + 支持寒冷等级

**注意**  
 本文档仅重点介绍多层架构。[有关超温存储架构，请参阅[超温存储和冷](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ultrawarm.html)存储](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/cold-storage.html) 

## 多层存储架构
<a name="multi-tier"></a>

**Topics**
+ [主要优势](#multi-tier-benefits)
+ [先决条件](#multi-tier-prerequisites)
+ [限制](#multi-tier-limitations)
+ [需知信息](#things-to-note)
+ [创建多层域名](#multi-tier-creating)
+ [管理层迁移](#multi-tier-managing)
+ [安全配置](#multi-tier-security)
+ [最佳实践](#multi-tier-best-practices)
+ [监控指标](#multi-tier-metrics)

### 主要优势
<a name="multi-tier-benefits"></a>
+ **Writable Warm：支持对热**索引进行写入操作
+ **无缝迁移：**跨存储层无缝移动数据
+ **成本优化：**通过将不太活跃的数据移至经济实惠的温存储来降低存储成本
+ **性能增强：**保持热层中频繁访问的数据的高性能
+ **灵活的数据管理：**选择最适合您的工作负载要求的架构
+ **自动化管理：**简化跨存储层的数据生命周期管理

### 先决条件
<a name="multi-tier-prerequisites"></a>
+ **引擎版本： OpenSearch ****3.3 或更高版本**
+ **实例系列：**
  + 热门节点： OR1 OR2、 OM2、或 OI2
  + 温节点： OI2
+ **安全：** Node-to-node加密、静态加密、强制执行 HTTPS

### 限制
<a name="multi-tier-limitations"></a>
+ 适用于所有已 OpenSearch 优化实例但尚未启用 Ultrawarm 的域名
+ 不支持冷层

### 需知信息
<a name="things-to-note"></a>
+ 在多层架构中，热到热迁移不会触发强制合并。如果需要，用户仍然可以使用索引管理策略编排强制合并。
+ 除了索引之外，温节点现在还会执行后台合并操作（类似于热点）。
+ 温索引上的所有搜索请求都路由到主分片，只有在主分片关闭时，副本才会提供读取服务。
+ 此架构还支持温索引的自动快照
+ 只有热门索引才支持跨集群复制
+  APIs 诸如 Shrink、Split 和 Clone 之类的索引不适用于热索引。

### 创建多层域名
<a name="multi-tier-creating"></a>

#### 步骤 1：创建域名
<a name="multi-tier-step1"></a>

```
aws opensearch create-domain \
      --domain-name my-domain \
      --engine-version OpenSearch_3.3 \
      --cluster-config InstanceCount=3,InstanceType=or2.large.search,DedicatedMasterEnabled=true,DedicatedMasterType=m6g.large.search,DedicatedMasterCount=3,WarmEnabled=true,WarmCount=3,WarmType=oi2.2xlarge.search \
      --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":"user_name","MasterUserPassword":"your_pass"}}' \
      --access-policies '{"Version": "2012-10-17",		 	 	  "Statement":[{"Effect":"Allow","Principal":"*","Action":"es:*","Resource":"*"}]}' \
      --region us-east-1
```

#### 步骤 2：验证温节点
<a name="multi-tier-step2"></a>

```
aws opensearch describe-domain-nodes --domain-name my-domain --region us-east-1
```

响应示例（摘录）：

```
{
      "NodeType": "Warm",
      "InstanceType": "oi2.large.search",
      "NodeStatus": "Active"
    }
```

### 管理层迁移
<a name="multi-tier-managing"></a>

多层域支持：
+ 全新分层 APIs 可简化体验
+ 兼容性 UltraWarm APIs 方面的传统

#### 新分层 APIs
<a name="multi-tier-new-apis"></a>

**将索引迁移到 warm：**

```
curl -XPOST 'https://localhost:9200/index-name/_tier/warm'
```

响应：

```
{"acknowledged": true}
```

**将索引迁移到 hot：**

```
curl -XPOST 'https://localhost:9200/index-name/_tier/hot'
```

响应：

```
{"acknowledged": true}
```

**检查分层状态：**

```
curl -XGET 'https://localhost:9200/index-name/_tier'
```

示例响应：

```
{
      "tiering_status": {
         "index": "index-name",
         "state": "RUNNING_SHARD_RELOCATION",
         "source": "HOT",
         "target": "WARM",
         "start_time": 1745836500563,
         "shard_level_status": {
           "running": 0,
           "total": 100,
           "pending": 100,
           "succeeded": 0
         }
      }
    }
```

**详细的分片视图：**

```
curl 'https://localhost:9200/index1/_tier?detailed=true'
```

**列出所有正在进行的迁移（文本）：**

```
curl 'https://localhost:9200/_tier/all'
```

**列出所有正在进行的迁移 (JSON)：**

```
curl 'https://localhost:9200/_tier/all?format=json'
```

**按目标等级筛选：**

```
curl 'https://localhost:9200/_tier/all?target=_warm'
```

#### 兼容性 UltraWarm APIs 方面的传统
<a name="multi-tier-legacy-apis"></a>

**迁移到温暖模式：**

```
curl -XPOST localhost:9200/_ultrawarm/migration/index2/_warm
```

**迁移到 hot：**

```
curl -XPOST localhost:9200/_ultrawarm/migration/index2/_hot
```

**检查状态：**

```
curl -XGET localhost:9200/_ultrawarm/migration/index2/_status
```

### 安全配置
<a name="multi-tier-security"></a>

如果您在先前存在的 Amazon Ser OpenSearch vice 域上启用多层存储，则可能无法在该域上定义该`storage_tiering_manager`角色。必须将非管理员用户映射到此角色，才能使用精细访问控制管理域上的温索引。手动创建 `storage_tiering_manager` 角色，请执行下列步骤：

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

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

1. 选择**角色**和**创建角色**。

1. 将角色命名为 `storage_tiering_manager`。

1. 对于**群集权限**，选择 `storage_tiering_cluster` 和 `cluster_monitor`。

1. 对于**索引**，键入 `*`。

1. 对于**索引权限**`storage_tiering_index_read`，请选择`storage_tiering_index_write`和`indices_monitor`。

1. 选择**创建**。

1. 创建角色后，将其映射到将管理多层索引的任何用户或后端角色。

### 最佳实践
<a name="multi-tier-best-practices"></a>

在您的 Amazon Ser OpenSearch vice 域中实施多层存储时，请考虑以下最佳实践：
+ 定期审查您的数据访问模式以优化等级分配
+ 监控性能指标以确保高效的资源利用率
+ 使用新的分层 APIs 对数据迁移进行精细控制

### 监控指标
<a name="multi-tier-metrics"></a>

多层存储域为监控温层性能提供了额外的指标。这些指标包括现有 UltraWarm 指标和 OpenSearch 针对优化实例架构的新指标：

#### 新指标
<a name="multi-tier-new-metrics"></a>


| 指标名称 | 节点等级统计 | 集群等级统计 | 粒度 | 
| --- | --- | --- | --- | 
| WarmIndexingLatency | 平均值 | 平均值 | 1 分钟 | 
| WarmIndexingRate | 平均值 | 平均值、最大值、总和 | 1 分钟 | 
| WarmThreadpoolIndexingQueue | 最大值 | 总和、最大值、平均值 | 1 分钟 | 
| WarmThreadpoolIndexingRejected | 最大值 | 总和 | 1 分钟 | 
| WarmThreadpoolIndexingThreads | 最大值 | 总和、平均值 | 1 分钟 | 

# UltraWarm 亚马逊 OpenSearch 服务的存储空间
<a name="ultrawarm"></a>

UltraWarm 为在 Amazon OpenSearch 服务上存储大量只读数据提供了一种经济实惠的方式。标准数据节点使用“热”存储，其形式是连接到每个节点的实例存储或 Amazon EBS 卷。热存储为编制索引和搜索新数据提供尽可能快的性能。

 UltraWarm 节点不使用附加存储，而是使用 Amazon S3 和复杂的缓存解决方案来提高性能。对于不主动写入、查询频率较低且不需要相同性能的索引， UltraWarm 可以显著降低每 GiB 数据的成本。因为除非将温索引返回到热存储，否则它们 UltraWarm 是只读的，因此最适合存储不可变的数据，例如日志。

在中 OpenSearch，暖索引的行为与任何其他索引一样。您可以使用相同的方法查询它们， APIs 也可以使用它们在 OpenSearch 仪表板中创建可视化效果。

**Topics**
+ [先决条件](#ultrawarm-pp)
+ [UltraWarm 存储要求和性能注意事项](#ultrawarm-calc)
+ [UltraWarm 定价](#ultrawarm-pricing)
+ [启用 UltraWarm](#ultrawarm-enable)
+ [将索引迁移到 UltraWarm 存储](#ultrawarm-migrating)
+ [自动执行迁移](#ultrawarm-ism)
+ [迁移调整](#ultrawarm-settings)
+ [取消迁移](#ultrawarm-cancel)
+ [列出热索引和暖索引](#ultrawarm-api)
+ [将温索引返回到热存储](#ultrawarm-migrating-back)
+ [从快照恢复温索引](#ultrawarm-snapshot)
+ [暖索引的手动快照](#ultrawarm-manual-snapshot)
+ [将温索引迁移到冷存储](#ultrawarm-cold)
+ [KNN 索引的最佳实践](#ultrawarm-recommendations)
+ [正在禁用 UltraWarm](#ultrawarm-disable)

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

UltraWarm 有几个重要的先决条件：
+ UltraWarm 需要 OpenSearch 或 Elasticsearch 6.8 或更高版本。
+ 要使用温存储，域必须具有[专用的主节点](managedomains-dedicatedmasternodes.md)。
+ 使用[带待机功能的多可用区](managedomains-multiaz.md#managedomains-za-standby)域时，温节点的数量必须是所用可用区数量的整数倍。
+ 如果您的域为数据节点使用 T2 实例类型，则无法使用温存储。
+ 如果您的索引使用近似 k-NN（`"index.knn":true`），则可将版本 2.17 及更高版本移至温存储。2.17 之前版本的域名可以升级到 2.17 以使用此功能，但是在 2.x 之前的版本上创建的 KNN 索引无法迁移到。 UltraWarm
+ 如果网域使用[精细的访问控制](fgac.md)，则必须将用户映射到控制 OpenSearch 面板中的`ultrawarm_manager`角色才能进行 UltraWarm API 调用。

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

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

如果您在先前存在的 OpenSearch 服务域 UltraWarm 上启用，则可能无法在该域上定义该`ultrawarm_manager`角色。必须将非管理员用户映射到此角色，才能使用精细访问控制管理域上的温索引。手动创建 `ultrawarm_manager` 角色，请执行下列步骤：

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

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

1. 选择**角色**和**创建角色**。

1. 将角色命名为 **ultrawarm\$1manager**。

1. 对于**群集权限**，选择 `ultrawarm_cluster` 和 `cluster_monitor`。

1. 对于**索引**，键入 `*`。

1. 对于**索引权限**，选择 `ultrawarm_index_read`、`ultrawarm_index_write` 和 `indices_monitor`。

1. 选择**创建**。

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

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

如所述[计算存储要求](bp-storage.md)，热存储中的数据会产生大量开销：副本、Linux 预留空间和 OpenSearch 服务预留空间。例如，具有一个副本分片的 20 GiB 主分片需要大约 58 GiB 的热存储。

由于它使用 Amazon S3，因此不会 UltraWarm 产生任何开销。在计算 UltraWarm 存储需求时，您只考虑主分片的大小。S3 中数据的持久性消除了对副本的需要，而 S3 会抽象掉任何操作系统或服务注意事项。同样的 20 GiB 分片需要 20 GiB 的温存储空间。如果您预配置一个 `ultrawarm1.large.search` 实例，则可以将其所有 20 TiB 的最大存储空间用于主分片。有关实例类型的摘要以及每个实例可以解决的最大存储量，请参阅[UltraWarm 存储配额](limits.md#limits-ultrawarm)。

使用 UltraWarm，我们仍然建议最大分片大小为 50 GiB。通过[分配给每种 UltraWarm 实例类型的 CPU 内核数量和 RAM](#ultrawarm-pricing) 量，您可以大致了解它们可以同时搜索的分片数量。请注意，虽然在 S3 中只有主分片计入 UltraWarm存储空间，但 OpenSearch 控制面板和`_cat/indices`仍将 UltraWarm 索引大小报告为所有主分片和副本分片的*总*和。

例如，每个 `ultrawarm1.medium.search` 实例具有两个 CPU 内核，并且可以在 S3 上寻址高达 1.5 TiB 的存储。其中两个实例具有 3 TiB 的存储组合，如果每个分片为 50 GiB，则可以使用大约 62 个分片。如果对集群的请求仅搜索其中的四个分片，则性能可能会非常优良。如果请求很宽泛并且搜索了所有 62 个分片，则四个 CPU 内核可能难以执行该操作。监控`WarmCPUUtilization`和`WarmJVMMemoryPressure`[UltraWarm 指标](managedomains-cloudwatchmetrics.md#managedomains-cloudwatchmetrics-uw)以了解实例如何处理您的工作负载。

如果您的搜索范围广泛或频繁，请考虑将索引留在热存储中。就像任何其他 OpenSearch 工作负载一样，确定是否 UltraWarm 满足需求的最重要步骤是使用真实的数据集进行具有代表性的客户测试。

## UltraWarm 定价
<a name="ultrawarm-pricing"></a>

使用热存储，您需要为预配置的内容支付费用。有些实例需要附加的 Amazon EBS 卷，而其他实例则包含实例存储。无论该存储空间是空还是满，您都要支付相同的价格。

对于 UltraWarm 存储空间，您需要为实际使用量付费。一个 `ultrawarm1.large.search` 实例可以在 S3 上处理多达 20 TiB 的存储空间，但如果您仅存储 1 TiB 的数据，则只需为 1 TiB 的数据付费。与所有其他节点类型一样，您还需要为每个 UltraWarm 节点支付小时费率。有关更多信息，请参阅 [Amazon OpenSearch 服务的定价](what-is.md#pricing)。

## 启用 UltraWarm
<a name="ultrawarm-enable"></a>

控制台是创建使用温存储的域的最简单方法。创建域时，请选择**启用温数据节点**，然后选择所需的温节点数。相同的基本过程适用于现有域，前提是它们满足[先决条件](#ultrawarm-pp)。即使在域状态从 “**处理**中” 变为 “**活动**” 之后，也 UltraWarm 可能在几个小时内无法使用。

使用带待机功能的多可用区域时，温节点的数量必须是可用区数量的整数倍。有关更多信息，请参阅 [带待机功能的多可用区](managedomains-multiaz.md#managedomains-za-standby)。

您也可以使用[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) 来启用 UltraWarm，特别是中的`WarmEnabled``WarmCount`、和`WarmType`选项`ClusterConfig`。

**注意**  
域支持最大数量的温节点。有关更多信息，请参阅 [亚马逊 OpenSearch 服务配额](limits.md)。

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

以下 AWS CLI 命令创建一个具有三个数据节点、三个专用主节点、六个温节点并启用了细粒度访问控制的域：

```
aws opensearch create-domain \
  --domain-name my-domain \
  --engine-version Opensearch_1.0 \
  --cluster-config InstanceCount=3,InstanceType=r6g.large.search,DedicatedMasterEnabled=true,DedicatedMasterType=r6g.large.search,DedicatedMasterCount=3,ZoneAwarenessEnabled=true,ZoneAwarenessConfig={AvailabilityZoneCount=3},WarmEnabled=true,WarmCount=6,WarmType=ultrawarm1.medium.search \
  --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}' \
  --access-policies '{"Version": "2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal":{"AWS":["123456789012"]},"Action":["es:*"],"Resource":"arn:aws:es:us-west-1:123456789012:domain/my-domain/*"}]}' \
  --region us-east-1
```

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

### 示例配置 API 请求
<a name="ultrawarm-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": 6,
    "WarmType": "ultrawarm1.medium.search"
  },
  "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",
  "AccessPolicies": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"123456789012\"]},\"Action\":[\"es:*\"],\"Resource\":\"arn:aws:es:us-east-1:123456789012:domain/my-domain/*\"}]}"
}
```

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

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

如果您完成了对索引的写入并且不再需要尽可能快的搜索性能，请将其从 hot 迁移到 UltraWarm：

```
POST _ultrawarm/migration/my-index/_warm
```

然后检查迁移的状态：

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

{
  "migration_status": {
    "index": "my-index",
    "state": "RUNNING_SHARD_RELOCATION",
    "migration_type": "HOT_TO_WARM",
    "shard_level_status": {
      "running": 0,
      "total": 5,
      "pending": 3,
      "failed": 0,
      "succeeded": 2
    }
  }
}
```

索引运行状况必须为绿色才能执行迁移。如果您快速连续迁移多个索引，您可以获得所有迁移的明文摘要，类似于 `_cat` API：

```
GET _ultrawarm/migration/_status?v

index    migration_type state
my-index HOT_TO_WARM    RUNNING_SHARD_RELOCATION
```

OpenSearch 服务一次将一个索引迁移到。 UltraWarm队列中最多可包含 200 个迁移。任何超出限制的请求都将被拒绝。要检查队列中的当前迁移数，请监控 `HotToWarmMigrationQueueSize` [指标](managedomains-cloudwatchmetrics.md#managedomains-cloudwatchmetrics-uw)。在整个迁移过程中，索引仍然可用，无需停机。

迁移过程具有以下状态：

```
PENDING_INCREMENTAL_SNAPSHOT
RUNNING_INCREMENTAL_SNAPSHOT
FAILED_INCREMENTAL_SNAPSHOT
PENDING_FORCE_MERGE
RUNNING_FORCE_MERGE
FAILED_FORCE_MERGE
PENDING_FULL_SNAPSHOT
RUNNING_FULL_SNAPSHOT
FAILED_FULL_SNAPSHOT
PENDING_SHARD_RELOCATION
RUNNING_SHARD_RELOCATION
FINISHED_SHARD_RELOCATION
```

如这些状态所示，迁移可能会在快照、分片重新定位或强制合并期间失败。快照或分片重新定位期间的故障通常是由于节点故障或 S3 连接问题造成的。磁盘空间不足通常是强制合并失败的根本原因。

迁移完成后，同一 `_status` 请求返回错误。如果您在此时检查索引，您可以看到暖索引独有的一些设置：

```
GET my-index/_settings

{
  "my-index": {
    "settings": {
      "index": {
        "refresh_interval": "-1",
        "auto_expand_replicas": "false",
        "provided_name": "my-index",
        "creation_date": "1599241458998",
        "unassigned": {
          "node_left": {
            "delayed_timeout": "5m"
          }
        },
        "number_of_replicas": "1",
        "uuid": "GswyCdR0RSq0SJYmzsIpiw",
        "version": {
          "created": "7070099"
        },
        "routing": {
          "allocation": {
            "require": {
              "box_type": "warm"
            }
          }
        },
        "number_of_shards": "5",
        "merge": {
          "policy": {
            "max_merge_at_once_explicit": "50"
          }
        }
      }
    }
  }
}
```
+ 在这种情况下，`number_of_replicas` 是不消耗磁盘空间的被动副本的数量。
+ `routing.allocation.require.box_type` 指定索引应使用热节点而不是标准数据节点。
+ `merge.policy.max_merge_at_once_explicit` 指定迁移期间要同时合并的段数。

温存储中的索引是只读的，除非您将[它们返回到热存储](#ultrawarm-migrating-back)，这 UltraWarm 最适合存储不可变的数据，例如日志。您可以查询索引并将其删除，但无法添加、更新或删除单个文档。如果尝试，您可能会遇到以下错误：。

```
{
  "error" : {
    "root_cause" : [
      {
        "type" : "cluster_block_exception",
        "reason" : "index [indexname] blocked by: [TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block];"
      }
    ],
    "type" : "cluster_block_exception",
    "reason" : "index [indexname] blocked by: [TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block];"
  },
  "status" : 429
}
```

## 自动执行迁移
<a name="ultrawarm-ism"></a>

我们建议在索引达到特定期限或满足其他条件后使用 [Amazon OpenSearch 服务中的索引状态管理](ism.md) 自动执行迁移过程。请参阅演示该工作流程的[示例策略](ism.md#ism-example-cold)。

## 迁移调整
<a name="ultrawarm-settings"></a>

索引迁移到 UltraWarm 存储需要强制合并。每个 OpenSearch 索引由一定数量的分片组成，每个分片由一定数量的 Lucene 片段组成。强制合并操作清除标记为删除的文档，并节省磁盘空间。默认情况下，会将索引 UltraWarm 合并到一个段中，kNN 索引除外，其中使用默认值 20。

您可以将此值更改为达 1,000 个分段，使用 `index.ultrawarm.migration.force_merge.max_num_segments` 设置。更高的值会加快迁移过程，但在迁移完成后会增加温索引的查询延迟。要更改设置，请执行下列请求：

```
PUT my-index/_settings
{
  "index": {
    "ultrawarm": {
      "migration": {
        "force_merge": {
          "max_num_segments": 1
        }
      }
    }
  }
}
```

要检查迁移过程的此阶段花费的时间，请监视 `HotToWarmMigrationForceMergeLatency` [指标](managedomains-cloudwatchmetrics.md#managedomains-cloudwatchmetrics-uw)。

## 取消迁移
<a name="ultrawarm-cancel"></a>

UltraWarm 按顺序处理队列中的迁移。如果迁移在队列中，但尚未开始，您可以使用以下请求将迁移从队列中删除：

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

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

## 列出热索引和暖索引
<a name="ultrawarm-api"></a>

UltraWarm 添加了另外两个选项，类似于`_all`，以帮助管理热索引和温索引。有关所有暖索引或热索引的列表，请提出以下请求：

```
GET _warm
GET _hot
```

您可以在指定索引的其他请求中使用这些选项，例如：

```
_cat/indices/_warm
_cluster/state/_all/_hot
```

## 将温索引返回到热存储
<a name="ultrawarm-migrating-back"></a>

如果您需要再次写入索引，请将其迁移回热存储：

```
POST _ultrawarm/migration/my-index/_hot
```

一次最多可以有 10 个从温存储到热存储的排队迁移。 OpenSearch 服务按排队顺序逐一处理迁移请求。要查看当前数量，请监控`WarmToHotMigrationQueueSize`[指标](managedomains-cloudwatchmetrics.md#managedomains-cloudwatchmetrics-uw)。

迁移完成后，检查索引设置以确保它们满足需求。索引使用一个副本返回热存储。

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

除了用于自动快照的标准存储库外，还 UltraWarm 添加了第二个用于温索引的存储库`cs-ultrawarm`。此存储库中的每个快照只包含一个索引。如果删除温索引，其快照将保留在 `cs-ultrawarm` 存储库中 14 天，就像任何其他自动执行的快照一样。

从 `cs-ultrawarm` 还原快照时，快照会恢复到温存储，而不是热存储。`cs-automated-enc` 和 `cs-automated` 存储库中的快照还原到热存储。

**将 UltraWarm 快照恢复到温存储空间**

1. 标识包含要还原的索引的最新快照：

   ```
   GET _snapshot/cs-ultrawarm/_all?verbose=false
   
   {
     "snapshots": [{
       "snapshot": "snapshot-name",
       "version": "1.0",
       "indices": [
         "my-index"
       ]
     }]
   }
   ```
**注意**  
默认情况下，`GET _snapshot/<repo>` 操作显示存储库中每个快照的开始时间、结束时间和持续时间等详细数据信息。`GET _snapshot/<repo>` 操作从存储库包含的每个快照文件中检索信息。如果不需要开始时间、结束时间和持续时间，只需要快照名称和索引信息，我们建议您在列出快照时使用 `verbose=false` 参数，以最大限度地缩短处理时间并防止超时。

1. 如果索引已经存在，请将其删除：

   ```
   DELETE my-index
   ```

   如果不想删除索引，请[将其返回到热存储](#ultrawarm-migrating-back)和[重新编制索引](https://docs.opensearch.org/latest/opensearch/reindex-data/)它。

1. 还原快照：

   ```
   POST _snapshot/cs-ultrawarm/snapshot-name/_restore
   ```

   UltraWarm 会忽略您在此还原请求中指定的任何索引设置，但您可以指定`rename_pattern`和`rename_replacement`之类的选项。有关 OpenSearch 快照还原选项的摘要，请参阅[OpenSearch 文档](https://docs.opensearch.org/latest/opensearch/snapshot-restore/#restore-snapshots)。

## 暖索引的手动快照
<a name="ultrawarm-manual-snapshot"></a>

您*可以*手动拍摄暖索引的快照，但我们不建议这样做。自动执行 `cs-ultrawarm` 存储库已包含在迁移期间拍摄的每个热索引的快照，无需额外付费。

默认情况下，S OpenSearch ervice 不在手动快照中包含热索引。例如，以下调用只包含热索引：

```
PUT _snapshot/my-repository/my-snapshot
```

如果您选择手动拍摄暖索引的快照，则需要考虑几个重要的因素。
+ 您不能将热索引和暖索引混合使用。例如，下面的命令将失败：

  ```
  PUT _snapshot/my-repository/my-snapshot
  {
    "indices": "warm-index-1,hot-index-1",
    "include_global_state": false
  }
  ```

  如果将热索引和暖索引混合，则通配符（`*`）语句也会失败。
+ 每个快照只能包含一个温索引。例如，下面的命令将失败：

  ```
  PUT _snapshot/my-repository/my-snapshot
  {
    "indices": "warm-index-1,warm-index-2,other-warm-indices-*",
    "include_global_state": false
  }
  ```

  此请求成功：

  ```
  PUT _snapshot/my-repository/my-snapshot
  {
    "indices": "warm-index-1",
    "include_global_state": false
  }
  ```
+ 手动快照始终恢复到热存储，即使它们最初包含热索引也是如此。

## 将温索引迁移到冷存储
<a name="ultrawarm-cold"></a>

如果您不经常查询数据 UltraWarm ，请考虑将其迁移到冷存储。冷存储适用于您偶尔访问的数据或不再处于活动状态的数据。您无法读取或写入冷索引，但可以在需要查询时免费将它们迁移回暖存储。有关说明，请参阅[将索引迁移至冷存储](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/cold-storage.html#coldstorage-migrating)。

## KNN 索引的最佳实践
<a name="ultrawarm-recommendations"></a>
+ Ultrawarm/冷存储层级适用于所有 KNN 索引引擎类型。我们建议在使用 Lucene 引擎和磁盘优化向量搜索的 KNN 索引中采用此方案，这无需将图形数据完全加载到堆外内存中。在将其与 FAISS 和 NMSLIB 等原生内存引擎一起使用时，必须考虑要主动搜索的分片图形大小，并相应地配置 UltraWarm实例，最好是实例类型的实例。`uw.large`例如，如果客户已配置 2 个 `uw.large` 实例，则每个实例将有约 `knn.memory.circuit_breaker.limit * 61` GiB 的可用堆外内存。如果所有热查询都针对累积图形大小不超过可用堆外内存的分片，则可获得最佳性能。如果由于驱逐和等待堆外内存释放而导致可用内存低于加载图所需的内存，则会影响延迟。因此，我们不建议在使用内存引擎的使用案例或需要更高搜索吞吐量的场景中使用 `uw.medium` 实例，无论采用何种引擎。
+ 迁移到的 KNN 索引 UltraWarm 不会被强制合并到单个片段。这可避免因图规模过大导致内存引擎无法处理，从而引发热节点和温节点遭遇 OOM 问题的情况。由于每个分片的分段数量增加，这可能会导致消耗更多本地缓存空间，并使迁移到温层的索引数量减少。您可以选择使用现有设置强制将索引合并到单个分段，并在将索引迁移到温层之前覆盖该设置。有关更多信息，请参阅 [迁移调整](#ultrawarm-settings)。
+ 如果您的用例很少搜索索引，并且不处理延迟敏感的工作负载，则可以选择将这些索引迁移到该 UltraWarm 层。这将帮助您缩小热层计算实例的规模，让 UltraWarm 分层计算处理对此类低优先级索引的查询。这还有助于实现低优先级索引与高优先级索引查询之间资源消耗的隔离，从而避免相互影响。

## 正在禁用 UltraWarm
<a name="ultrawarm-disable"></a>

控制台是最简单的禁用方法 UltraWarm。选择域、**Actions（操作）**和 **Edit cluster configuration（编辑集群配置）**。选择**启用温数据节点**，然后选择**保存更改**。还可以在 AWS CLI 和配置 API 中使用 `WarmEnabled` 选项。

在禁用之前 UltraWarm，必须[删除](https://opensearch.org/docs/latest/opensearch/rest-api/index-apis/delete-index/)所有热索引或[将其迁移回热存储](#ultrawarm-migrating-back)。热存储空间为空后，请等待五分钟，然后再尝试禁用 UltraWarm。

# 适用于 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\$1manager**。

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\$1field | 索引映射中的 date/time 字段。 |  所提供字段的最小值和最大值将计算并存储为冷索引的 `start_time` 和 `end_time` 元数据。  | 
| start\$1time 和 end\$1time |  使用以下格式之一： [\[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"`。

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

# Amazon OpenSearch 服务中的索引状态管理
<a name="ism"></a>

Amazon S OpenSearch ervice 中的索引状态管理 (ISM) 允许您定义自动执行日常任务的自定义管理策略，并将其应用于索引和索引模式。您不再需要设置和管理外部进程来运行索引操作。

策略包含一个默认状态和一个状态列表，以供索引在这些状态之间转换。在每个状态中，您可以定义要执行的一系列操作和触发这些转换的条件。典型的使用案例是在一段时间后定期删除旧索引。例如，您可以定义一个策略以在 30 天后将索引移入 `read_only` 状态，然后在 90 天后最终将其删除。

将策略附加到索引后，ISM 会创建一个每 5 到 8 分钟（对于早于 1.3 版本的集群，则为 30 到 48 分钟）运行一次的作业，以执行策略操作、检查条件并将索引转换为不同的状态。该作业运行的基本时间是每 5 分钟一次，外加 0-60％ 的随机抖动，以确保您不会同时看到所有索引的活动激增。如果集群状态为红色，则 ISM 不会运行作业。

ISM 需要 OpenSearch 或 Elasticsearch 6.8 或更高版本。

**注意**  
本文档简要概述了 ISM 和几个策略示例。它还解释了 ISM for Amazon S OpenSearch ervice 域与 ISM 在自我管理 OpenSearch集群上的区别。有关 ISM 的完整文档，包括全面的参数参考、每项设置的描述以及 API 参考，请参阅 OpenSearch 文档中的[索引状态管理](https://docs.opensearch.org/latest/im-plugin/ism/index/)。

**重要**  
您不能再使用索引模板将 ISM 策略应用于新创建的索引。您可以继续使用 [ISM 模板字段](https://opensearch.org/docs/latest/im-plugin/ism/policies/#sample-policy-with-ism-template-for-auto-rollover)自动管理新创建的索引。此更新引入了一项重大更改，该更改会影响使用此设置的现有 CloudFormation 模板。

## 创建一个 ISM 策略
<a name="ism-start"></a>

**开始使用索引状态管理**

1. 在[https://console.aws.amazon.com/aos/家](https://console.aws.amazon.com/aos/home)中打开亚马逊 OpenSearch 服务控制台。

1. 选择要为其创建 ISM 策略的域。

1. 在域名的控制面板中，导航到控制 OpenSearch 面板网址，然后使用您的主用户名和密码登录。URL 遵循以下格式：

   ```
   domain-endpoint/_dashboards/
   ```

1. 在控制面板中打开左侧导航面 OpenSearch 板，选择**索引管理**，然后选择**创建策略**。

1. 使用[可视化编辑器](https://opensearch.org/docs/latest/im-plugin/ism/index/#visual-editor)或 [JSON 编辑器](https://opensearch.org/docs/latest/im-plugin/ism/index/#json-editor)创建策略。我们建议使用可视化编辑器，因为它提供了一种更结构化的策略定义方式。有关创建策略的帮助，请参阅下面的[示例策略](#ism-example)。

1. 创建策略后，请将它附加到一个或多个索引：

   ```
   POST _plugins/_ism/add/my-index
   {
     "policy_id": "my-policy-id"
   }
   ```
**注意**  
如果您的域名运行的是旧版 Elasticsearch 版本，请使用 `_opendistro` 而非 `_plugins`。

   或者，在 “ OpenSearch 控制面板” 中选择索引，然后选择 “**应用策略**”。

## 示例策略
<a name="ism-example"></a>

以下示例策略演示了如何自动执行常见 ISM 使用案例。

### 从热存储到冷存储
<a name="ism-example-cold"></a>

此示例策略将索引从热存储移动到热存储 [UltraWarm](ultrawarm.md)，并最终移动到 [冷库](cold-storage.md)。然后，删除索引。

索引最初处于 `hot` 状态。10 天后，ISM 将其移动到 `warm` 状态。80 天后，即索引已存在 90 天后，ISM 将索引移动到 `cold` 状态。一年后，该服务向 Amazon Chime 房间发送通知以告知该索引正在被删除，然后永久删除该索引。

请注意，冷索引需要 `cold_delete` 操作而不是正常的 `delete` 操作。另请注意，数据中需要显式 `timestamp_field`，以便使用 ISM 管理冷索引。

```
{
  "policy": {
    "description": "Demonstrate a hot-warm-cold-delete workflow.",
    "default_state": "hot",
    "schema_version": 1,
    "states": [{
        "name": "hot",
        "actions": [],
        "transitions": [{
          "state_name": "warm",
          "conditions": {
            "min_index_age": "10d"
          }
        }]
      },
      {
        "name": "warm",
        "actions": [{
          "warm_migration": {},
          "retry": {
            "count": 5,
            "delay": "1h"
          }
        }],
        "transitions": [{
          "state_name": "cold",
          "conditions": {
            "min_index_age": "90d"
          }
        }]
      },
      {
        "name": "cold",
        "actions": [{
            "cold_migration": {
              "timestamp_field": "<your timestamp field>"
            }
          }
        ],
        "transitions": [{
          "state_name": "delete",
          "conditions": {
             "min_index_age": "365d"
          }
        }]
      },
      {
        "name": "delete",
        "actions": [{
          "notification": {
            "destination": {
              "chime": {
                "url": "<URL>"
              }
            },
            "message_template": {
              "source": "The index {{ctx.index}} is being deleted."
            }
          }
        },
        {
          "cold_delete": {}
        }]
      }
    ]
  }
}
```

### 减少副本数
<a name="ism-example-replica"></a>

此示例策略在七天后将副本计数减少到零以节省磁盘空间，然后在 21 天后删除索引。此策略假定索引是非关键索引，并不再接收写入请求。副本数量为零会带来一定的数据丢失风险。

```
{
  "policy": {
    "description": "Changes replica count and deletes.",
    "schema_version": 1,
    "default_state": "current",
    "states": [{
        "name": "current",
        "actions": [],
        "transitions": [{
          "state_name": "old",
          "conditions": {
            "min_index_age": "7d"
          }
        }]
      },
      {
        "name": "old",
        "actions": [{
          "replica_count": {
            "number_of_replicas": 0
          }
        }],
        "transitions": [{
          "state_name": "delete",
          "conditions": {
            "min_index_age": "21d"
          }
        }]
      },
      {
        "name": "delete",
        "actions": [{
          "delete": {}
        }],
        "transitions": []
      }
    ]
  }
}
```

### 拍摄索引快照
<a name="ism-example-snapshot"></a>

此示例策略使用 `[snapshot](https://docs.opensearch.org/latest/im-plugin/ism/policies/#snapshot)` 操作，以便在索引包含至少一个文档时立即拍摄该索引的快照。`repository` 是您在 Amazon S3 中注册的手动快照存储库的名称。`snapshot` 是快照的名称。有关注册存储库的快照先决条件和步骤，请参阅 [在 Amazon OpenSearch 服务中创建索引快照](managedomains-snapshots.md)。

```
{
  "policy": {
    "description": "Takes an index snapshot.",
    "schema_version": 1,
    "default_state": "empty",
    "states": [{
        "name": "empty",
        "actions": [],
        "transitions": [{
          "state_name": "occupied",
          "conditions": {
            "min_doc_count": 1
          }
        }]
      },
      {
        "name": "occupied",
        "actions": [{
          "snapshot": {
            "repository": "<my-repository>",
            "snapshot": "<my-snapshot>"
            }
          }],
          "transitions": []
      }
    ]
  }
}
```

## ISM 模板
<a name="ism-template"></a>

您可以在策略中设置 `ism_template` 字段，因此当您创建与模板模式匹配的索引时，策略会自动附加到该索引。在此示例中，以 "log" 开头的名称创建的任何索引都会自动匹配 ISM 策略 `my-policy-id`：

```
PUT _plugins/_ism/policies/my-policy-id
{
  "policy": {
    "description": "Example policy.",
    "default_state": "...",
    "states": [...],
    "ism_template": {
      "index_patterns": ["log*"],
      "priority": 100
    }
  }
}
```

有关更详细的示例，请参阅[使用 ISM 模板进行自动回滚的策略示例](https://opensearch.org/docs/latest/im-plugin/ism/policies/#sample-policy-with-ism-template-for-auto-rollover)。

## 差异
<a name="ism-diff"></a>

与 OpenSearch Elasticsearch 相比，适用于亚马逊 OpenSearch 服务的 ISM 有几个区别。

### ISM 操作
<a name="alerting-diff-op"></a>
+ OpenSearch 服务支持三种独特的 ISM 操作：`warm_migration``cold_migration`、和`cold_delete`：
  + 如果您的域已[UltraWarm](ultrawarm.md)启用，则该`warm_migration`操作会将索引转换为热存储。
  + 如果您的域启用了[冷存储](cold-storage.md)，则 `cold_migration` 操作会将索引转换为冷存储，而 `cold_delete` 操作将从冷存储中删除此索引。

  即使这些操作中的其中一项操作未在[设置的超时期限](https://docs.opensearch.org/latest/im-plugin/ism/policies/#actions)内完成，索引的迁移或删除仍会继续。设置上述的任何一个操作设置 [error\$1notification](https://opensearch.org/docs/latest/im-plugin/ism/policies/#error-notifications) 后，如果该操作未在超时期限内完成，则系统会通知您该操作失败，但此通知仅供您参考。实际操作没有固有的超时时间，并将继续运行直到最终成功或失败。
+ 如果您的域名运行 OpenSearch 或 Elasticsearch 7.4 或更高版本，则 OpenSearch 服务支持 ISM `open` 和操作。`close`
+ 如果您的域名运行 OpenSearch 或 Elasticsearch 7.7 或更高版本，则 OpenSearch 服务支持 ISM 操作。`snapshot`

### 冷存储 ISM 操作
<a name="ism-cold-storage"></a>

对于冷索引，在使用以下 ISM 时必须指定`?type=_cold`参数 APIs：
+ [添加策略](https://opensearch.org/docs/latest/im-plugin/ism/api/#add-policy)
+ [移除策略](https://opensearch.org/docs/latest/im-plugin/ism/api/#remove-policy-from-index)
+ [更新策略](https://opensearch.org/docs/latest/im-plugin/ism/api/#update-policy)
+ [重试失败的索引](https://opensearch.org/docs/latest/im-plugin/ism/api/#retry-failed-index)
+ [解释索引](https://opensearch.org/docs/latest/im-plugin/ism/api/#explain-index)

这些 APIs 冷索引还有以下其他区别：
+ 除非您在末尾使用，否则不支持通配符运算符。例如，支持 `_plugins/_ism/<add, remove, change_policy, retry, explain>/logstash-*`\$1，但不支持 `_plugins/_ism/<add, remove, change_policy, retry, explain>/iad-*-prod`。
+ 不支持多个索引名称和模式。例如，支持 `_plugins/_ism/<add, remove, change_policy, retry, explain>/app-logs`\$1，但不支持 `_plugins/_ism/<add, remove, change_policy, retry, explain>/app-logs,sample-data`。

### ISM 设置
<a name="ism-diff-settings"></a>

OpenSearch 而且 Elasticsearch 允许您使用 API 更改所有可用的 `_cluster/settings` ISM 设置。在 Amazon OpenSearch 服务上，您只能更改以下 [ISM 设置](https://opensearch.org/docs/latest/im-plugin/ism/settings/)：
+ **集群级别设置：**
  + `plugins.index_state_management.enabled`
  + `plugins.index_state_management.history.enabled`
+ **索引级别设置：**
  + `plugins.index_state_management.rollover_alias`

   

# 教程：实现索引状态管理过程的自动化
<a name="ism-tutorial"></a>

本教程演示如何实施自动执行日常索引管理任务的 ISM 策略，并将其应用于索引和索引模式。

Amazon S OpenSearch ervice 中的@@ [索引状态管理 (ISM)](ism.md) 允许您自动执行重复的索引管理活动，因此您可以避免使用其他工具来管理索引生命周期。您可以创建一个策略，根据索引年限、大小和其他条件自动执行这些操作，所有这些操作都可以在您的 Amazon S OpenSearch ervice 域中完成。

OpenSearch 服务支持三个存储层：用于主动写入和低延迟分析的默认 “热” 状态， UltraWarm 用于高达 3 PB 的只读数据，以及用于无限长期存档的冷存储。

本教程提供在每日索引中处理时间序列数据的使用案例示例。在本教程中，您将设置一个策略，该策略在 24 小时后自动拍摄每个附加索引的快照。然后，它会在两天后将索引从默认的热状态迁移到 UltraWarm 存储，30 天后将索引从冷存储迁移到冷存储，最后在 60 天后删除索引。

## 先决条件
<a name="ism-tutorialprerequisites"></a>
+ 您的 OpenSearch 服务域必须运行 Elasticsearch 版本 6.8 或更高版本。
+ 您的域名必须已[UltraWarm](ultrawarm.md)启用[冷存储](cold-storage.md)。
+ 您必须为域[注册一个手动快照存储库](managedomains-snapshot-registerdirectory.md)。
+ 您的用户角色需要足够的权限才能访问 OpenSearch 服务控制台。如有必要，验证并[配置域的访问权限](ac.md)。

## 步骤 1：配置 ISM 策略
<a name="ism-tutorial-policy"></a>

首先，在 “ OpenSearch 控制面板” 中配置 ISM 策略。

1. 在 OpenSearch 服务控制台的域名控制面板中，导航到控制 OpenSearch 面板网址，然后使用您的主用户名和密码登录。URL 遵循此格式：`domain-endpoint/_dashboards/`。

1. 在 OpenSearch 仪表板中，选择**添加示例数据**，然后将一个或多个示例索引添加到您的域中。

1. 打开左侧导航面板，然后依次选择 **Index Management**（索引管理）、**Create policy**（创建策略）。

1. 将该策略命名为 `ism-policy-example`。

1. 将默认策略替换为以下策略：

   ```
   {
     "policy": {
       "description": "Move indexes between storage tiers",
       "default_state": "hot",
       "states": [
         {
           "name": "hot",
           "actions": [],
           "transitions": [
             {
               "state_name": "snapshot",
               "conditions": {
                 "min_index_age": "24h"
               }
             }
           ]
         },
         {
           "name": "snapshot",
           "actions": [
             {
               "retry": {
                 "count": 5,
                 "backoff": "exponential",
                 "delay": "30m"
               },
               "snapshot": {
                 "repository": "snapshot-repo",
                 "snapshot": "ism-snapshot"
               }
             }
           ],
           "transitions": [
             {
               "state_name": "warm",
               "conditions": {
                 "min_index_age": "2d"
               }
             }
           ]
         },
         {
           "name": "warm",
           "actions": [
             {
               "retry": {
                 "count": 5,
                 "backoff": "exponential",
                 "delay": "1h"
               },
               "warm_migration": {}
             }
           ],
           "transitions": [
             {
               "state_name": "cold",
               "conditions": {
                 "min_index_age": "30d"
               }
             }
           ]
         },
         {
           "name": "cold",
           "actions": [
             {
               "retry": {
                 "count": 5,
                 "backoff": "exponential",
                 "delay": "1h"
               },
               "cold_migration": {
                 "start_time": null,
                 "end_time": null,
                 "timestamp_field": "@timestamp",
                 "ignore": "none"
               }
             }
           ],
           "transitions": [
             {
               "state_name": "delete",
               "conditions": {
                 "min_index_age": "60d"
               }
             }
           ]
         },
         {
           "name": "delete",
           "actions": [
             {
               "cold_delete": {}
             }
           ],
           "transitions": []
         }
       ],
       "ism_template": [
         {
           "index_patterns": [
             "index-*"
           ],
           "priority": 100
         }
       ]
     }
   }
   ```
**注意**  
`ism_template` 字段会自动将策略附加到与指定 `index_patterns` 之一匹配的任何新创建的索引。在这种情况下，为所有以 `index-` 开头的索引。您可以修改此字段以匹配您的环境中的索引格式。有关更多信息，请参阅 [ISM 模板](ism.md#ism-template)。

1. 在策略的 `snapshot` 部分，将 `snapshot-repo` 替换为您为域注册的[快照存储库](managedomains-snapshot-registerdirectory.md)的名称。您还可以选择替换 `ism-snapshot`，该名称是创建快照时的名称。

1. 选择**创建**。现在，**State management policies**（状态管理策略）页面上会显示该策略。

## 步骤 2：将该策略附加到一个或多个索引
<a name="ism-tutorial-attach"></a>

现在，您已创建策略，请将其附加到集群中的一个或多个索引。

1. 转至 **Hot indicies**（热索引）选项卡并搜索 `opensearch_dashboards_sample`，其中列出了您在步骤 1 中添加的所有示例索引。

1. 选择所有索引并选择 A **pply p** olicy，然后选择您刚刚创建的**ism-policy-example**策略。

1. 选择**应用**。

在索引切换不同的状态时，您可以在 **Policy managed indices**（策略管理索引）页面上监控索引。

# 使用索引汇总汇总 Amazon OpenSearch 服务中的索引
<a name="rollup"></a>

借助 Amazon S OpenSearch ervice 中的索引汇总，您可以定期将旧数据汇总到汇总索引中，从而降低存储成本。

您可以选择您感兴趣的字段，并使用索引汇总创建新的索引，只有这些字段聚合到较粗糙的时间存储桶中。您可以以相同的查询性能，以相当于成本的一小部分存储数月或数年的历史数据。

索引汇总需要 OpenSearch 或 Elasticsearch 7.9 或更高版本。

**注意**  
本文档可帮助您开始在 Amazon S OpenSearch ervice 中创建索引汇总任务。有关全面的文档，包括所有可用设置的列表和完整的 API 参考，请参阅 OpenSearch 文档中的[索引汇总](https://docs.opensearch.org/latest/im-plugin/index-rollups/)。

## 创建索引汇总作业
<a name="rollup-example"></a>

要开始使用，请选择 “ OpenSearch仪表板中的**索引管理**”。选择**汇总作业**并选择**创建汇总作业**。

### 步骤 1：设置索引
<a name="rollup-example-1"></a>

设置源索引和目标索引。源索引是要汇总的索引。目标索引是保存索引汇总结果的位置。

创建索引汇总作业后，您无法更改索引选择。

### 步骤 2：定义聚合和指标
<a name="rollup-example-2"></a>

选择要汇总的聚合（术语和直方图）和指标（平均值、总计、最大值、最小值和值计数）的属性。确保不要添加大量高精细的属性，因为不会节省太多空间。

### 步骤 3：指定计划
<a name="rollup-example-3"></a>

指定计划，以便在摄入索引时汇总索引。默认情况下，将启用索引汇总作业。

### 步骤 4：审核并创建
<a name="rollup-example-4"></a>

检查您的配置，然后选择**创建**。

### 步骤 5：搜索目标索引
<a name="rollup-example-5"></a>

您可以使用标准的 `_search` API 来搜索目标索引。您无法访问目标索引中数据的内部结构，因为插件会在后台自动重写查询以适应目标索引。这是为了确保您可以对源索引和目标索引使用相同的查询。

要查询目标索引，请将 `size` 设置为 0：

```
GET target_index/_search
{
  "size": 0,
  "query": {
    "match_all": {}
  },
  "aggs": {
    "avg_cpu": {
      "avg": {
        "field": "cpu_usage"
      }
    }
  }
}
```

**注意**  
OpenSearch 2.2 及更高版本支持在一个请求中搜索多个汇总索引。 OpenSearch 2.2 之前的版本和旧版 Elasticsearch OSS 版本每次搜索仅支持一个汇总索引。

# 在 Amazon OpenSearch 服务中转换索引
<a name="transforms"></a>

[索引汇总作业](rollup.md)可让您通过将旧数据汇总到精简索引中来减少数据粒度，转换作业则可让您创建以特定字段为中心的数据的不同汇总视图，从而让您可以通过不同的方式对数据进行可视化或分析。

索引转换具有 OpenSearch 仪表板用户界面和 REST API。该功能需要 OpenSearch 1.0 或更高版本。

**注意**  
本文档简要概述了索引转换，以帮助您开始在 Amazon S OpenSearch ervice 域上使用索引转换。如需全面的文档和 REST API 参考，请参阅开源 OpenSearch 文档中的[索引转换](https://docs.opensearch.org/latest/im-plugin/index-transforms/)。

## 创建索引转换任务
<a name="transforms-example"></a>

如果您的集群中没有任何数据，请使用 OpenSearch 仪表板中的示例飞行数据来尝试转换作业。添加数据后，启动 OpenSearch 仪表板。然后选择**索引管理**、**转换任务**和**创建转换任务**。

### 步骤 1：选择索引
<a name="transforms-example-1"></a>

在**索引**部分中，选择源索引和目标索引。您可以选择现有目标索引，也可以通过输入该索引的名称来创建新索引。

如果您只想转换源索引的子集，请选择 “**添加数据过滤器**”，然后使用 OpenSearch [查询 DSL](https://docs.opensearch.org/latest/opensearch/query-dsl/) 来指定源索引的子集。

### 步骤 2：选择字段
<a name="transforms-example-2"></a>

选择索引后，选择要在转换作业中使用的字段，以及是使用分组还是聚合。
+ 您可以使用分组将数据放置在转换后的索引中的单独存储桶中。例如，如果要对示例航班数据中的所有机场目的地进行分组，请将该`DestAirportID`字段分组为`DestAirportID_terms`字段的目标字段，然后可以在变换作业完成后 IDs 在转换后的索引中找到分组的机场。
+ 另一方面，聚合让您可用执行简单的计算。例如，您可以在转换任务中包含一个聚合，以定义 `sum_of_total_ticket_price` 计算所有飞机票的总和。然后，您可以分析转换后索引中的新数据。

### 步骤 3：指定计划
<a name="transforms-example-3"></a>

 预设情况下，转换任务处于启用状态，并按计划运行。对于 **transform execution interval**（转换执行间隔），请指定间隔（以分钟、小时或天为单位）。

### 步骤 4：审核并监控
<a name="transforms-example-4"></a>

检查您的配置，然后选择**创建**。然后监控**转换任务状态**列。

### 步骤 5：搜索目标索引
<a name="transforms-example-5"></a>

任务完成后，您可以使用标准的 `_search`API 来搜索目标索引。

例如，运行基于字段 `DestAirportID` 转换飞行数据的转换任务后，可以运行以下请求以返回值为 `SFO` 的所有字段：

```
GET target_index/_search
{
  "query": {
    "match": {
      "DestAirportID_terms" : "SFO"
    }
  }
}
```

# Amazon OpenSearch 服务的跨集群复制
<a name="replication"></a>

通过 Amazon S OpenSearch ervice 中的跨集群复制，您可以将用户索引、映射和元数据从一个 OpenSearch 服务域复制到另一个服务域。使用跨集群复制有助于确保在发生中断时进行灾难恢复，并允许您跨地理位置较远的数据中心复制数据以减少延迟。您需要为域间[传输 AWS 的数据支付标准数据传输费用](https://aws.amazon.com/opensearch-service/pricing/)。

跨集群复制遵循主动-被动复制模型，其中*本地*索引或*关注者*索引（复制数据的位置）从*远程*索引或*领导者*索引中提取数据。领导者索引是指数据源，或者要从中复制数据的索引。关注者索引是指数据目标，或者要将数据复制到 的索引。

跨集群复制适用于运行 Elasticsearch 7.10 或 1.1 或 OpenSearch 更高版本的域名。

**注意**  
本文档介绍如何从 Amazon OpenSearch 服务的角度设置跨集群复制。这包括使用 AWS 管理控制台 来设置跨集群连接，这在自我管理 OpenSearch 的集群上是不可能的。有关完整文档，包括设置参考和全面的 API 参考，请参阅 OpenSearch 文档中的[跨集群复制](https://docs.opensearch.org/latest/tuning-your-cluster/replication-plugin/index/)。

**Topics**
+ [限制](#replication-limitations)
+ [先决条件](#replication-prereqs)
+ [权限要求](#replication-permissions)
+ [设置跨集群连接](#replication-connect)
+ [开始复制](#replication-start)
+ [确认复制](#replication-confirm)
+ [暂停和恢复复制](#replication-pause-resume)
+ [停止复制](#replication-stop)
+ [自动关注](#replication-autofollow)
+ [升级已连接的域](#replication-upgrade)

## 限制
<a name="replication-limitations"></a>

跨集群复制具有以下限制：
+ 您无法在亚马逊 OpenSearch 服务域和自管集群 OpenSearch 或 Elasticsearch 集群之间复制数据。
+ 您无法将索引从一个关注者域复制到另一个关注者域。如果要将索引复制到多个关注者域，则只能从单个领导者域中进行复制。
+ 一个域可以通过入站和出站连接的组合连接到最多 20 个其他域。
+ 最初设置跨集群连接时，领导者域的版本必须与关注者域相同或更高。
+ 您不能使用 CloudFormation 来连接域名。
+ 不能在 M3 和可突增（T2 和 T3）实例上使用跨集群复制。
+ 您不能在 UltraWarm 或冷索引之间复制数据。这两个索引都必须位于热存储中。
+ 删除领导者域的索引时，不会自动删除关注者域中对应的索引。
+ 在默认和可[选](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)模式之间不支持跨集群复制。两个域名都必须位于默认区域或可选区域。

## 先决条件
<a name="replication-prereqs"></a>

在设置跨集群复制之前，请确保域满足以下要求：
+ Elasticsearch 7.10 或 1.1 或 OpenSearch 更高版本
+ 已启用[精细访问控制](fgac.md)
+ Node-to-node 已启用@@ [加密](ntn.md)
+ 领导者指数必须`index.soft_deletes.enabled`设置为`true`。默认情况下，在 Elasticsearch 7.0 或 OpenSearch 1.0 及更高版本中创建的索引会启用此设置。但是，在 Elasticsearch 6.x 中创建并升级后的索引会保留。`soft_deletes=false`要复制此类索引，必须先对其重新编制索引。

  要检查索引是否启用了软删除，请执行以下操作：

  ```
  GET <index-name>/_settings?include_defaults=true&flat_settings=true&filter_path=*.settings.index.soft_deletes.enabled
  ```

  如果`soft_deletes`是`false`，则在开始复制之前将数据重新索引到新索引。

## 权限要求
<a name="replication-permissions"></a>

为了开始复制，必须包括对远程（领导者）域的 `es:ESCrossClusterGet` 权限。我们建议对远程域采取以下 IAM policy。此策略还允许您执行其他操作，例如编制文档索引和执行标准搜索：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "*"
        ]
      },
      "Action": [
        "es:ESHttp*"
      ],
      "Resource": "arn:aws:es:us-east-1:111122223333:domain/leader-domain/*"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:ESCrossClusterGet",
      "Resource": "arn:aws:es:us-east-1:111122223333:domain/leader-domain"
    }
  ]
}
```

------

请确保对 `/leader-domain`，而不是 `/leader-domain/*` 应用了 `es:ESCrossClusterGet` 权限。

为了让非管理员用户执行复制活动，还需要将他们映射到适当的权限。大多数权限对应于特定的 [REST API 操作](https://docs.opensearch.org/latest/tuning-your-cluster/replication-plugin/api/)。例如，`indices:admin/plugins/replication/index/_resume` 权限可让您恢复索引的复制。有关权限的完整列表，请参阅 OpenSearch 文档中的[复制权限](https://docs.opensearch.org/latest/tuning-your-cluster/replication-plugin/permissions/#replication-permissions)。

**注意**  
开始复制和创建复制规则的命令是特殊情况。由于它们在领导域和关注者域上调用后台进程，因此您必须在请求`follower_cluster_role`中传递`leader_cluster_role`和。 OpenSearch 服务在所有后端复制任务中都使用这些角色。有关映射和使用这些角色的信息，请参阅 OpenSearch文档中的[映射领导者和关注者集群角色](https://docs.opensearch.org/latest/tuning-your-cluster/replication-plugin/permissions/#map-the-leader-and-follower-cluster-roles)。

## 设置跨集群连接
<a name="replication-connect"></a>

要将索引从一个域复制到另一个域，您需要在域之间建立跨集群连接。连接域最简单的方法是通过域控制面板的 **Connections（连接）**选项卡。还可使用[配置 API](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/Welcome.html) 或 [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/opensearch/create-outbound-connection.html)。由于跨集群复制遵循“拉取”模型，因此您可从关注者域启动连接。

**注意**  
如果您之前连接两个域来执行[跨集群搜索](cross-cluster-search.md)，则无法使用同一连接进行复制。连接在控制台中将标记为 `SEARCH_ONLY`。为了在以前连接的两个域之间执行复制，您必须先删除该连接，然后再重新创建它。完成此操作后，该连接可用于跨集群搜索和跨集群复制。

**设置连接**

1. 在 Amazon Ser OpenSearch vice 控制台中，选择关注者域，前往 “**连接**” 选项卡，然后选择 “**请求**”。

1. 对于**Connection alias（连接别名）**，输入您的连接的名称。

1. 在连接您 AWS 账户 和地区的域名之间进行选择，也可以选择连接到其他账户或地区的域名。
   + 要连接到您 AWS 账户 和地区的域名，请选择该域并选择**请求**。
   + **要连接到其他域 AWS 账户 或区域中的域，请指定远程域的 ARN，然后选择请求。**

OpenSearch 服务验证连接请求。如果域不兼容，则连接失败。如果验证成功，它将发送到目标域进行批准。目标域批准请求后，您可以开始复制。

跨集群复制支持双向复制。这意味着您可以创建从 A 域到 B 域的出站连接，以及从 B 域到 A 域的另一个出站连接。然后，您可以设置复制，使 A 域遵循 B 域中的索引，使 B 域遵循 A 域中的索引。

## 开始复制
<a name="replication-start"></a>

建立跨集群连接后，您可以开始复制数据。首先，在领导者域中创建要复制的索引：

```
PUT leader-01
```

要复制该索引，请将以下命令发送到关注者域：

```
PUT _plugins/_replication/follower-01/_start
{
   "leader_alias": "connection-alias",
   "leader_index": "leader-01",
   "use_roles":{
      "leader_cluster_role": "all_access",
      "follower_cluster_role": "all_access"
   }
}
```

您可以在域控制面板的**连接**选项卡上找到连接别名。

为简单起见，本例假设管理员正在发出请求并对 `leader_cluster_role` 和 `follower_cluster_role` 使用 `all_access`。但是，在生产环境中，我们建议您在领导者和关注者索引上创建复制用户，并相应地进行映射。用户名必须完全相同。有关这些角色以及如何映射它们的信息，请参阅 OpenSearch文档[中的映射领导者和关注者集群角色](https://docs.opensearch.org/latest/tuning-your-cluster/replication-plugin/permissions/#map-the-leader-and-follower-cluster-roles)。

## 确认复制
<a name="replication-confirm"></a>

要确认复制正在进行，请获取复制状态：

```
GET _plugins/_replication/follower-01/_status

{
  "status" : "SYNCING",
  "reason" : "User initiated",
  "leader_alias" : "connection-alias",
  "leader_index" : "leader-01",
  "follower_index" : "follower-01",
  "syncing_details" : {
    "leader_checkpoint" : -5,
    "follower_checkpoint" : -5,
    "seq_no" : 0
  }
}
```

领导者和关注者检查点值以负整数开始，反映您拥有的分片数量（-1 表示一个分片，-5 表示 5 个分片，依此类推）。随着每次进行更改，这些值会递增为正整数。如果值相同，则意味着索引已完全同步。您可以使用这些检查点值来度量域之间的复制延迟。

要进一步验证复制，请将文档添加到领导者索引：

```
PUT leader-01/_doc/1
{
   "Doctor Sleep":"Stephen King"
}
```

然后确认其在关注者索引上显示：

```
GET follower-01/_search

{
    ...
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "follower-01",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "Doctor Sleep" : "Stephen King"
        }
      }
    ]
  }
}
```

## 暂停和恢复复制
<a name="replication-pause-resume"></a>

如果需要修复问题或减少领导域的负载，可以暂时暂停复制。将此请求发送到关注者域。确保包含空的请求体：

```
POST _plugins/_replication/follower-01/_pause
{}
```

然后获取状态以确保复制已暂停：

```
GET _plugins/_replication/follower-01/_status

{
  "status" : "PAUSED",
  "reason" : "User initiated",
  "leader_alias" : "connection-alias",
  "leader_index" : "leader-01",
  "follower_index" : "follower-01"
}
```

完成更改后，恢复复制。将此请求发送到关注者域。确保包含空的请求体：

```
POST _plugins/_replication/follower-01/_resume
{}
```

无法在复制暂停超过 12 个小时后恢复复制。您必须停止复制，删除从索引，然后重新启动主项的复制。

## 停止复制
<a name="replication-stop"></a>

完全停止复制后，关注者索引会取消关注领导者并成为标准索引。停止复制后，您无法重新启动复制。

停止从关注者域进行复制。确保包含空的请求体：

```
POST _plugins/_replication/follower-01/_stop
{}
```

## 自动关注
<a name="replication-autofollow"></a>

您可以针对单个领导域定义一组复制规则，这些规则会自动复制匹配指定模式的索引。当领导域上的索引与其中一个模式相匹配时（例如，`books*`），则会在关注者域上创建匹配的关注者索引。 OpenSearch Service 会复制与该模式匹配的所有现有索引以及您创建的新索引。它不会复制关注者域中已存在的索引。

要复制所有索引（系统创建的索引以及关注者域中已存在的索引除外），请使用通配符（`*`）模式。

### 创建复制规则
<a name="replication-rule-create"></a>

在关注者域上创建复制规则并指定跨集群连接的名称：

```
POST _plugins/_replication/_autofollow
{
   "leader_alias" : "connection-alias",
   "name": "rule-name",
   "pattern": "books*",
   "use_roles":{
      "leader_cluster_role": "all_access",
      "follower_cluster_role": "all_access"
   }
}
```

您可以在域控制面板的**连接**选项卡上找到连接别名。

为简单起见，本例假设管理员正在发出请求并使用 `all_access` 作为领导者和关注者域角色。但是，在生产环境中，我们建议您在领导者和关注者索引上创建复制用户，并相应地进行映射。用户名必须完全相同。有关这些角色以及如何映射它们的信息，请参阅 OpenSearch文档[中的映射领导者和关注者集群角色](https://docs.opensearch.org/latest/tuning-your-cluster/replication-plugin/permissions/#map-the-leader-and-follower-cluster-roles)。

要检索域中现有复制规则的列表，请使用[自动关注统计数据 API 操作](https://docs.opensearch.org/latest/tuning-your-cluster/replication-plugin/api/#get-auto-follow-stats)。

要测试规则，请创建一个与领导者域模式匹配的索引：

```
PUT books-are-fun
```

然后检查其副本是否出现在关注者域中：

```
GET _cat/indices

health status index          uuid                     pri rep docs.count docs.deleted store.size pri.store.size
green  open   books-are-fun  ldfHO78xYYdxRMULuiTvSQ     1   1          0            0       208b           208b
```

### 删除复制规则
<a name="replication-rule-delete"></a>

当您删除复制规则时，S OpenSearch ervice 会停止复制与该模式匹配*的新*索引，但会继续现有的复制活动，直到您[停止复制](#replication-stop)这些索引。

从关注者域中删除复制规则：

```
DELETE _plugins/_replication/_autofollow
{
   "leader_alias" : "connection-alias",
   "name": "rule-name"
}
```

## 升级已连接的域
<a name="replication-upgrade"></a>

要升级具有跨集群连接的两个域的引擎版本，请先升级关注者域，然后再升级领导者域。不要删除两者之间的连接，否则复制会暂停，您将无法恢复。

# 使用远程重新索引迁移亚马逊 OpenSearch 服务索引
<a name="remote-reindex"></a>

远程重新索引允许您将索引从一个 Amazon Service 域复制到另一个 Amazon OpenSearch 服务域。您可以从任何 OpenSearch 服务域或自管理集群 OpenSearch 和 Elasticsearch 集群迁移索引。

*远程*域和索引是指数据源，或者是指要从中复制数据的域和索引。*本地*域和索引是指数据目标，或者是指要将数据复制到的域和索引。

远程重新索引需要在本地域上 OpenSearch 使用 1.0 或更高版本，或者 Elasticsearch 6.7 或更高版本。远程域的主要版本必须低于本地域或与其相同。Elasticsearch 版本被认为*低于* OpenSearch版本，这意味着您可以将数据从 Elasticsearch 域名重新索引到域名。 OpenSearch 在同一主要版本中，远程域可以是任何次要版本。例如，支持从 Elasticsearch 7.10.x 到 7.9 的远程索引，但不支持从 OpenSearch 1.0 到 Elasticsearch 7.10.x 的重新索引。

**注意**  
本文档介绍如何在 Amazon Ser OpenSearch vice 域之间重新索引数据。有关该`reindex`操作的完整文档，包括详细步骤和支持的选项，请参阅[文档中的 Reind](https://docs.opensearch.org/latest/opensearch/reindex-data/) ex OpenSearch 文档。

**Topics**
+ [先决条件](#remote-reindex-prereq)
+ [在 OpenSearch 服务互联网域之间重新索引数据](#remote-reindex-domain)
+ [当远程服务器位于 VPC 中时，在 OpenSearch 服务域之间重新编制数据索引](#remote-reindex-vpc)
+ [在非OpenSearch 服务域之间重新索引数据](#remote-reindex-non-aos)
+ [重新索引大型数据集](#remote-reindex-largedatasets)
+ [远程重新索引设置](#remote-reindex-settings)

## 先决条件
<a name="remote-reindex-prereq"></a>

远程重新索引具有以下要求：
+ 远程域必须可从本地域访问。对于驻留在某个 VPC 中的远程域，本地域必须具有访问该 VPC 的权限。此流程因网络配置而异，但可能涉及连接到 VPN 或托管网络或使用本机 [VPC 端点连接](#remote-reindex-vpc)。要了解更多信息，请参阅[在 VPC 内启动您的亚马逊 OpenSearch 服务域](vpc.md)。
+ 请求必须如任何其他 REST 请求一样由远程域授权。如果远程域启用了精细访问控制，则您必须具有对远程域执行重新索引并读取本地域上的索引的权限。有关更多安全注意事项，请参阅 [Amazon 服务中的精细访问控制 OpenSearch](fgac.md)。
+ 建议您在开始重新索引流程之前，在本地域中使用所需设置创建索引。
+ 如果您的域为数据节点使用 T2 或 T3 实例类型，则无法使用远程重新索引。

## 在 OpenSearch 服务互联网域之间重新索引数据
<a name="remote-reindex-domain"></a>

最基本的场景是，远程索引与您的本地域 AWS 区域 相同，具有可公开访问的终端节点，并且您已签署 IAM 证书。

在远程域中，指定要从中重新索引的远程索引和要重新索引的本地索引：

```
POST _reindex
{
  "source": {
    "remote": {
      "host": "https://remote-domain-endpoint:443"
    },
    "index": "remote_index"
  },
  "dest": {
    "index": "local_index"
  }
}
```

您必须在远程域端点的末尾添加 443 以进行验证检查。

要验证索引是否已复制到本地域，请将此请求发送到本地域：

```
GET local_index/_search
```

如果远程索引位于与本地域不同的区域中，请传入其区域名称，例如在此示例请求中：

```
POST _reindex
{
  "source": {
    "remote": {
      "host": "https://remote-domain-endpoint:443",
      "region": "eu-west-1"
    },
    "index": "remote_index"
  },
  "dest": {
    "index": "local_index"
  }
}
```

对于像 AWS GovCloud (US) 中国区域这样的隔离区域，则可能无法访问终端节点，因为这些区域无法识别您的 IAM 用户。

如果使用[基本身份验证](fgac-http-auth.md)来保护远程域，请指定用户名和密码：

```
POST _reindex
{
  "source": {
    "remote": {
      "host": "https://remote-domain-endpoint:443",
      "username": "username",
      "password": "password"
    },
    "index": "remote_index"
  },
  "dest": {
    "index": "local_index"
  }
}
```

## 当远程服务器位于 VPC 中时，在 OpenSearch 服务域之间重新编制数据索引
<a name="remote-reindex-vpc"></a>

每个 OpenSearch 服务域都由其自己的内部虚拟私有云 (VPC) 基础设施组成。在现有 OpenSearch 服务 VPC 中创建新域时，将为 VPC 中的每个数据节点创建一个弹性网络接口。

由于远程重新索引操作是从远程 OpenSearch 服务域执行的，因此是在其自己的私有 VPC 内执行的，因此您需要一种访问本地域的 VPC 的方法。您可以通过使用内置的 VPC 终端节点连接功能建立连接 AWS PrivateLink，也可以配置代理来实现此目的。

如果您的本地域使用 OpenSearch 版本 1.0 或更高版本，则可以使用控制台或创建 AWS PrivateLink 连接。 AWS CLI AWS PrivateLink 连接允许本地 VPC 中的资源私下连接到同一 VPC 中的远程 VPC 中的资源 AWS 区域。

要创建 VPC 端点连接，要重新索引的源域必须位于本地 VPC 中，并且源域和目标域必须位于同一 AWS 区域中。

### 使用重新索引数据 AWS 管理控制台
<a name="reindex-console"></a>

您可以通过控制台使用远程重新索引，在共享 VPC 端点连接的两个域之间复制索引。

1. 导航到亚马逊 OpenSearch 服务控制台，网址为[https://console.aws.amazon.com/aos/](https://console.aws.amazon.com/aos/)。

1. 在左侧导航窗格中，选择 **域**。

1. 选择本地域，或您希望将数据复制到的域。随即打开域详细信息页面。选择常规信息下方的**连接**选项卡，然后选择**请求**。

1. 在**请求连接**页面上，选择 **VPC 端点连接**为连接模式，然后输入其他相关详细信息。这些详细信息包括远程域，即您希望从中复制数据的域。然后选择**请求**。

1. 导航到远程域的详细信息页面，选择**连接**选项卡，找到**入站连接**表。选中刚刚从中创建连接的域（本地域）名称旁边的复选框。选择 **Approve**（批准）。

1. 导航回本地域，选择 **Connections**（连接）选项卡，找到 **Outbound connections**（出站连接）表。两个域之间的连接处于活动状态后，表中的 **Endpoint**（端点）列中将出现一个端点。复制端点。

1. 打开本地域的控制面板，在左侧导航栏中选择 **Dev Tools**（开发人员工具）。要确认本地域中尚不存在远程域索引，请运行以下 GET 请求。*remote-domain-index-name*用您自己的索引名称替换。

   ```
   GET remote-domain-index-name/_search
   {
      "query":{
         "match_all":{}
      }
   }
   ```

   在输出中，您将看到指示“未找到索引”的错误。

1. 在 GET 请求下方，创建一个 POST 请求并使用您的端点作为远程主机，如下所示。

   ```
   POST _reindex
   {
      "source":{
         "remote":{
            "host":"connection-endpoint",
            "username":"username",
            "password":"password"
         },
         "index":"remote-domain-index-name"
      },
      "dest":{
         "index":"local-domain-index-name"
      }
   }
   ```

   运行此请求。

1. 再次运行 GET 请求。现在，输出中会显示“存在本地索引”。您可以查询此索引以验证是否 OpenSearch复制了远程索引中的所有数据。

### 使用 OpenSearch 服务 API 操作为数据重新编制索引
<a name="reindex-api"></a>

您可以通过 API 使用远程重新索引，在共享 VPC 端点连接的两个域之间复制索引。

1. 使用 [CreateOutboundConnection](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_CreateOutboundConnection.html)API 操作请求从本地域到远程域的新连接。

   ```
   POST https://es.region.amazonaws.com/2021-01-01/opensearch/cc/outboundConnection
   
   {
      "ConnectionAlias": "remote-reindex-example",
      "ConnectionMode": "VPC_ENDPOINT",
      "LocalDomainInfo": { 
         "AWSDomainInformation": { 
            "DomainName": "local-domain-name",
            "OwnerId": "aws-account-id",
            "Region": "region"
         }
      },
      "RemoteDomainInfo": { 
         "AWSDomainInformation": { 
            "DomainName": "remote-domain-name",
            "OwnerId": "aws-account-id",
            "Region": "region"
         }
      }
   }
   ```

   您会在回复中收到一个 `ConnectionId`。保存此 ID，以便在下一步中使用。

1. 使用带有您的连接 ID 的 [AcceptInboundConnection](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_AcceptInboundConnection.html)API 操作来批准来自本地域的请求。

   ```
   PUT https://es.region.amazonaws.com/2021-01-01/opensearch/cc/inboundConnection/ConnectionId/accept
   ```

1. 使用 [DescribeOutboundConnections](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_DescribeOutboundConnections.html)API 操作检索远程域的终端节点。

   ```
   {
       "Connections": [
           {
               "ConnectionAlias": "remote-reindex-example",
               "ConnectionId": "connection-id",
               "ConnectionMode": "VPC_ENDPOINT",
               "ConnectionProperties": {
                   "Endpoint": "connection-endpoint"
               },
               ...
           }
       ]
   }
   ```

   保存*connection-endpoint*以在步骤 5 中使用。

1. 要确认本地域中尚不存在远程域索引，请运行以下 GET 请求。*remote-domain-index-name*用您自己的索引名称替换。

   ```
   GET local-domain-endpoint/remote-domain-index-name/_search
   {
      "query":{
         "match_all":{}
      }
   }
   ```

   在输出中，您将看到指示“未找到索引”的错误。

1. 创建一个 POST 请求并使用您的端点作为远程主机，如下所示。

   ```
   POST local-domain-endpoint/_reindex
   {
      "source":{
         "remote":{
            "host":"connection-endpoint",
            "username":"username",
            "password":"password"
         },
         "index":"remote-domain-index-name"
      },
      "dest":{
         "index":"local-domain-index-name"
      }
   }
   ```

   运行此请求。

1. 再次运行 GET 请求。现在，输出中会显示“存在本地索引”。您可以查询此索引以验证是否 OpenSearch复制了远程索引中的所有数据。

如果远程域托管在 VPC 内并且您不想使用 VPN 端点连接功能，则必须使用可公开访问的端点配置代理。在这种情况下， OpenSearch 服务需要公共终端节点，因为它无法将流量发送到您的 VPC。

当您在 [VPC 模式](vpc.md)下运行域时，将在您的 VPC 中放置一个或多个端点。但是，这些端点仅适用于进入 VPC 内域的流量，而不允许进入 VPC 本身的流量。

远程重新索引命令是从本地域运行的，因此原始流量无法使用这些端点访问远程域。这就是此用例中需要代理的原因。代理域必须具有由公共证书颁发机构 (CA) 签名的证书。不支持自签名或私有 CA 签名证书。

## 在非OpenSearch 服务域之间重新索引数据
<a name="remote-reindex-non-aos"></a>

如果远程索引托管在 OpenSearch 服务之外，例如在自我管理的 EC2 实例中，请`true`将`external`参数设置为：

```
POST _reindex
{
  "source": {
    "remote": {
      "host": "https://remote-domain-endpoint:443",
      "username": "username",
      "password": "password",
      "external": true
    },
    "index": "remote_index"
  },
  "dest": {
    "index": "local_index"
  }
}
```

在这种情况下，仅支持使用用户名和密码的[基本身份验证](fgac-http-auth.md)。远程域必须具有可公开访问的终端节点（即使它与本地 OpenSearch 服务域位于同一 VPC 中）和由公有 CA 签名的证书。不支持自签名或私有 CA 签名证书。

## 重新索引大型数据集
<a name="remote-reindex-largedatasets"></a>

远程重新索引将滚动请求发送到具有以下默认值的远程域：
+ 5 分钟的搜索上下文
+ 套接字超时 30 秒
+ 1,000 的批处理大小

建议调整这些参数以适应您的数据。对于大型文档，可以考虑使用较小的批量大小，超时 and/or 时间更长。有关更多信息，请参阅[分页报告](https://docs.opensearch.org/docs/latest/search-plugins/searching-data/paginate/)。

```
POST _reindex?pretty=true&scroll=10h&wait_for_completion=false
{
  "source": {
    "remote": {
      "host": "https://remote-domain-endpoint:443",
      "socket_timeout": "60m"
    },
    "size": 100,
    "index": "remote_index"
  },
  "dest": {
    "index": "local_index"
  }
}
```

我们还建议将以下设置添加到本地索引以获得更好的性能：

```
PUT local_index
{
  "settings": {
    "refresh_interval": -1,
    "number_of_replicas": 0
  }
}
```

重新索引流程完成后，您可以设置所需的副本计数并删除刷新间隔设置。

要通过查询仅重新索引选择的文档子集，请将此请求发送到本地域：

```
POST _reindex
{
  "source": {
    "remote": {
      "host": "https://remote-domain-endpoint:443"
    },
    "index": "remote_index",
    "query": {
      "match": {
        "field_name": "text"
      }
    }
  },
  "dest": {
    "index": "local_index"
  }
}
```

远程重新索引不支持切片，因此您不能并行对同一请求执行多个滚动操作。

## 远程重新索引设置
<a name="remote-reindex-settings"></a>

除了标准的重新索引选项外，S OpenSearch ervice 还支持以下选项：


| 选项 | 有效值 | 说明 | 必填 | 
| --- | --- | --- | --- | 
| 外部 | 布尔值 | 如果远程域不是 OpenSearch 服务域，或者您要在两个 VPC 域之间重新建立索引，请指定为true。 | 否 | 
| region | 字符串 | 如果远程域位于不同的区域中，请指定该区域名称。 | 否 | 

# 使用数据流管理 Amazon OpenSearch 服务中的时间序列数据
<a name="data-streams"></a>

管理时间序列数据的典型工作流涉及多个步骤，例如创建翻转索引别名、定义写入索引以及为后备索引定义常见映射和设置。

Amazon S OpenSearch ervice 中的数据流有助于简化初始设置过程。对于基于时间的数据（例如通常仅追加的应用程序日志），数据流即可开箱即用。

数据流需要 OpenSearch 版本 1.0 或更高版本。

**注意**  
本文档提供了一些基本步骤，可帮助您开始使用 Amazon S OpenSearch ervice 域上的数据流。有关全面的文档，请参阅 OpenSearch 文档中的[数据流](https://docs.opensearch.org/latest/opensearch/data-streams/)。

## 数据流入门
<a name="data-streams-example"></a>

数据流在内部由多个支持索引组成。搜索请求被路由到所有后备索引，而索引请求路由到最新的写入索引。

### 步骤 1：创建索引模板
<a name="data-streams-example-1"></a>

要创建数据流，首先需要创建一个索引模板，该模板将一组索引配置为数据流。这些区域有：`data_stream` 对象表示它是数据流而不是常规索引模板。索引模式与数据流的名称匹配：

```
PUT _index_template/logs-template
{
  "index_patterns": [
    "my-data-stream",
    "logs-*"
  ],
  "data_stream": {},
  "priority": 100
}
```

在这种情况下，每个引入的文档都必须具有 `@timestamp` 字段。您还可以将自己的自定义时间戳字段定义为 `data_stream` 对象中的属性：

```
PUT _index_template/logs-template
{
  "index_patterns": "my-data-stream",
  "data_stream": {
    "timestamp_field": {
      "name": "request_time"
    }
  }
}
```

### 步骤 2：创建数据流
<a name="data-streams-example-2"></a>

创建索引模板后，您可以直接开始接收数据，而无需创建数据流。

因为我们有一个与`data_stream`对象匹配的索引模板，所以 OpenSearch 会自动创建数据流：

```
POST logs-staging/_doc
{
  "message": "login attempt failed",
  "@timestamp": "2013-03-01T00:00:00"
}
```

### 步骤 3：将数据引入到数据流
<a name="data-streams-example-3"></a>

要将数据提取到数据流中，可以使用常规索引 APIs。确保您索引的每个文档都有一个时间戳字段。如果您尝试引入没有时间戳字段的文档，则会收到错误。

```
POST logs-redis/_doc
{
  "message": "login attempt",
  "@timestamp": "2013-03-01T00:00:00"
}
```

### 步骤 4：搜索数据流
<a name="data-streams-example-4"></a>

您可以搜索数据流，就像搜索常规索引或索引别名一样。搜索操作适用于所有后备索引（流中存在的所有数据）。

```
GET logs-redis/_search
{
  "query": {
    "match": {
      "message": "login"
    }
  }
}
```

### 步骤 5：将鼠标移动到数据流
<a name="data-streams-example-5"></a>

您可以设置[索引状态管理 (ISM)](ism.md)策略来自动执行数据流的转换过程。在创建支持索引时，ISM 策略将应用于支持索引。将策略与数据流关联时，它仅影响该数据流的未来支持索引。您也不需要提供 `rollover_alias` 设置，因为 ISM 策略从后备索引推断出此信息。

**注意**  
如果将后备索引迁移到[冷存储](cold-storage.md)，则 OpenSearch 会将该索引从数据流中删除。即使将索引移回到 [UltraWarm](ultrawarm.md)，索引仍保持独立状态，而不是原始数据流的一部分。从数据流中删除索引后，对数据流执行搜索不会返回索引中的任何数据。

**警告**  
数据流写入索引无法迁移到冷存储。如果要将数据流数据迁移到冷存储，必须在迁移前滚动数据流。

### 步骤 6：在 OpenSearch 仪表板中管理数据流
<a name="data-streams-example-6"></a>

要管理 OpenSearch 控制面板中的数据流，请打开**OpenSearch控制面板**，选择**索引管理**，选择**索引**或**策略管理的索引**。

### 步骤 7：删除数据流
<a name="data-streams-example-7"></a>

删除操作首先删除数据流的支持索引，然后删除数据流本身。

要删除数据流及其所有隐藏的后备索引，请执行以下操作：

```
DELETE _data_stream/name_of_data_stream
```