Amazon OpenSearch Service故障排除 - 亚马逊 OpenSearch 服务

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

Amazon OpenSearch Service故障排除

本节介绍了如何确定和解决常见的 Amazon OpenSearch Service 问题。遇到问题时请先参阅本节中的信息,然后再联系 AWS 支持

无法访问 OpenSearch 控制面板

OpenSearch 控制面板端点不支持已签名的请求。如果域的访问控制策略仅向特定 IAM 角色授予访问权限,并且您尚未配置 Amazon Cognito 身份验证,在尝试访问 Dashboards 时您可能会收到以下错误:

"User: anonymous is not authorized to perform: es:ESHttpGet"

如果您的 OpenSearch Service 域使用 VPC 访问,您可能不会收到此错误,但请求可能会超时。要了解有关更正此问题和您可以使用的各种配置选项的更多信息,请参阅 控制对仪表板的访问权限 关于VPC域名的访问策略Amazon OpenSearch Service 中的 Identity and Access Management

无法访问 VPC 域

请参阅关于VPC域名的访问策略测试VPC域名

集群处于只读状态

与早期的 Elasticsearch 版本相比,OpenSearch 和 Elasticsearch 7.x 使用不同的系统进行集群协调。在此新系统中,如果集群发生法定数量损失,则在您采取操作之前集群将不可用。法定数量损失可能会有两种形式:

  • 如果您的集群使用专用主节点,在一半或更多的节点不可用时将出现法定数量损失。

  • 如果您的集群不使用专用主节点,在一半或更多的数据节点不可用时将出现法定数量损失。

如果出现法定数量损失并且您的集群有多个节点, OpenSearch Service 会恢复法定数量并将集群置于只读状态。您有两种选择:

如果您更希望原样使用集群,请使用以下请求验证集群的运行状况为绿色:

GET _cat/health?v

如果集群运行状况为红色,我们建议从快照还原集群。您也可以参阅红色集群状态,了解故障排除步骤。如果集群运行状况为绿色,使用以下请求确保所有预期索引存在:

GET _cat/indices?v

然后,运行一些搜索以验证预期数据存在。如果满足这些情况,您可以使用以下请求移除只读状态:

PUT _cluster/settings { "persistent": { "cluster.blocks.read_only": false } }

如果出现法定数量损失并且您的集群只有一个节点, 将替换节点并且将集群置于只读状态。否则,您具有相同的选项:原样使用集群或者从快照还原。

在这两种情况下,OpenSearch Service 会发送两个事件到您的 AWS Health Dashboard。第一个事件告知您发生了法定数量损失。第二个事件在 OpenSearch Service 成功恢复法定数量之后发生。有关使用 AWS Health Dashboard 的更多信息,请参阅 AWS Health 用户指南

红色集群状态

红色群集状态表示至少有一个主分片及其副本未分配给节点。无论状态如何,OpenSearch Service 一直尝试拍摄所有索引的自动快照,但快照会失败,而红色群集状态仍然存在。

红色群集状态的最常见原因是群集节点发生故障,以及连续处理繁重负载造成 OpenSearch 进程崩溃。

注意

无论群集状态如何,OpenSearch Service 将自动快照存储 14 天。因此,如果集群的红色状态持续超过两周,系统会删除最后一个运行正常的自动快照,您可能会永久丢失集群数据。如果 OpenSearch Service 域进入红色集群状态, AWS Support 可能与您联系,询问您希望自己来解决该问题,还是希望支持团队给予协助。您可以设置一个 CloudWatch 警报,在出现红色集群状态时通知您。

最终,红色分片会导致红色集群,而红色索引会导致红色分片。要确定引起红色集群状态的索引,OpenSearch 有一些极为有用的 API。

  • GET /_cluster/allocation/explain 选择它找到的第一个未分配的分片,并说明为何无法将它分配给节点:

    { "index": "test4", "shard": 0, "primary": true, "current_state": "unassigned", "can_allocate": "no", "allocate_explanation": "cannot allocate because allocation is not permitted to any of the nodes" }
  • GET /_cat/indices?v 显示每个索引的运行状况、文档数量以及磁盘使用情况:

    health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open test1 30h1EiMvS5uAFr2t5CEVoQ 5 0 820 0 14mb 14mb green open test2 sdIxs_WDT56afFGu5KPbFQ 1 0 0 0 233b 233b green open test3 GGRZp_TBRZuSaZpAGk2pmw 1 1 2 0 14.7kb 7.3kb red open test4 BJxfAErbTtu5HBjIXJV_7A 1 0 green open test5 _8C6MIXOSxCqVYicH3jsEA 1 0 7 0 24.3kb 24.3kb

