UltraWarm for Amazon Elasticsearch Service - Amazon Elasticsearch Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

UltraWarm for Amazon Elasticsearch Service

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

UltraWarm 节点使用 Amazon S3 和高级缓存解决方案来提高性能,而不是使用附加的存储。对于您没有主动写入和查询频率较低的索引,UltraWarm 提供的每 GiB 数据的成本显著降低。在 Elasticsearch 中,这些温索引的行为与任何其他索引一样。您可以使用相同的 API 查询它们,也可以使用它们在 Kibana 中创建控制面板。

先决条件

UltraWarm 具有几个重要的先决条件:

  • UltraWarm 需要 Elasticsearch 6.8 或更高版本。

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

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

计算 UltraWarm 存储要求

计算存储要求中所述,热存储中的数据会产生大量开销:副本、Linux 预留空间和 Amazon ES 预留空间。例如,具有一个副本分片的 10 GiB 主分片需要大约 26 GiB 的热存储。

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

提示

使用 UltraWarm,我们仍然建议最大分片大小为 50 GiB。

UltraWarm 定价

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

使用 UltraWarm 存储,您需要为您的使用量付费。一个 ultrawarm1.large.elasticsearch 实例可以在 S3 上处理多达 20 TiB 的存储空间,但如果您仅存储 1 TiB 的数据,则只需为 1 TiB 的数据付费。与所有其他节点类型一样,您还为每个 UltraWarm 节点支付小时费率。有关更多信息,请参阅Amazon Elasticsearch Service 定价

启用 UltraWarm

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

您还可以使用 AWS CLI配置 API 启用 UltraWarm,特别是 ElasticsearchClusterConfig 中的 WarmEnabledWarmCountWarmType 选项。

注意

域支持最大数量的温节点。有关详细信息,请参阅 Amazon Elasticsearch Service 限制

示例 CLI 命令

以下 AWS CLI 命令创建一个具有三个数据节点、三个专用主节点和六个具有限制性访问策略的温节点的域:

aws es create-elasticsearch-domain --domain-name my-domain --elasticsearch-cluster-config InstanceCount=3,InstanceType=r5.large.elasticsearch,DedicatedMasterEnabled=true,DedicatedMasterType=c5.large.elasticsearch,DedicatedMasterCount=3,ZoneAwarenessEnabled=true,ZoneAwarenessConfig={AvailabilityZoneCount=3},WarmEnabled=true,WarmCount=6,WarmType=ultrawarm1.medium.elasticsearch --elasticsearch-version 6.8 --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=11 --access-policies '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":["123456789012"]},"Action":["es:*"],"Resource":"arn:aws:es:us-east-1:123456789012:domain/my-domain/*"}]}' --region us-east-1

有关详细信息,请参阅 AWS CLI Command Reference

示例配置 API 请求

对配置 API 的以下请求创建一个域,其中包含三个数据节点、三个专用主节点以及六个温节点(启用了所有加密功能并具有限制性访问策略):

POST https://es.us-east-2.amazonaws.com/2015-01-01/es/domain { "ElasticsearchClusterConfig": { "InstanceCount": 3, "InstanceType": "r5.large.elasticsearch", "DedicatedMasterEnabled": true, "DedicatedMasterType": "c5.large.elasticsearch", "DedicatedMasterCount": 3, "ZoneAwarenessEnabled": true, "ZoneAwarenessConfig": { "AvailabilityZoneCount": 3 }, "WarmEnabled": true, "WarmCount": 6, "WarmType": "ultrawarm1.medium.elasticsearch" }, "EBSOptions": { "EBSEnabled": true, "VolumeType": "gp2", "VolumeSize": 11 }, "EncryptionAtRestOptions": { "Enabled": true }, "NodeToNodeEncryptionOptions": { "Enabled": true }, "DomainEndpointOptions": { "EnforceHTTPS": true, "TLSSecurityPolicy": "Policy-Min-TLS-1-2-2019-07" }, "ElasticsearchVersion": "6.8", "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/*\"}]}" }

有关详细信息,请参阅Amazon Elasticsearch Service 配置 API 参考

将索引迁移到 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

您最多可以同时进行 25 项从热存储到温存储的迁移。要查看当前数量,请监控HotToWarmMigrationQueueSize指标

迁移过程具有以下状态:

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", "blocks": { "ultrawarm_allow_delete": "true" }, "provided_name": "my-index", "creation_date": "1572886951679", "unassigned": { "node_left": { "delayed_timeout": "5m" } }, "number_of_replicas": "1", "uuid": "3iyTkhXvR8Cytc6sWKBirg", "version": { "created": "6080099" }, "routing": { "allocation": { "require": { "box_type": "warm" } }, "search_preference": "_primary_first" }, "number_of_shards": "5" } } } }
  • blocks.ultrawarm_allow_delete 指定是阻止对索引的大多数 _settings 更新 (true) ,还是允许这些更新 (false)。

  • 在这种情况下,number_of_replicas 是不消耗磁盘空间的被动副本的数量。

  • routing.allocation.require.box_type 指定索引应使用热节点而不是标准数据节点。

  • routing.search_preference 指示 Amazon ES 首先查询主分片,并且仅在查询失败时使用被动副本。此设置可减少磁盘使用量。

温存储中的索引是只读的,除非您将索引返回到热存储。您可以查询索引,但无法向它们添加数据。如果您尝试这样做,则会遇到以下错误消息:

{ "error": { "root_cause": [{ "type": "cluster_block_exception", "reason": "blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];" }], "type": "cluster_block_exception", "reason": "blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];" }, "status": 403 }

自动执行迁移

我们建议在索引达到特定期限或满足其他条件后使用 索引状态管理 自动执行迁移过程。此处的示例策略演示该工作流程。

列出热索引和温索引

UltraWarm 添加了两个附加选项(类似于 _all)以帮助管理热索引和温索引。有关所有温索引或热索引的列表,请提出以下请求:

GET _warm GET _hot

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

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

将温索引返回到热存储

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

POST _ultrawarm/migration/my-index/_hot

您最多可以同时进行 10 项从温存储到热存储的迁移。要查看当前数量,请监控WarmToHotMigrationQueueSize指标

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

从快照恢复温索引

除了用于自动快照的标准存储库之外,UltraWarm 还添加了第二个存储库 cs-ultrawarmcs-ultrawarm 中的快照具有与其他自动快照相同的 14 天保留期。

与其他自动执行的快照不同,此存储库中的每个快照只包含一个索引。从 cs-ultrawarm 还原快照时,快照会恢复到温存储,而不是热存储。cs-automated-enccs-automated 存储库中的快照还原到热存储。

将 UltraWarm 快照还原到温存储

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

    GET _snapshot/cs-ultrawarm/_all { "snapshots": [{ "snapshot": "snapshot-name", "version": "6.8.0", "indices": [ "my-index" ] }] }
  2. 如果索引已经存在,请将其删除:

    DELETE my-index

    如果您不想删除索引,请重新对其编制索引

  3. 还原快照:

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

    UltraWarm 会忽略您在此还原请求中指定的任何设置,因此您可以省略请求正文。

禁用 UltraWarm

控制台是禁用 UltraWarm 的最简单方法。选择域、Edit domain (编辑域),取消选择 Enable UltraWarm data nodes (启用 UltraWarm 数据节点),然后选择 Submit (提交)。还可以在 AWS CLI 和配置 API 中使用 WarmEnabled 选项。

在禁用 UltraWarm 之前,必须删除所有温索引或将其迁移回热存储。温存储空间为空后,请等待五分钟,然后尝试禁用该功能。