用于 Amazon OpenSearch Service 的冷藏库 - 亚马逊 OpenSearch 服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

用于 Amazon OpenSearch Service 的冷藏库

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

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

先决条件

冷存储具有以下先决条件:

  • 冷存储需要开放搜索或弹性搜索版本 7.9 或更高版本。

  • 若要在 OpenSearch 服务域上启用冷存储,还必须在同一个域上启用 UltraWarm。

  • 要使用冷存储,域必须具有专用的主节点

  • 如果您的域为数据节点使用 T2 或者 T3 实例类型,则无法使用冷存储。

  • 如果您的索引使用 Zstandard 压缩编解码器"index.codec": "zstd""index.codec": "zstd_no_dict"),则无法将其移至冷存储。

  • 如果您的索引使用近似 k-NN ("index.knn": true),则您无法将其移至冷存储。

  • 如果域使用精细访问控制,则非管理员用户必须映射到 OpenSearch 控制面板的 cold_manager 角色,以管理冷索引。

注意

cold_manager 角色可能不存在于某些预先存在的 OpenSearch 服务域上。如果您没有在控制面板中看到角色,则需要手动创建

配置权限

如果在预先存在的 OpenSearch 服务域上启用冷存储,cold_manager 角色可能无法在域上定义。如果您的域使用精细访问控制,则非管理员用户必须映射至此角色,以管理冷索引。手动创建 cold_manager 角色,请执行下列步骤:

  1. 在 OpenSearch 控制面板中,转到安全,然后选择权限

  2. 选择创建操作组并配置以下组:

    Group name 权限
    cold_cluster
    • cluster:monitor/nodes/stats

    • cluster:admin/ultrawarm*

    • cluster:admin/cold/*

    cold_index
    • indices:monitor/stats

    • indices:data/read/minmax

    • indices:admin/ultrawarm/migration/get

    • indices:admin/ultrawarm/migration/cancel

  3. 选择 Role (角色),然后选择 Create role (创建角色)

  4. 将角色命名为 cold_manager

  5. 针对集群权限,选择您创建的 cold_cluster 组。

  6. 针对索引,输入 *

  7. 针对索引权限,选择您创建的 cold_index 组。

  8. 选择 Create(创建)。

  9. 创建角色之后,将其映射设置为管理冷索引的任何用户或后端角色。

冷存储要求和性能注意事项

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

冷存储定价

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

在冷存储和热存储之间移动数据时,您不会产生任何传输费用。当索引在温存储和冷存储之间迁移时,您仍然只需为索引的一个副本付费。迁移完成后,索引将根据其迁移到的存储层计费。有关冷存储定价的更多信息,请参阅 Amazon OpenSearch Service 定价

启用冷存储

控制台是创建使用冷存储的域的最简单方法。创建域时,选择启用冷存储。相同的基本过程适用于现有域,前提是它们满足先决条件。即使域状态从 Processing (正在处理) 变为 Active (活动) 后,冷存储可能也会在几个小时内无法使用。

您也可以使用 Amazon CLI 或者配置 API以启用冷存储。

示例 CLI 命令

以下 Amazon 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

有关更多信息,请参阅 Amazon CLI 命令参考

示例配置 API 请求

以下对配置 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" }

有关详细信息,请参阅 Amazon OpenSearch Service API 参考

在 OpenSearch 控制面板中管理冷索引

您可以使用 OpenSearch 服务域中的现有控制面板界面管理热索引、温索引和冷索引。使用控制面板,您可以在温存储和冷存储之间迁移索引,并监控索引迁移状态,而无需使用 CLI 或配置 API。有关更多信息,请参阅在 OpenSearch 控制面板中管理索引

将索引迁移到冷存储

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

参数 支持的值 描述
timestamp_field 索引映射中的日期/时间字段。

所提供字段的最小值和最大值将计算并存储为冷索引的 start_timeend_time 元数据。

start_timeend_time

使用以下格式之一:

  • strict_date_optional_time。例如:yyyy-MM-dd'T'HH:mm:ss.SSSZyyyy-MM-dd

  • 以毫秒为单位的纪元时间

所提供的值将存储为冷索引的 start_timeend_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 Service 一次将一个索引迁移至冷存储。队列中最多可包含 100 个迁移。任何超出限制的请求都将被拒绝。要检查队列中的当前迁移数,请监控 WarmToColdMigrationQueueSize 指标。迁移过程具有以下状态:

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.

自动迁移到冷存储

我们建议在索引达到特定期限或满足其他条件后使用索引状态管理自动执行迁移过程。请参阅示例策略,其中演示了如何自动将索引从热存储迁移到 UltraWarm 再到冷存储。

注意

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

取消迁移到冷存储

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

POST _ultrawarm/migration/_cancel/my-index { "acknowledged" : true }

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

列出冷索引

在查询之前,您可以列出冷存储中的索引,以决定哪些索引要迁移到 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" } ] }

过滤

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

以下请求列出了匹配 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-012020-03-01 之间的 start_timeend_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" } ] }

排序

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

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/descend_time:asc/descindex_name:asc/desc

分页

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

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

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

将冷索引迁移到温存储

使用上一节中的筛选条件缩小冷索引列表的范围后,请将其迁移回 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 指标。迁移过程具有以下状态:

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.

从快照恢复冷索引

如果需要还原已删除的冷索引,您可以按照 从快照恢复温索引 中的说明将其还原到暖层,然后再次将索引迁回冷层。无法将已删除的冷索引直接还原到冷层。删除后,OpenSearch 服务将保留冷索引 14 天。

取消从冷存储迁移到热存储

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

POST _cold/migration/my-index/_cancel { "acknowledged" : true }

要取消一批索引的迁移(一次最多 10 个),请指定迁移 ID:

POST _cold/migration/_cancel?migration_id=my-migration-id { "acknowledged" : true }

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

更新冷索引元数据

您可以更新 start_timeend_time 字段,用于冷索引:

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

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

注意

OpenSearch 控制面板不支持 PATCH 方法。使用 curlPostman 或其他方法来更新冷元数据。

删除冷索引

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

DELETE _cold/my-index { "acknowledged" : true }

禁用冷存储

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

要使用 ColdStorageOptions 下面的 Amazon CLI 或配置 API,请设置 "Enabled"="false"

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