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

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

UltraWarm亚马逊OpenSearch服务存储

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

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

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

先决条件

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

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

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

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

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

  • 如果域使用精细访问控制,则必须将用户映射到OpenSearch仪表板中的ultrawarm_manager角色才能进行 UltraWarm API 调用。

注意

在某些先前存在的OpenSearch服务域上可能未定义该ultrawarm_manager角色。如果没有在控制面板中看到角色,则需要手动创建它

配置权限

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

  1. 在OpenSearch仪表板中,转到 “安全”,然后选择 “权限”。

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

    Group name 权限
    ultrawarm_cluster
    • cluster:admin/ultrawarm/migration/list

    • cluster:monitor/nodes/stats

    ultrawarm_index_read
    • indices:admin/ultrawarm/migration/get

    • indices:admin/get

    ultrawarm_index_write
    • indices:admin/ultrawarm/migration/warm

    • indices:admin/ultrawarm/migration/hot

    • indices:monitor/stats

    • indices:admin/ultrawarm/migration/cancel

  3. 选择角色创建角色

  4. 将角色命名为 ultrawarm_manager

  5. 对于群集权限,选择 ultrawarm_clustercluster_monitor

  6. 对于索引,键入 *

  7. 对于索引权限,选择 ultrawarm_index_readultrawarm_index_writeindices_monitor

  8. 选择创建

  9. 创建角色后,将其映射到任何将管理UltraWarm索引的用户或后端角色。

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

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

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

因此UltraWarm,我们仍然建议最大分片大小为 50 GiB。分配给每种UltraWarm实例类型的 CPU 内核数量和 RAM 量可以让您大致了解它们可以同时搜索的分片数量。请注意,虽然只有主分片计入 S3 中的UltraWarm存储空间,但OpenSearch仪表板和控制面板_cat/indices仍将UltraWarm索引大小报告为所有主分片和副本分片的大小。

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

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

UltraWarm 定价

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

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

启用 UltraWarm

控制台是创建使用温存储的域的最简单方法。创建域时,选择启用UltraWarm数据节点和所需的暖节点数量。相同的基本过程适用于现有域,前提是它们满足先决条件。即使在域状态从 “处理中” 更改为 “活动” 之后,也UltraWarm可能在几个小时内无法使用。

您也可以使用Amazon CLI配置 API 来启用UltraWarm,特别是中的WarmEnabledWarmCount、和WarmType选项ClusterConfig

注意

域支持最大数量的温节点。有关详细信息,请参阅亚马逊OpenSearch服务配额

示例 CLI 命令

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

有关更多信息,请参阅 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": 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 参考

将索引迁移到UltraWarm存储

如果您完成了对索引的写入并且不再需要尽可能快的搜索性能,请将其从 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 指标。在整个迁移过程中,索引仍然可用,无需停机。

迁移过程具有以下状态:

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最适合不可变的数据,例如日志。您可以查询索引并将其删除,但无法添加、更新或删除单个文档。如果尝试,您可能会遇到以下错误:。

{ "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 }

自动执行迁移

我们建议在索引达到特定期限或满足其他条件后使用 亚马逊OpenSearch服务中的索引状态管理 自动执行迁移过程。请参阅演示该工作流程的示例策略

迁移调整

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

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

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

要检查迁移过程的此阶段花费的时间,请监视 HotToWarmMigrationForceMergeLatency 指标

取消迁移

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

POST _ultrawarm/migration/_cancel/my-index

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

列出热索引和暖索引

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

GET _warm GET _hot

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

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

将温索引返回到热存储

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

POST _ultrawarm/migration/my-index/_hot

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

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

从快照恢复热索引

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

cs-ultrawarm 还原快照时,快照会恢复到温存储,而不是热存储。cs-automated-enccs-automated 存储库中的快照还原到热存储。

将UltraWarm快照恢复到温存储
  1. 标识包含要还原的索引的最新快照:

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

    DELETE my-index

    如果不想删除索引,请将其返回到热存储重新编制索引它。

  3. 还原快照:

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

    UltraWarm忽略您在此还原请求中指定的任何索引设置,但您可以指定诸如rename_patternrename_replacement之类的选项。有关OpenSearch快照还原选项的摘要,请参阅OpenSearch文档

暖索引的手动快照

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

默认情况下,Ser OpenSearch vice 在手动快照中不包含热索引。例如,以下调用只包含热索引:

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 }
  • 手动快照始终恢复到热存储,即使它们最初包含热索引也是如此。

将温索引迁移到冷存储

如果您有不经常查询的数据UltraWarm,请考虑将其迁移到冷存储。冷存储适用于您偶尔访问的数据或不再处于活动状态的数据。您无法读取或写入冷索引,但可以在需要查询时免费将它们迁移回暖存储。有关说明,请参阅 将索引迁移到冷存储

禁用 UltraWarm

控制台是最简单的禁用方法UltraWarm。选择域、Actions(操作)Edit cluster configuration(编辑集群配置)。取消选择 “启用UltraWarm数据节点”,然后选择 “保存更改”。还可以在 Amazon CLI 和配置 API 中使用 WarmEnabled 选项。

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