

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

# 对亚马逊 OpenSearch 服务进行故障排除
<a name="handling-errors"></a>

本主题介绍如何识别和解决常见的 Amazon OpenSearch 服务问题。遇到问题时请先参阅本节中的信息，然后再联系 [AWS 支持](https://aws.amazon.com/premiumsupport/)。

## 无法访问 OpenSearch 仪表板
<a name="troubleshooting-dashboards-configure-anonymous-access"></a>

 OpenSearch 仪表板端点不支持已签名的请求。如果域的访问控制策略仅向特定 IAM 角色授予访问权限，并且您尚未配置 [Amazon Cognito 身份验证](cognito-auth.md)，在尝试访问 Dashboards 时您可能会收到以下错误：

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

如果您的 OpenSearch 服务域使用 VPC 访问权限，则可能不会收到此错误，但请求可能会超时。要了解有关更正此问题和您可以使用的各种配置选项的更多信息，请参阅 [控制对控制面板的访问](dashboards.md#dashboards-access)、[关于 VPC 域的访问策略](vpc.md#vpc-security) 和 [亚马逊 OpenSearch 服务中的身份和访问管理](ac.md)。

## 无法访问 VPC 域
<a name="troubleshooting-vpc-domain"></a>

请参阅[关于 VPC 域的访问策略](vpc.md#vpc-security)和[测试 VPC 域](vpc.md#vpc-test)。

## 集群处于只读状态
<a name="troubleshooting-read-only-cluster"></a>

与早期的 Elasticsearch 版本 OpenSearch 和 Elasticsearch 7 相比。 *x* 使用不同的系统进行群集协调。在此新系统中，如果集群发生法定数量损失，则在您采取操作之前集群将不可用。法定数量损失可能会有两种形式：
+ 如果您的集群使用专用主节点，在一半或更多的节点不可用时将出现法定数量损失。
+ 如果您的集群不使用专用主节点，在一半或更多的数据节点不可用时将出现法定数量损失。

如果出现法定人数损失并且您的集群有多个节点，S OpenSearch ervice 会恢复法定人数并将集群置于只读状态。你有两个选择：
+ 删除只读状态，并按原样使用集群。
+ [从快照还原集群或单独的索引](managedomains-snapshot-restore.md)。

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

```
GET _cat/health?v
```

如果集群运行状况为红色，我们建议从快照还原集群。您也可以参阅[红色集群状态](#handling-errors-red-cluster-status)，了解故障排除步骤。如果集群运行状况为绿色，使用以下请求确保所有预期索引存在：

```
GET _cat/indices?v
```

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

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

如果出现法定人数损失并且您的群集只有一个节点，S OpenSearch ervice 会替换该节点，并且*不会*将群集置于只读状态。否则，您具有相同的选项：原样使用集群或者从快照还原。

在这两种情况下， OpenSearch 服务都会向您发送两个事件[Health Dashboard](https://phd.aws.amazon.com/phd/home#/)。第一个事件告知您发生了法定数量损失。第二次发生在 S OpenSearch ervice 成功恢复法定人数之后。有关使用的更多信息 Health Dashboard，请参阅《[AWS Health 用户指南》](https://docs.aws.amazon.com/health/latest/ug/)。

## 红色集群状态
<a name="handling-errors-red-cluster-status"></a>

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

红色集群状态的最常见原因是[集群节点发生故障](#handling-errors-failed-cluster-nodes)，以及连续处理繁重负载造成 OpenSearch 进程崩溃。

**注意**  
OpenSearch 无论集群状态如何，服务都会将自动快照存储 14 天。因此，如果集群的红色状态持续超过两周，系统会删除最后一个运行正常的自动快照，您可能会永久丢失集群数据。如果您的 OpenSearch 服务域进入红色群集状态， 支持 可能会与您联系，询问您是想自己解决问题还是希望支持团队提供帮助。您可以[设置 CloudWatch 警报，](cloudwatch-alarms.md)以便在出现红色集群状态时通知您。

最终，红色分片会导致红色集群，而红色索引会导致红色分片。要识别导致红色群集状态的索引， OpenSearch 有一些帮助 APIs。
+ `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 服务域以使用更大的实例类型、更多实例或更多基于 EBS 的存储，并尝试重新创建有问题的索引。

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

### 自动修复红色集群
<a name="handling-errors-red-cluster-status-auto-recovery"></a>

如果您的集群状态持续显示红色超过一个小时，S OpenSearch ervice 会尝试通过重新路由未分配的分片或从过去的快照中恢复来自动修复该问题。

如果无法修复一个或多个红色索引，并且集群状态总共保持为红色 14 天，则只有在群集*至少满足以下条件之一*时，S OpenSearch ervice 才会采取进一步的措施：
+ 只有一个可用区
+ 没有专用主节点
+ 包含具爆发能力的实例类型（T2 或 T3）

此时，如果您的集群符合这些条件之一，S OpenSearch ervice 将在接下来的 7 天内向您发送每日[通知](managedomains-notifications.md)，说明如果您不修复这些索引，则所有未分配的分片都将被删除。如果您的集群状态在 21 天后仍为红色，S OpenSearch ervice 会删除所有红色索引上未分配的分片（存储和计算）。您将在 OpenSearch 服务控制台的 “**通知**” 面板中收到每个事件的通知。有关更多信息，请参阅 [集群运行状况事件](monitoring-events.md#monitoring-events-cluster-health)。

### 从连续处理繁重负载恢复
<a name="handling-errors-red-cluster-status-heavy-processing-load"></a>

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


| 相关指标 | 说明 | 恢复 | 
| --- | --- | --- | 
| JVMMemory压力 |  指定用于集群中所有数据节点的 Java 堆的百分比。查看此指标的统计数据**最大值**，并试图尽可能地减少内存压力下降，因为 Java 垃圾收集器无法回收充足的内存。这种模式可能由于复杂的查询或大型数据字段而产生。 x86 实例类型使用 Concurrent Mark Sweep (CMS) 垃圾回收器，后者随应用程序线程一起运行以保持较短的暂停。如果 CMS 在正常回收期间无法回收足够的内存，会触发完整垃圾回收，这可能会导致应用程序暂停时间较长并影响集群稳定性。 基于 ARM 的 Graviton 实例类型使用 Garbage-First (G1) 垃圾回收器，它与 CMS 类似，但使用额外的短暂停和堆碎片整理来进一步减少对完整垃圾回收的需求。 无论哪种情况，如果内存使用量继续增长到垃圾收集器在完全垃圾收集期间可以回收的容量之外，则会因内存不足错误而 OpenSearch 崩溃。对于所有实例类型，一个很好的经验法则是将使用率保持为低于 80%。 `_nodes/stats/jvm` API 提供了一个有用的 JVM 统计数据、内存池使用情况和垃圾收集信息摘要： <pre>GET domain-endpoint/_nodes/stats/jvm?pretty</pre>  |  为 JVM 设置内存断路器。有关更多信息，请参阅 [JVM OutOfMemoryError](#handling-errors-jvm_out_of_memory_error)。 如果问题仍然存在，请删除不必要索引、减少对域的请求的数量或降低其复杂性、添加实例或使用更大的实例类型。  | 
| CPUUtilization | 指定用于集群中各数据节点的 CPU 资源的百分比。查看此指标的 Maximum 统计数据，并查找连续模式的高使用率。 | 添加数据节点或增加现有数据节点的实例类型的大小。 | 
| 节点 | 指定集群中的节点数。查看此指标的最小值统计数据。这个值会在该服务为集群部署新的实例队列时波动。 | 添加数据节点。 | 

## 黄色集群状态
<a name="handling-errors-yellow-cluster-status"></a>

黄色集群状态意味着所有索引的主分片分配给集群中的节点，但是至少有一个索引的副本分片不是如此。由于 Ser OpenSearch vice 无法向其他节点分配副本，因此单节点集群始终以黄色群集状态进行初始化。要获得绿色集群状态，请增加节点数。有关更多信息，请参阅 [调整亚马逊 OpenSearch 服务域名的大小](sizing-domains.md)。

创建新索引后或节点出现故障后，多节点群集可能会短暂显示黄色群集状态。当在集群中 OpenSearch 复制数据时，此状态会自行解决。[磁盘空间不足](#handling-errors-watermark)也可能导致黄色群集状态；只有节点具有容纳副本分片的磁盘空间时，群集才能分发副本分片。

## ClusterBlockException
<a name="troubleshooting-cluster-block"></a>

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

### 缺少可用存储空间
<a name="handling-errors-watermark"></a>

如果集群中一个或多个节点的存储空间小于 1) 20% 的可用存储空间或 2) 20 GiB 存储空间的最小值，则添加文档和创建索引等基本写入操作可能会开始失败。 [计算存储要求](bp-storage.md)提供了 S OpenSearch ervice 如何使用磁盘空间的摘要。

为避免出现问题，请在 OpenSearch 服务控制台中监控`FreeStorageSpace`指标，并[创建 CloudWatch 警报](cloudwatch-alarms.md)，以便在低于特定阈值时`FreeStorageSpace`触发。 `GET /_cat/allocation?v`还提供了分片分配和磁盘使用情况的有用摘要。要解决与存储空间不足相关的问题，请扩展您的 OpenSearch 服务域以使用更大的实例类型、更多实例或更多基于 EBS 的存储。

### JVM 内存压力过高
<a name="handling-errors-block-disks"></a>

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

当 Pr **JVMMemoryes** sure 指标在五分钟内恢复到 88% 或更低时，保护将被禁用，对集群的写入操作也将解除阻止。

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

要减少集群的流量并解决 JVM 内存压力过高的问题，请尝试以下一项或多项操作：
+ 扩展域，使每个节点的最大堆大小为 32GB。
+ 通过删除旧的或未使用的索引来减少分片的数量。
+ 使用 `POST index-name/_cache/clear?fielddata=true` API 操作清除数据缓存。请注意，清除缓存可能会中断正在进行的查询。

一般而言，为了避免将来出现 JVM 内存压力过高的问题，遵循以下最佳实践：
+ 避免在文本字段上进行聚合，或者将您的索引的[映射类型](https://opensearch.org/docs/latest/opensearch/mappings/#dynamic-mapping)更改为 `keyword`。
+ 通过[选择正确的分片数量](bp-sharding.md)优化搜索和索引请求。
+ 设置索引状态管理（ISM）策略以定期[移除未使用的索引](bp.md#bp-stability-remove)。

## 迁移到带待机功能的多可用区时出错
<a name="troubleshooting-multi-az-standby"></a>

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

### 从无备用域的域迁移到有备用域的域期间，创建索引、索引模板或 ISM 策略
<a name="index"></a>

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

### 数据副本数量错误
<a name="data-copy"></a>

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

## JVM OutOfMemoryError
<a name="handling-errors-jvm_out_of_memory_error"></a>

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


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

## 集群节点失败
<a name="handling-errors-failed-cluster-nodes"></a>

Amazon EC2 实例可能会遇到意外终止并重新启动。通常， OpenSearch 服务会为您重新启动节点。但是， OpenSearch 集群中的一个或多个节点可能会停留在发生故障状态。

要检查此情况，请在 OpenSearch 服务控制台上打开您的域名控制面板。转到 **Cluster health（集群运行状况）**选项卡，然后找到 **Total nodes（总节点）**指标。查看所报告的节点数是否少于您为集群配置的数量。如果指标显示一个或多个节点出现故障已超过 1 天，请联系 [AWS 支持](https://aws.amazon.com/premiumsupport/)。

您也可以[设置 CloudWatch 警报，](cloudwatch-alarms.md)以便在出现此问题时通知您。

**注意**  
**总节点**指标在更改集群配置和服务例行维护期间不准确。此行为是预期的。该指标会报告正确数量的集群节点。要了解更多信息，请参阅[在 Amazon OpenSearch 服务中进行配置更改](managedomains-configuration-changes.md)。

为了保护您的集群免受节点意外终止和重启的影响，请为 OpenSearch 服务域中的每个索引至少创建一个副本。

## 超过最大分片限制
<a name="troubleshooting-shard-limit"></a>

OpenSearch 以及 7. *x 个*版本的 Elasticsearch 的默认设置为每个节点不超过 1,000 个分片。 OpenSearch如果请求（例如创建新索引）会导致您超过此限制，/Elasticsearch 会抛出错误。如果您遇到此错误，则有多个选项：
+ 将更多数据节点添加到集群。
+ 增加 `_cluster/settings/cluster.max_shards_per_node` 设置。
+ 使用 [\$1shrink API](supported-operations.md#version_api_notes-shrink) 来减少节点上的分片数。

## 域卡在 Processing（正在处理）状态
<a name="stuck-in-processing"></a>

当您的 OpenSearch 服务域处于[配置更改](managedomains-configuration-changes.md)过程中时，它会进入 “处理中” 状态。当您启动配置更改时，在 OpenSearch 服务创建新环境时，域状态将更改为 “处理中”。在新环境中，S OpenSearch ervice 会启动一组新的适用节点（例如数据、主节点或 UltraWarm）。迁移完成后，较旧节点将被终止。

如果出现以下任一情况，集群可能会卡在“Processing（正在处理）”状态：
+ 一组新的数据节点启动失败。
+ 将分片迁移到新的数据节点集不成功。
+ 验证检查因错误而失败。

有关每种情况下的详细解决步骤，请参阅[为什么我的 Amazon S OpenSearch ervice 域名处于 “处理中” 状态？](https://aws.amazon.com/premiumsupport/knowledge-center/opensearch-domain-stuck-processing/) 。

## EBS 可爆发容量余额低
<a name="handling-errors-low-ebs-burst"></a>

OpenSearch 当您的一个通用型 (SSD) 卷上的 EBS 突发余额低于 70% 时，服务会向您发送控制台通知，如果余额低于 20%，则会向您发送后续通知。要解决此问题，您可以纵向扩展集群，也可以减少读取和写入 IOPS，从而增加可爆发容量余额。对于具有 gp3 卷类型的域以及具有卷大小超过 1000 GiB 的 gp2 卷的域，突增余额保持在 0。有关更多信息，请参阅[通用型 SSD 卷（gp2）](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html#EBSVolumeTypes_gp2)。您可以使用该`BurstBalance` CloudWatch 指标监控 EBS 突发平衡。

## 在卷调整大小期间，EBS 指标会增加
<a name="troubleshooting-ebs-volume-update-spikes"></a>

在修改 Amazon Elastic Block Store 卷大小时，您可能会发现多种 EBS 指标（例如 `Write Throughput`、`Write Throughput Micro bursting`、`Disk Queue Depth` 和 `IOPS`）出现暂时性增长。这是调整大小操作期间的预期行为，通常会持续几秒钟。然而，持续时间可能因所修改的卷大小而有所不同。

为避免延迟问题和请求被拒绝，请仅在集群运行正常且网络流量较低时执行 EBS 卷调整大小操作。

## 无法启用审核日志
<a name="troubleshooting-audit-logs-error"></a>

尝试使用 OpenSearch 服务控制台启用审核日志发布时，可能会遇到以下错误：

为 CloudWatch 日志组指定的资源访问策略未向 Amazon S OpenSearch ervice 授予足够的权限来创建日志流。请检查资源访问策略。

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

1. 等待几分钟。

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

1. 选择 **Select existing group（选择现有组）**。

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

1. 在访问策略部分，选择 **Select existing policy（选择现有策略）**。

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

1. 请选择**启用**。

如果在重复该进程多次后仍然存在错误，请联系 [AWS 支持](https://aws.amazon.com/premiumsupport/)。

## 无法关闭索引
<a name="troubleshooting-close-api"></a>

OpenSearch 服务仅支持 Elasticsearch 7.4 OpenSearch 及更高版本的 [https://opensearch.org/docs/latest/api-reference/index-apis/close-index/](https://opensearch.org/docs/latest/api-reference/index-apis/close-index/)API。如果您使用较老的版本，要从快照还原某个索引，则可以删除现有索引（在为快照重新建立索引之前或之后）。

## 客户端许可检查
<a name="troubleshooting-license"></a>

Logstash 和 Beats 的默认发行版包括专有许可检查，并且无法连接到的开源版本。 OpenSearch确保将这些客户端的 Apache 2.0 (OSS) 发行版与 OpenSearch 服务一起使用。

## 请求限制
<a name="troubleshooting-throttle-api"></a>

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

## 无法通过 SSH 登录节点
<a name="troubleshooting-ssh"></a>

您不能使用 SSH 访问 OpenSearch 集群中的任何节点，也不能直接修改`opensearch.yml`。而是使用控制台 AWS CLI、或 SDKs 来配置您的域。您也可以使用 OpenSearch REST APIs 指定一些集群级别的设置。要了解更多信息，请参阅[亚马逊 OpenSearch 服务 API 参考](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/Welcome.html)和[Amazon OpenSearch 服务中支持的操作](supported-operations.md)。

如果您需要更深入地了解集群的性能，则可以[将错误日志和慢速日志发布到 CloudWatch](createdomain-configure-slow-logs.md)。

## “对象的存储类无效”快照错误
<a name="troubleshooting-glacier-snapshots"></a>

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

如果需要从存储桶中还原快照，请从 Amazon Glacier 还原对象，将对象复制到新存储桶，然后将新存储桶[注册为快照存储库](managedomains-snapshot-registerdirectory.md)。

## 主机标头无效
<a name="troubleshooting-host-header"></a>

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

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

如果您在发出请求时收到`Invalid Host Header`错误，请检查您的客户端或代理是否在`Host`标头中包含 OpenSearch 服务域终端节点（而不是其 IP 地址）。

## M3 实例类型无效
<a name="m3-instance-types"></a>

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

我们建议您选择更新的实例类型。对于运行 OpenSearch 或 Elasticsearch 6.7 或更高版本的域名，以下限制适用：
+ 如果现有域不使用 M3 实例，则不能再对其进行更改。
+ 如果将现有域从 M3 实例类型更改为其他实例类型，则无法切换回去。

## 启用后，热门查询停止工作 UltraWarm
<a name="troubleshooting-uw"></a>

在域 UltraWarm 上启用时，如果该设置没有预先存在的替代项，Serv OpenSearch ice 会自动将该值`search.max_buckets`设置为，`10000`以防止内存密集型查询使热节点饱和。如果您的热门查询使用的存储桶超过 10,000 个，则在您启用 UltraWarm后，它们可能会停止工作。

由于亚马逊 OpenSearch 服务的托管性质，您无法修改此设置，因此您需要提交支持案例以提高限制。限制增加不需要高级支持订阅。

## 升级后无法降级
<a name="troubleshooting-upgrade-snapshot"></a>

[就地升级](version-migration.md)是不可撤消的，但如果您联系 [AWS Support](https://aws.amazon.com/premiumsupport/)，他们可以帮助您在新域上还原自动的升级前快照。例如，如果您将域从 Elasticsearch 5.6 升级到 6.4，Support 可以 AWS 帮助您在新 Elasticsearch 5.6 域上恢复升级前的快照。如果您制作了原始域的手动快照，您可以[自行执行该步骤](managedomains-snapshots.md)。

## 需要所有人的域名摘要 AWS 区域
<a name="troubleshooting-domain-summary"></a>

以下脚本使用 Amazon EC2 [describe-](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-regions.html) regions AWS CLI 命令创建可 OpenSearch 提供服务的所有区域的列表。然后它会调[list-domain-names](https://docs.aws.amazon.com/cli/latest/reference/es/list-domain-names.html)用每个区域：

```
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 服务不可用的区域会返回 “无法连接到终端节点 URL”。

## 使用 OpenSearch 仪表板时出现浏览器错误
<a name="troubleshooting-dashboards-debug-browser-errors"></a>

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

**在 Chrome 中查看服务错误**

1. 从 Chrome 顶部菜单栏中，依次选择 **View**、**Developer**、**Developer Tools**。

1. 选择**网络**选项卡。

1. 在**状态**列中，选择状态为 500 的任何 HTTP 会话。

**在 Firefox 中查看服务错误**

1. 从菜单中，依次选择**工具**、**Web 开发人员**和**网络**。

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

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

## 节点分片和存储偏斜
<a name="handling-errors-node-skew"></a>

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

要识别这两种类型的偏斜，请运行 [\$1cat/allocation](https://opensearch.org/docs/latest/opensearch/rest-api/cat/cat-allocation/) API 操作并比较响应中的 `shards` 和 `disk.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、网络和磁盘带宽使用情况也会出现偏斜。由于数据越多通常意味着索引和搜索操作越多，因此负载最大的节点往往也是资源最紧张的节点，而负载较轻的节点意味着容量未得到充分利用。

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

## 索引分片和存储偏斜
<a name="handling-errors-index-skew"></a>

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

索引偏斜比节点偏斜更难识别，因为它需要对 [\$1cat/shards](https://opensearch.org/docs/latest/opensearch/rest-api/cat/cat-shards/) API 输出执行一些操作。如果集群或节点指标中存在偏斜的迹象，则应调查索引偏斜。以下是表明存在索引偏斜的常见迹象：
+ 数据节点的某个子集上出现 HTTP 429 错误
+ 跨数据节点的索引或搜索操作排队不均匀
+ 数据节点之间的 JVM 堆 and/or CPU 利用率不均衡

**修复方法**：将分片数量设置为数据节点数量的一定倍数，从而确保每个索引都跨数据节点均匀分布。如果您仍然看到索引存储或分片偏差，则可能需要强制分片重新分配，服务域的每次[蓝/绿](managedomains-configuration-changes.md)部署都会发生这种情况。 OpenSearch 

## 在选择 VPC 访问后出现未授权的操作
<a name="vpc-permissions"></a>

使用 OpenSearch 服务控制台创建新域时，您可以选择选择 VPC 或公共访问。如果您选择 **VPC 访问**，则 OpenSearch 服务会查询 VPC 信息，如果您没有适当的权限，则服务会失败：

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

要启用此查询，您必须有权访问 `ec2:DescribeVpcs`、`ec2:DescribeSubnets` 和 `ec2:DescribeSecurityGroups` 操作。此要求仅适用于控制台。如果您使用 AWS CLI 创建和配置带有 VPC 终端节点的域，则无需访问这些操作。

## 在创建 VPC 域后卡在加载状态
<a name="vpc-sts"></a>

在创建使用 VPC 访问权限的新域后，该域的**配置状态**可能会卡在**正在加载**。如果出现此问题，则说明您所在地区可能已*禁用 AWS Security Token Service * (AWS STS)。

要将 VPC 终端节点添加到您的 VPC， OpenSearch 服务需要代入`AWSServiceRoleForAmazonOpenSearchService`角色。因此， AWS STS 必须启用才能创建在给定区域中使用 VPC 访问的新域。要了解有关启用和禁用的更多信息 AWS STS，请参阅 [IAM 用户指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)。

## 对 OpenSearch API 的请求被拒绝
<a name="troubleshooting-tbac"></a>

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

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

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

****  

```
{
  "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 连接
<a name="troubleshooting-alpine"></a>

Alpine Linux 将 DNS 响应大小限制为 512 字节。如果您尝试从 Alpine Linux 3.18.0 或更低版本连接到您的 OpenSearch 服务域，则如果该域位于 VPC 中且节点超过 20 个，则 DNS 解析可能会失败。如果使用 Alpine Linux 3.18.0 以上版本，则应该能够解析超过 20 台主机。有关更多信息，请参阅 [Alpine Linux 3.18.0 发布说明](https://alpinelinux.org/posts/Alpine-3.18.0-released.html)。

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

## Search Backpressure 请求过多
<a name="troubleshooting-search-backpressure"></a>

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

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

## 在使用开发工具包时出现证书错误
<a name="troubleshooting-certificates"></a>

由于 AWS SDKs 使用计算机上的 CA 证书，因此当您尝试使用 SDK 时，更改 AWS 服务器上的证书可能会导致连接失败。虽然错误消息是不同的，但通常包含以下文本：

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

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

以下列表显示了最低的操作系统和 Java 版本：
+ 安装了 2005 年 1 月或之后更新的微软 Windows 版本的信任列表 CAs 中至少包含一个必需的版本。
+ 带有 Java 的 Mac OS X 10.4 适用于 Mac OS X 10.4 版本 5（2007 年 2 月）、Mac OS X 10.5（2007 年 10 月）及更高版本的信任列表 CAs中至少包含一个必需的版本。
+ 红帽企业 Linux 5（2007 年 3 月）、6 和 7 以及 CentOS 5、6 和 7 的默认可信 CA 列表 CAs 中都至少包含一个必需的。
+ Java 1.4.2\$112（2006 年 5 月）、5 Update 2（2005 年 3 月）以及所有更高版本，包括 Java 6（2006 年 12 月）、7 和 8，其默认可信 CA 列表 CAs 中至少包含一个必需的。

这三个证书颁发机构为：
+ Amazon Root CA 1
+ Starfield Services Root Certificate Authority – G2
+ Starfield Class 2 Certification Authority

来自前两个机构的根证书可从 [Amazon Trust Services](https://www.amazontrust.com/repository/) 获得，但保留计算机 up-to-date是更直接的解决方案。要了解有关 ACM 提供的证书的更多信息，请参阅。[AWS Certificate Manager FAQs](https://aws.amazon.com/certificate-manager/faqs/#certificates)

**注意**  
目前，us-east-1 区域的 OpenSearch 服务域使用来自不同机构的证书。我们计划近期将该区域更新为使用这些新的证书颁发机构。

## 自定义插件安装因版本兼容性问题而失败
<a name="troubleshooting-custom-plugins"></a>

**问题**：由于插件和正在运行的 OpenSearch 实例之间的版本不匹配，插件安装失败。系统返回以下错误：

```
PluginValidationFailureReason : The provided plugin could not be loaded.
```

**原因**：该插件是为 OpenSearch \$1 编译的*\$1MAJOR\$1*。 \$1*\$1MINOR\$1.\$1PATCH\$1*，但您的环境正在运行 OpenSearch \$1 *\$1MAJOR\$1*。 \$1 *\$1MINOR\$1* .0。 OpenSearch 出于稳定性和安全性的考虑，需要在插件和核心 OpenSearch安装之间进行精确的版本匹配。

**可能的修复方法**：使用 OpenSearch 版本 \$1 构建插件*\$1MAJOR\$1*。 \$1 *\$1MINOR\$1* .0 以匹配您的集群版本。

**验证和更新版本 OpenSearch**

1. 使用集群的 API 或控制面板，以运行以下命令。将 *default placeholder values* 替换为您自己的信息。

   **API 请求：**

   ```
   curl -X GET your-opensearch-endpoint/
   ```

   **控制面板中的开发工具控制台：**

   ```
   GET /
   ```

   此命令返回的信息格式如下。

   ```
   {
     "name": "node-id",
     "cluster_name": "account-id:domain-name",
     "cluster_uuid": "cluster-uuid",
     "version": {
       "distribution": "opensearch",
       "number": "2.17.0",
       "build_type": "tar",
       "build_hash": "unknown",
       "build_date": "2024-12-17T11:00:09.799828091Z",
       "build_snapshot": false,
       "lucene_version": "9.11.1",
       "minimum_wire_compatibility_version": "7.10.0",
       "minimum_index_compatibility_version": "7.0.0"
     },
     "tagline": "The OpenSearch Project: https://opensearch.org/"
   }
   ```

1. 如果版本号不是 \$1 *\$1MAJOR\$1*。 \$1 *\$1MINOR\$1* .0，通过执行以下操作来重建插件：

   1. 更新插件`descriptor.properties`以指定版本 \$1 *\$1MAJOR\$1*。 \$1 *\$1MINOR\$1* .0。

   1. 使用适用于项目类型的命令重新构建插件。

   1. 使用新构建的 `.zip` 文件运行 [update-package](https://docs.aws.amazon.com/cli/latest/reference/opensearch/update-package.html) 命令。

   1. 运行 [associate-package](https://docs.aws.amazon.com/cli/latest/reference/opensearch/associate-package.html) 命令，将最新插件版本与之前步骤中执行 `update-package` 命令创建的版本相关联。