为什么我的 Amazon OpenSearch Service 集群处于红色或黄色状态?

2 分钟阅读
0

我的 Amazon OpenSearch Service 集群处于红色或黄色集群状态。

简短描述

OpenSearch Service 控制台中的“监控”选项卡指示集群中运行状况最差的索引的状态。显示红色状态的集群状态并不意味着您的集群已关闭。此状态表示至少有一个主分片及其副本未分配给节点。如果您的集群状态显示黄色状态,则表示已将所有索引的主分片分配给集群中的节点。但是,有一个或多个副本分片未分配给任何节点。

**注意:**在您首先解决红色集群状态问题之前,请勿重新配置您的域。如果您尝试在域处于红色集群状态时重新配置该域,它可能会停留在“处理中”状态。有关集群停留在“处理中”状态的详细信息,请参阅为什么我的 OpenSearch Service 域停留在“处理中”状态?

由于以下原因,您的集群可能会进入红色状态:

  • 多个数据节点故障
  • 为索引使用损坏的分片或红色分片
  • JVM 内存压力或 CPU 利用率高
  • 磁盘空间不足或磁盘偏斜
  • 未分配的分片没有副本分片

**注意:**在某些情况下,您可以通过删除索引,然后从自动快照恢复索引来解决红色集群状态。

由于以下原因,您的集群可能会进入黄色运行状态:

  • 创建新的索引
  • 节点不足,无法分配给分片;或磁盘偏斜
  • JVM 内存压力高
  • 单节点故障
  • 已超过分片分配最大重试次数
  • 副本分片的数量大于数据节点的数量
  • 由于数据分片的重新定位,正在进行蓝色或绿色部署

注意:如果您的黄色集群状态问题无法自行解决,则可以通过更新索引设置或手动重新路由未分配的分片来解决状态问题。如果您的黄色集群状态问题无法自行解决,请找出根本原因并进行故障排除。要防止出现集群黄色状态,请应用集群运行状况最佳实践

解决方法

确定未分配分片的原因

要确定未分配的分片,请执行以下步骤:

1.列出未分配的分片:

$ curl -XGET 'domain-endpoint/_cat/shards?h=index,shard,prirep,state,unassigned.reason' | grep UNASSIGNED

2.检索分片未分配原因的详细信息:

$ curl -XGET 'domain-endpoint/_cluster/allocation/explain?pretty' -H 'Content-Type:application/json' -d'
{
     "index": "<index name>",
     "shard": <shardId>,
     "primary": <true or false>
}

3.(可选)对于红色集群状态,请删除相关索引并找出根本原因:

curl -XDELETE 'domain-endpoint/<index names>'

然后,确定可用的快照并从快照恢复索引

curl -XGET 'domain-endpoint/_snapshot?pretty'

对于黄色集群状态,请找出根本原因,以便您的分片得以分配。

对您的红色或黄色集群状态进行故障排除

节点不足,无法分配给分片

副本分片不会分配给与其主分片相同的节点。有副本分片的单节点集群初始化时,始终为黄色集群状态。单节点集群之所以以这种方式初始化,是因为 OpenSearch Service 没有其他可用的节点可以分配副本。

OpenSearch Service 版本 7.x 及更高版本的 cluster.max_shards_per_node 设置的默认限制也为“1,000”。最佳做法是将 cluster.max_shards_per_node 设置保持为默认值“1000”。如果您设置分片分配筛选器来控制 OpenSearch Service 分配分片的方式,则分片可能因没有足够的已筛选节点而处于未分配状态。为了防止出现这种节点短缺的情况,请增加节点数量。确保每个主分片的副本数量小于数据节点的数量。您也可以减少副本分片的数量。有关详细信息,请参阅调整 OpenSearch Service 域大小揭开 OpenSearch Service 分片分配的神秘面纱

磁盘空间不足或磁盘偏斜

如果磁盘空间不足,则您的集群可能会进入红色或黄色运行状态。在 OpenSearch Service 分配分片之前,必须有足够的磁盘空间来容纳分片。

要检查集群中每个节点有多少可用存储空间,请使用以下语法:

$ curl domain-endpoint/_cat/allocation?v

有关存储空间问题的详细信息,请参阅如何解决 OpenSearch Service 域中的存储空间不足问题?

磁盘偏斜过大也可能导致某些数据节点出现存储空间不足问题。如果决定重新分配任何分片,那么在分片分配期间,分片可能会变为未分配状态。要解决此问题,请参阅如果我的 OpenSearch Service 集群中的分片分配不均匀,如何重新平衡?

