跳至内容

为什么我的 OpenSearch Service 域卡在“正在修改”状态?

2 分钟阅读
0

我想对卡在“正在修改”状态的 Amazon OpenSearch Service 集群进行故障排除。

解决方案

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时遇到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

在进行配置更改时,您的 OpenSearch Service 集群进入 Modifying(正在修改)状态。配置更改包括添加新数据节点、配置每秒进行读写操作的次数 (IOPS) 或设置 AWS Key Management Service (AWS KMS) 密钥。

**注意:**最佳做法是在提交配置更改之前检查您的集群是否支持蓝绿部署。在提交配置更改之前执行试运行

验证检查失败,并显示错误

当启动配置更改时,OpenSearch Service 会执行验证检查,以确保您的域符合升级条件。如果验证失败,您的域将保持在 Modifying(正在修改)状态。要解决此问题,请完成针对您的错误的故障排除步骤。然后,重试您的配置更改。

一组新的资源启动失败

如果同时提交多项配置更改,则集群可能会卡住。当提交配置更改时,请等到当前更改完成后再提交另一项配置更改。

验证阶段完成的验证检查在配置更改期间持续有效。如果您的配置通过了验证阶段,请不要修改您的域所需的资源。例如,不要停用用于加密的 AWS KMS 密钥。

向新数据节点集迁移分片未完成

当 OpenSearch Service 创建新资源后,分片将开始从旧的数据节点集迁移到新的数据节点集。此阶段可能需要几分钟到几小时,具体取决于集群的负载和大小。

要监控当前分片在旧节点和新节点之间的迁移情况,请运行以下 API 操作:

GET /DOMAIN_ENDPOINT/_cat/recovery?active_only=true

**注意:**请将 DOMAIN_ENDPOINT 替换为您的域端点。

如果您的 OpenSearch Service 集群处于红色集群状态,则分片迁移将失败。要对红色运行状态进行故障排除,请参阅为什么我的 Amazon OpenSearch Service 集群处于红色或黄色状态?

当集群过载时,无法分配资源来处理分片迁移。CPU 和 JVM 压力较高的集群可能会过载。要解决此问题,请监控 JVMMemoryPressure 和 CPUUtilization Amazon CloudWatch 指标

如果新节点集中缺少可用存储空间,则分片迁移可能会失败。在蓝绿部署过程中向集群添加新数据时,可能会出现此问题。当旧节点中存在 OpenSearch Service 无法分配给新节点的大分片时,也会出现此问题。

要释放存储空间,请使用删除索引 API 操作删除不再需要的旧索引。有关详细信息,请参阅 Elastic 网站上的 Delete index API(删除索引 API)

要查看分片的大小,请使用 cat 分片 API 操作。然后,要查看每个节点分配的分片数量,请使用 cat 分配 API 操作。如果新节点没有所需的全部分片,请使用集群分配说明 API 操作来确定原因。有关详细信息,请参阅 Elastic 网站上的 cat shards API(cat 分片 API)cat allocation API(cat 分配 API)Cluster allocation explain API(集群分配说明 API)

如果分片超过最大重试次数且仍未分配给节点,请重试分配。

默认情况下,集群会连续尝试分配一个分片最多 5 次。要增加分片的 index.allocation.max_retries 索引设置,请使用以下 API 操作:

PUT INDEX_NAME/_settings  
{
    "index.allocation.max_retries" : 10
}

**注意:**请将 INDEX_NAME 替换为您的索引名称。

内部硬件故障可能会导致旧数据节点上的分片在迁移期间卡住。根据您遇到的硬件问题,OpenSearch Service 会运行自我修复脚本以使节点恢复到正常运行状态。

当您将分片固定到一组较旧的节点上时,可能会出现分片重新定位卡住的情况。要确保未将分片固定到任何节点,请检查索引设置。或者,查看您的集群是否出现 ClusterBlockException 错误。

要识别无法分配给新节点的分片以及相应的索引设置,请运行以下命令:

GET /DOMAIN_ENDPOINT/_cluster/allocation/explain?pretty
GET /DOMAIN_ENDPOINT/INDEX_NAME/_settings?pretty

**注意:**请将 DOMAIN_ENDPOINTINDEX_NAME 替换为您的值。

检查索引设置输出中是否显示以下设置:

  • "index.routing.allocation.require._name": "NODE_NAME"
  • "index.blocks.write": true

如果您在索引设置中看到 "index.routing.allocation.require._name": "NODE_NAME",请运行以下命令以重置设置:

PUT /DOMAIN_ENDPOINT/INDEX_NAME/_settings  
{
    "index.routing.allocation.require._name": null
}

**注意:**请将 DOMAIN_ENDPOINTINDEX_NAME 替换为您的值。

有关详细信息,请参阅 Elastic 网站上的 Index-level shard allocation filtering(索引级分片分配筛选)

如果您在索引设置中看到 "index.blocks.write": true,则表明索引存在写入阻塞。此写入阻塞问题可能是由 ClusterBlockException 错误引起的。有关详细信息,请参阅如何解决 OpenSearch Service 中的 403“index_create_block_exception”或“cluster_block_exception”错误?

要监控配置更改的进度,请运行 DescribeDomainChangeProgress API 操作。

如果集群卡在 Modifying(正在修改)状态或域卡在 Deleting older resources(正在删除较旧的资源)状态超过 24 小时,请联系 AWS Support

AWS 官方已更新 6 个月前