删除红色索引是修复红色集群状态的最快方式。接下来您可以扩展您的 OpenSearch Service 域以便使用更大的实例类型、更多实例或更多基于 EBS 的存储(取决于红色集群状态的原因),并尝试重新创建引发问题的索引。

如果删除存在问题的索引不可行,您可以还原快照、从索引中删除文档、更改索引设置、减少副本数量或删除其他索引以释放磁盘空间。在重新配置您的 OpenSearch Service 域之前,一个重要步骤是解决红色群集状态。重新配置具有红色集群状态的域会将问题复杂化,并导致该域卡在正在处理配置状态,直到问题解决。

自动修复红色集群

如果集群的状态持续为红色超过一个小时,OpenSearch Service 会尝试通过重新路由未分配的分片或利用过去的快照中还原来自动修复集群。

如果它无法修复一个或多个红色索引,并且集群状态保持红色的时间总计达到 14 天,则 OpenSearch Service 仅在集群满足下列条件中的至少一个时才会采取进一步的措施:

  • 只有一个可用区

  • 没有专用主节点

  • 包含具爆发能力的实例类型(T2 或 T3)

目前,如果您的集群满足以下条件中的任何一项,OpenSearch Service 将在接下来的 7 天内每天向您发送通知,说明如果您不修复这些索引,所有未分配的分片都将被删除。如果集群的状态在 21 天后仍然为红色,OpenSearch Service 会删除所有红色索引上未分配的分片(存储和计算)。您将在 OpenSearch Service 控制台的 Notifications(通知)面板中收到其中每个事件的通知。有关更多信息,请参阅 集群运行状况事件

从连续处理繁重负载恢复

要确定红色集群状态是否源于在数据节点上连续处理繁重负载,请监控以下集群指标。

相关指标 描述 恢复
JVMMemoryPressure

指定用于集群中所有数据节点的 Java 堆的百分比。查看此指标的统计数据最大值,并试图尽可能地减少内存压力下降,因为 Java 垃圾收集器无法回收充足的内存。这种模式可能由于复杂的查询或大型数据字段而产生。

x86 实例类型使用 Concurrent Mark Sweep (CMS) 垃圾回收器,后者随应用程序线程一起运行以保持较短的暂停。如果 CMS 在正常回收期间无法回收足够的内存,会触发完整垃圾回收,这可能会导致应用程序暂停时间较长并影响集群稳定性。

基于 ARM 的 Graviton 实例类型使用 Garbage-First (G1) 垃圾回收器,它与 CMS 类似,但使用额外的短暂停和堆碎片整理来进一步减少对完整垃圾回收的需求。

无论哪种情况,如果内存使用量继续增长超出垃圾回收器在完整垃圾回收期间可以回收的水平,OpenSearch 都会崩溃并出现内存不足错误。对于所有实例类型,一个很好的经验法则是将使用率保持为低于 80%。

_nodes/stats/jvm API 提供了一个有用的 JVM 统计数据、内存池使用情况和垃圾收集信息摘要:

GET domain-endpoint/_nodes/stats/jvm?pretty

为 JVM 设置内存断路器。有关更多信息,请参阅 JVM 内存不足错误

如果问题仍然存在,请删除不必要索引、减少对域的请求的数量或降低其复杂性、添加实例或使用更大的实例类型。

CPU 利用率 指定用于集群中各数据节点的 CPU 资源的百分比。查看此指标的 Maximum 统计数据,并查找连续模式的高使用率。 添加数据节点或增加现有数据节点的实例类型的大小。
节点 指定集群中的节点数。查看此指标的最小值统计数据。这个值会在该服务为集群部署新的实例队列时波动。 添加数据节点。

黄色集群状态

黄色集群状态意味着所有索引的主分片分配给集群中的节点,但是至少有一个索引的副本分片不是如此。单节点集群始终初始化为黄色集群状态,因为不存在 OpenSearch Service 可分配副本的其他节点。要获得绿色集群状态,请增加节点数。有关更多信息,请参阅 调整亚马逊 OpenSearch 服务域名的大小