基于磁盘的分片分配设置也可能导致出现未分配的分片。例如,如果将 cluster.routing.allocation.disk.watermark.low 指标设置为 50 GB,则指定的磁盘空间量必须可用于分片分配。

要检查当前基于磁盘的分片分配设置,请使用以下语法:

$ curl -XGET domain-endpoint/_cluster/settings?include_defaults=true&flat_settings=true

要解决磁盘空间问题,请考虑以下方法:

  • 删除黄色和红色集群的所有不需要的索引。
  • 删除红色集群的红色索引
  • 纵向扩展 EBS 卷。
  • 添加更多数据节点。

**注意:**当集群处于红色运行状态时,请避免对集群进行任何配置更改。如果您尝试在域处于红色集群状态时重新配置该域,它可能会停留在“处理中”状态。

JVM 内存压力高

每次分片分配都使用 CPU、堆空间以及磁盘和网络资源。JVM 内存压力持续较高可能会导致分片分配失败。例如,如果 JVM 内存压力超过 95%,就会触发内存父级断路器。然后分配线程会被取消,从而让分片处于未分配状态。

要解决此问题,请先降低 JVM 内存压力级别。在降低 JVM 内存压力后,再参考以下提示进行操作,以便让您的集群恢复到绿色运行状态:

  • 从“5”或更高值增加默认分片重试值。
  • 停用并激活副本分片。
  • 手动重试未分配的分区。

增加重试值的示例 API:

PUT <index-name>/_settings
{
 "index.allocation.max_retries" : <value>
}

有关降低 JVM 内存压力的详细信息,请参阅如何解决 OpenSearch Service 集群上 JVM 内存压力高的问题?

节点故障

当您的集群遇到节点故障时,分配给节点的分片将变为未分配状态。当给定索引没有副本分片可用时,即使是单节点故障也可能导致红色运行状态。拥有两个副本分片和多可用区部署可以保护您的集群,以免在硬件故障期间出现数据丢失情况。

如果您的所有索引都有副本分片,则单节点故障可能会导致您的集群暂时进入黄色运行状态。如果您的集群暂时进入黄色运行状态,则一旦节点运行恢复正常,OpenSearch Service 就会自动恢复。或者,当将分片分配给新节点时,OpenSearch 服务就会恢复。

您可以通过检查您的 Amazon CloudWatch 指标来确认节点故障。有关排查节点故障的详细信息,请参阅故障集群节点

**注意:**为每个索引分配一个副本分片或使用专用的主节点并激活区域感知也是一种最佳做法。有关详细信息,请参阅 Elasticsearch 网站上的处理故障

已超过最大重试次数

在 OpenSearch Service 中,您的集群不得超过分片分配的最大时间限制 (5,000 ms) 或重试次数 (5)。如果您的集群已达到最大阈值,则必须手动触发分片分配。要手动触发分片分配,请停用并重新激活索引的副本分片。

集群上的配置更改也可能触发分片分配。有关分片分配的详细信息,请参阅 Elasticsearch 网站上的每个分片都应该有一个家

**注意:**如果您的集群工作负载很重,则手动触发分片分配就不是最佳做法。如果您从索引中删除所有副本,则该索引必须仅依赖主分片。当某个节点出现故障时,您的集群会进入红色运行状态,因为主分片未分配。

要停用副本分片,请将 number_of_replicas 值更新为“0”:

$ curl -XPUT 'domain-endpoint/<indexname>/_settings' -H 'Content-Type: application/json' -d'
{
     "index" : {
          "number_of_replicas" : 0
     }
}

另外,请检查以确保 index.auto_expand_replicas 设置设为“false”。当您的集群恢复到绿色状态时,您可以将 index.number_of_replicas 值设置回所需值,以触发副本分片的分配。如果分片分配成功,则您的集群将进入绿色运行状态。

集群运行状况最佳实践

如需解决您的黄色或红色集群状态问题,请考虑采用以下最佳做法:

  • AutomatedSnapshotFailure 设置推荐的 Amazon CloudWatch 警报。通过警报,当集群进入红色状态时,您可以确保有可用的快照来恢复索引。
  • 如果您的集群持续处于繁重的工作负载下,请扩展您的集群。有关扩展集群的详细信息,请参阅如何纵向扩展 OpenSearch Service 域?
  • 监控您的磁盘使用率、JVM 内存压力和 CPU 使用率,并确保它们不超过设置的阈值。有关详细信息,请参阅推荐的 CloudWatch 警报集群指标
  • 确保所有主分片都具有副本分片,以防止出现节点故障。

有关详细信息,请参阅 Amazon OpenSearch 服务的操作最佳实践

AWS 官方
AWS 官方已更新 1 年前