创建新索引后或节点出现故障后,多节点群集可能会短暂显示黄色群集状态。当 OpenSearch 在整个集群中复制数据时,此状态可自行解析。磁盘空间不足也可能导致黄色群集状态;只有节点具有容纳副本分片的磁盘空间时,群集才能分发副本分片。

ClusterBlockException

您可能会由于以下原因收到 ClusterBlockException 错误。

缺少可用存储空间

如果集群中有一个或多个节点的存储空间低于以下两者中的最小值:1) 可用存储空间的 20%,或 2) 20 GiB 存储空间,则添加文档和创建索引等基本写入操作可能会开始失败。计算存储要求 提供了 OpenSearch Service 对磁盘空间的使用情况的摘要。

要避免问题,请在 OpenSearch Service 控制台中监控 FreeStorageSpace 指标并创建 CloudWatch 警报,使该警报在 FreeStorageSpace 降至特定阈值以下时触发。GET /_cat/allocation?v 还提供了分片分配和磁盘使用情况的有用摘要。要解决与缺少存储空间相关的问题,请扩展您的 OpenSearch Service 域,以使用更大的实例类型、更多实例或更多基于 EBS 的存储。

JVM 内存压力过高

JVMMemoryPressure 指标超过 92% 达 30 分钟时,OpenSearch Service 将触发保护机制并阻止所有写入操作以防止集群进入红色状态。当打开保护时,写入操作将失败并返回 ClusterBlockException 错误,无法创建新索引,并且会引发 IndexCreateBlockException 错误。

JVMMemoryPressure 指标回到 88% 或以下达 5 分钟时,将禁用保护,并取消阻止到集群的写入操作。

JVM 内存压力过高可能是由于对集群的请求数量激增、节点间的分片分配不平衡、集群中的分片过多、字段数据或索引映射爆炸或无法处理传入负载的实例类型造成的。也可能是由于在查询中使用聚合、通配符或较宽的时间范围造成的。

要减少集群的流量并解决 JVM 内存压力过高的问题,请尝试以下一项或多项操作:

  • 扩展域,使每个节点的最大堆大小为 32GB。

  • 通过删除旧的或未使用的索引来减少分片的数量。

  • 使用 POST index-name/_cache/clear?fielddata=true API 操作清除数据缓存。请注意,清除缓存可能会中断正在进行的查询。

一般而言,为了避免将来出现 JVM 内存压力过高的问题,遵循以下最佳实践:

迁移到带待机功能的多可用区时出错

当您将现有域迁移到带待机功能的多可用区时,可能会出现以下问题。

从无备用域的域迁移到有备用域的域期间,创建索引、索引模板或 ISM 策略

如果您在将域从不带待机功能的多可用区迁移到带待机功能的多可用区时创建索引,且索引模板或 ISM 策略未遵循建议数据复制指南,则可能导致数据不一致,迁移可能会失败。为避免这种情况,请使用三倍数据副本数(包括主节点和副本)创建新索引。您可以使用 DescribeDomainChangeProgress API 检查迁移进度。如果遇到副本计数错误,请修复错误,然后联系 AWS 支持重新尝试迁移。

数据副本数量错误

如果域中的数据副本数量出错,则迁移到带待机功能的多可用区将发生失败。

JVM 内存不足错误

JVM OutOfMemoryError 通常意味着触发了以下一种 JVM 断路器。

断路器 描述 集群设置属性
父级断路器 允许所有断路器占用的 JVM 堆内存百分比总和。原定设置值是 95%。 indices.breaker.total.limit
现场数据断路器 将单个数据字段加载到内存时所允许的 JVM 堆内存百分比。默认值为 40%。如果您通过大型字段上载数据,您可能需要提高此限制。 indices.breaker.fielddata.limit
请求断路器 允许用于响应服务请求的数据结构所占的 JVM 堆内存百分比。默认值为 60%。如果您的服务请求涉及计算聚合,您需要提高此限制。 indices.breaker.request.limit

集群节点失败

Amazon EC2 实例可能会遇到意外终止并重新启动。通常情况下,OpenSearch Service 将重启节点。但是,OpenSearch 群集中的一个或多个节点可能会停留在发生故障状态。

要检查这种情况,请在 OpenSearch Service 控制台中打开域控制面板。转到 Cluster health(集群运行状况)选项卡,然后找到 Total nodes(总节点)指标。查看所报告的节点数是否少于您为集群配置的数量。如果指标显示一个或多个节点出现故障已超过 1 天,请联系 AWS 支持

您还可以设置一个 CloudWatch 警报以在此问题发生时通知您。

注意

总节点指标在更改集群配置和服务例行维护期间不准确。此行为是预期的。该指标会报告正确数量的集群节点。要了解更多信息,请参阅 在 Amazon OpenSearch 服务中进行配置更改

为保护您的集群意外终止和重新启动节点,请在 OpenSearch Service 域为每个索引至少创建一个副本。

超过最大分片限制

OpenSearch 以及 Elasticsearch 7.x 版本的原定设置为每个节点不超过 1,000 个分区。如果请求(例如创建新索引)会导致您超过此限制,则 OpenSearch/ElasticSearch 会引发错误。如果您遇到此错误,则有多个选项:

  • 将更多数据节点添加到集群。

  • 增加 _cluster/settings/cluster.max_shards_per_node 设置。

  • 使用 _shrink API 来减少节点上的分片数。

域卡在 Processing(正在处理)状态

您的 OpenSearch Service 域在配置更改过程中进入“Processing(正在处理)”状态。当您启动配置更改时,域状态将更改为“Processing(正在处理)”,同时 OpenSearch Service 会创建一个新环境。在新环境中,OpenSearch Service 会启动一组新的适用节点(例如数据、主节点或 UltraWarm)。迁移完成后,较旧节点将被终止。

如果出现以下任一情况,集群可能会卡在“Processing(正在处理)”状态:

  • 一组新的数据节点启动失败。

  • 将分片迁移到新的数据节点集不成功。

  • 验证检查因错误而失败。

有关上述每种情况的详细解决步骤,请参阅为什么我的 Amazon OpenSearch Service 域卡在“Processing(正在处理)”状态?

EBS 可爆发容量余额低

当某个通用型(SSD)卷上的 EBS 可爆发容量余额低于 70% 时,OpenSearch Service 会向您发送一条控制台通知,并且将在余额低于 20% 时发送一条跟进通知。要解决此问题,您可以纵向扩展集群,也可以减少读取和写入 IOPS,从而增加可爆发容量余额。对于具有 gp3 卷类型的域以及具有卷大小超过 1000 GiB 的 gp2 卷的域,突增余额保持在 0。有关更多信息,请参阅通用型 SSD 卷(gp2)。您可以使用 BurstBalance CloudWatch 指标来监控 EBS 可爆发容量余额。

无法启用审核日志

在尝试使用 OpenSearch Service 控制台启用审核日志发布时可能会遇到以下错误:

为 CloudWatch Logs 组指定的资源访问策略不会为 Amazon OpenSearch Service 授予足够的权限来创建日志流。请检查资源访问策略。

如果遇到此错误,请验证您的策略 resource 元素包含正确的日志组 ARN。如果是这样,请执行以下步骤:

  1. 等待几分钟。

  2. 在 Web 浏览器中刷新页面。

  3. 选择 Select existing group(选择现有组)

  4. 对于现有日志组,选择在收到错误消息之前创建的日志组。

  5. 在访问策略部分,选择 Select existing policy(选择现有策略)

  6. 对于现有策略中,选择您在收到错误消息之前创建的策略。

  7. 请选择 启用

如果在重复该进程多次后仍然存在错误,请联系 AWS支持

无法关闭索引

OpenSearch Service 支持 _closeAPI 仅适用于 OpenSearch 和 Elasticsearch 版本 7.4 及更高版本。如果您使用较老的版本,要从快照还原某个索引,则可以删除现有索引(在为快照重新建立索引之前或之后)。

客户端许可检查

Logstash 和 Beats 的原定设置发行版包括专有许可证检查,无法连接到 OpenSearch 的开源版本。请确保您使用这些客户端的 Apache 2.0(OSS)发行版与 OpenSearch Service。

请求限制

如果您收到持久 403 Request throttled due to too many requests429 Too Many Requests 错误,请考虑垂直扩展:如果有效负载会导致内存使用量超过 Java 堆的最大大小,Amazon OpenSearch Service 会限制请求。

无法通过 SSH 登录节点

您无法使用 SSH 访问 OpenSearch 集群中的任何节点,并且无法直接修改 opensearch.yml。相反,请使用控制台、AWS CLI 或开发工具包来配置您的域。您还可以使用 OpenSearch REST API 指定几个集群级设置。要了解更多信息,请参阅 Amazon OpenSearch Service API 参考Amazon OpenSearch 服务中支持的操作

如果需要更深入地了解集群的性能,则可以将错误日志和慢速日志发布到 CloudWatch

“对象的存储类无效”快照错误

OpenSearch Service 快照不支持 S3 Glacier 存储类。如果 S3 存储桶包含将对象转换为 S3 Glacier 存储类的生命周期规则,则在尝试列出快照时可能会遇到此错误。

如果需要从存储桶中还原快照,请从 S3 Glacier 还原对象,将对象复制到新存储桶,然后将新存储桶注册为快照存储库

主机标头无效

OpenSearch Service 要求客户端在请求标头中指定 Host。有效的 Host 值是没有 https:// 的域终端节点,例如:

Host: search-my-sample-domain-ih2lhn2ew2scurji.us-west-2.es.amazonaws.com

如果您在发出请求时收到 Invalid Host Header 错误,请检查您的客户端或代理是否将 OpenSearch Service 域端点(举例而言,不是其 IP 地址)包含在 Host 标头中。

M3 实例类型无效

OpenSearch Service 不支持在运行 OpenSearch 或 Elasticsearch 6.7 版或更高版本的现有域中添加或修改 M3 实例。您可以继续在 Elasticsearch 6.5 及更低版本中使用 M3 实例。

我们建议您选择更新的实例类型。对于运行 OpenSearch 或 Elasticsearch 6.7 及更高版本的域,适用以下限制:

  • 如果现有域不使用 M3 实例,则不能再对其进行更改。

  • 如果将现有域从 M3 实例类型更改为其他实例类型,则无法切换回去。

启用 UltraWarm 后,热查询停止工作

在域上启用 UltraWarm 时,如果没有预先存在的 search.max_buckets 设置时,OpenSearch Service 会自动将值设置为 10000 来防止内存繁重的查询使温节点饱和。如果您的热查询使用的存储桶超过 10,000 个,启用 UltraWarm 时,它们可能会停止工作。

由于 Amazon OpenSearch Service 的托管性质,您无法修改此设置,因此您需要打开支持案例来提高限制。限制增加不需要高级支持订阅。

升级后无法降级

就地升级是不可撤消的,但如果您联系 AWS Support,他们可以帮助您在新域上还原自动的升级前快照。例如,如果您将域从 Elasticsearch 5.6 升级到 6.4,AWS 支持可以帮助您在新的 Elasticsearch 5.6 域上还原升级前快照。如果您制作了原始域的手动快照,您可以自行执行该步骤

需要所有 AWS 区域 的域摘要

以下脚本使用 Amazon EC2 describe-regions AWS CLI 命令创建 OpenSearch Service 在其中可用的所有区域的列表。然后,它为每个区域调用 list-domain-names

for region in `aws ec2 describe-regions --output text | cut -f4` do echo "\nListing domains in region '$region':" aws opensearch list-domain-names --region $region --query 'DomainNames' done

您将对于每个区域接收以下输出:

Listing domains in region:'us-west-2'... [ { "DomainName": "sample-domain" } ]

OpenSearch Service 在其中不可用的区域返回“无法连接到端点 URL”。

使用 OpenSearch 控制面板时的浏览器错误

当您在 OpenSearch Service 域中使用控制面板查看数据时,浏览器将在 HTTP 响应对象中包括服务错误消息。您可以使用 Web 浏览器中常用的开发人员工具 (如 Chrome 中的开发者工具) 来查看基础服务错误和帮助您进行调试工作。

在 Chrome 中查看服务错误
  1. 从 Chrome 顶部菜单栏中,依次选择 ViewDeveloperDeveloper Tools

  2. 选择网络选项卡。

  3. 状态列中,选择状态为 500 的任何 HTTP 会话。

在 Firefox 中查看服务错误
  1. 从菜单中,依次选择工具Web 开发人员网络

  2. 选择任何状态为 500 的 HTTP 会话。

  3. 选择响应选项卡以查看服务响应。

节点分片和存储偏斜

节点分片偏斜是指集群中有一个或多个节点的分片数量明显多于其他节点的现象。节点存储偏斜是指集群中有一个或多个节点的存储数量(disk.indices)明显多于其他节点的现象。虽然这两种现象都可能是暂时的,例如在某个域替换了一个节点并且仍在为其分配分片时,但如果这两种现象持续存在,则应予以解决。

要识别这两种类型的偏斜,请运行 _cat/allocation API 操作并比较响应中的 shardsdisk.indices 条目:

shards | disk.indices | disk.used | disk.avail | disk.total | disk.percent | host | ip | node 264 | 465.3mb | 229.9mb | 1.4tb | 1.5tb | 0 | x.x.x.x | x.x.x.x | node1 115 | 7.9mb | 83.7mb | 49.1gb | 49.2gb | 0 | x.x.x.x | x.x.x.x | node2 264 | 465.3mb | 235.3mb | 1.4tb | 1.5tb | 0 | x.x.x.x | x.x.x.x | node3 116 | 7.9mb | 82.8mb | 49.1gb | 49.2gb | 0 | x.x.x.x | x.x.x.x | node4 115 | 8.4mb | 85mb | 49.1gb | 49.2gb | 0 | x.x.x.x | x.x.x.x | node5

虽然某些存储偏斜属于正常现象,但任何超过平均值 10% 的存储偏斜都属于显著。当分片分布出现偏斜时,CPU、网络和磁盘带宽使用情况也会出现偏斜。由于数据越多通常意味着索引和搜索操作越多,因此负载最大的节点往往也是资源最紧张的节点,而负载较轻的节点意味着容量未得到充分利用。

修复方法:将分片数量设置为数据节点数量的一定倍数,从而确保每个索引都跨数据节点均匀分布。

索引分片和存储偏斜

索引分片偏斜是指一个或多个节点拥有某个索引的分片数量比其他节点多的现象。索引存储偏斜是指一个或多个节点拥有某个索引的总存储容量的比例过大的现象。

索引偏斜比节点偏斜更难识别,因为它需要对 _cat/shards API 输出执行一些操作。如果集群或节点指标中存在偏斜的迹象,则应调查索引偏斜。以下是表明存在索引偏斜的常见迹象:

  • 数据节点的某个子集上出现 HTTP 429 错误

  • 跨数据节点的索引或搜索操作排队不均匀

  • 跨数据节点的 JVM 堆和/或 CPU 利用率不均匀

修复方法:将分片数量设置为数据节点数量的一定倍数,从而确保每个索引都跨数据节点均匀分布。如果您仍然看到索引存储或分片偏斜,则可能需要强制重新分配分片,每次执行 OpenSearch Service 域的蓝绿部署时都会出现这种情况。

在选择 VPC 访问后出现未授权的操作

当您使用 OpenSearch Service 控制台创建新域时,可以选择 VPC 访问权限或公有访问权限。如果您选择了 VPC 访问,OpenSearch Service 将查询 VPC 信息(如果您没有正确的权限,该操作将失败):

You are not authorized to perform this operation. (Service: AmazonEC2; Status Code: 403; Error Code: UnauthorizedOperation

要启用此查询,您必须有权访问 ec2:DescribeVpcsec2:DescribeSubnetsec2:DescribeSecurityGroups 操作。此要求仅适用于控制台。如果您使用 AWS CLI 来创建和配置一个使用 VPC 端点的域,则不需要访问这些操作。

在创建 VPC 域后卡在加载状态

在创建使用 VPC 访问权限的新域后,该域的配置状态可能会卡在正在加载。如果出现此问题,则很可能是对您的区域AWS Security Token Service禁用了AWS STS ()。

要将 VPC 终端节点添加到您的 VPC,OpenSearch Service 需要代入 AWSServiceRoleForAmazonOpenSearchService 角色。因此,必须启用 AWS STS 才能在给定区域中创建使用 VPC 访问权限的新域。要了解有关启用和禁用 AWS STS 的更多信息,请参阅 IAM 用户指南

拒绝对 OpenSearch API 的请求

为 OpenSearch API 引入基于标签的访问控制后,您可能会开始看到以前没有出现的访问被拒绝错误。这可能是因为您的一个或多个访问策略包含使用 ResourceTag 条件的 Deny,而且这些条件现在正在得到遵守。

例如,如果域具有标签 environment=production,则以下策略仅用于拒绝从配置 API 访问 CreateDomain 操作。尽管操作列表还包括 ESHttpPut,但拒绝声明不适用于该操作或任何其他 ESHttp* 操作。

{ "Version": "2012-10-17", "Statement": [{ "Action": [ "es:CreateDomain", "es:ESHttpPut" ], "Effect": "Deny", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:ResourceTag/environment": [ "production" ] } } }] }

通过增加对 OpenSearch HTTP 方法的标签支持,如上所示的基于 IAM 身份的策略将导致附加的用户被拒绝访问 ESHttpPut 操作。以前,在没有标签验证的情况下,附加的用户仍然能够发送 PUT 请求。

如果在将域更新为服务软件 R20220323 或更高版本后开始看到访问被拒绝错误,请检查基于身份的访问策略,看看是否是这种情况,并在必要时进行更新以允许访问。

无法从 Alpine Linux 连接

Alpine Linux 将 DNS 响应大小限制为 512 字节。当您尝试从 Alpine Linux 版本 3.18.0 或以下连接到 OpenSearch Service 域时,如果该域位于 VPC 中且具有超过 20 个节点,则 DNS 解析可能会失败。如果使用 Alpine Linux 3.18.0 以上版本,则应该能够解析超过 20 台主机。有关更多信息,请参阅 Alpine Linux 3.18.0 发布说明

如果您的域名位于 VPC 中,我们建议使用其他 Linux 分配(例如 Debian、Ubuntu、CentOS、Red Hat Enterprise Linux 或 Amazon Linux 2)来连接到该域。

Search Backpressure 请求过多

基于 CPU 的准入控制是一种守卫机制,根据节点的当前容量主动限制节点请求数量,包括流量自然增长和峰值。如果请求过多,拒绝时将返回 HTTP 429“请求过多”状态代码。此错误表示集群资源不足、资源密集型搜索请求或工作负载意外激增。

Search Backpressure 将提供拒绝原因,有助于微调资源密集型搜索请求。对于流量高峰,建议使用指数回退和抖动进行客户端重试。

在使用开发工具包时出现证书错误

由于AWS开发工具包使用的是来自计算机的 CA 证书,因此更改AWS服务器上的证书可能会导致您在尝试使用开发工具包时无法连接。虽然错误消息是不同的,但通常包含以下文本:

Failed to query OpenSearch ... SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

您可以通过使计算机的 CA 证书和操作系统保持最新来防止出现这些故障。如果您在公司环境中遇到这个问题而且未管理您自己的计算机,则可能需要请求管理员来协助处理更新过程。

以下列表显示了最低的操作系统和 Java 版本:

  • 已安装 2005 年 1 月版或更高版本更新的 Microsoft Windows 版本在其信任列表中至少包含一个必需 CA。

  • 带 Java for Mac OS X 10.4 版本 5 的 Mac OS X 10.4 (2007 年 2 月版)、Mac OS X 10.5 (2007 年 10 月版) 及更高版本在其信任列表中至少包含一个必需 CA。

  • Red Hat Enterprise Linux 5 (2007 年 3 月版)、6 和 7 以及 CentOS 5、6 和 7 在其默认信任 CA 列表中至少包含一个必需 CA。

  • Java 1.4.2_12(2006 年 5 月版)、5 Update 2(2005 年 3 月版)以及所有更高版本,包括 Java 6(2006 年 12 月版)、7 和 8 在其默认信任 CA 列表中至少包含一个必需 CA。

这三个证书颁发机构为:

  • Amazon Root CA 1

  • Starfield Services Root Certificate Authority – G2

  • Starfield Class 2 Certification Authority

可以从 Amazon Trust Services 获得来自前两个颁发机构的根证书,而使您的计算机保持最新是更直接的解决方案。要了解有关 ACM 提供的证书的更多信息,请参阅 AWS Certificate Manager 常见问题

注意

目前,us-east-1 区域内的 OpenSearch Service 域使用的是来自其他颁发机构的证书。我们计划近期将该区域更新为使用这些新的证书颁发机构。