跳至内容

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

2 分钟阅读
0

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

简短描述

OpenSearch Service 控制台中的 Monitoring(监控)选项卡显示集群中运行状况最差的索引的状态。当 OpenSearch Service 未分配一个或多个主分片及其副本时,会出现红色状态。当 OpenSearch Service 已分配所有主分片,但未分配一个或多个副本分片时,会出现黄色状态

**重要事项:**红色集群状态表示部分数据不可用。尽管黄色状态并不表示数据丢失,但黄色状态表明您的集群缺乏完整的冗余。如果节点出现故障,则可能会导致数据丢失。

解决方法

**重要事项:**要重新配置域,必须首先解决红色集群状态问题。如果您尝试重新配置处于红色状态的域,则它可能会卡滞在“正在修改”状态

确定分片未分配的原因

要确定并解决分片未分配的根本原因,请使用 AWSSupport-TroubleshootOpenSearchRedYellowCluster 运行手册。有关说明,请参阅 AWSSupport-TroubleshootOpenSearchRedYellowCluster 中的“说明”。

或者,要手动识别未分配的分片,请运行以下命令:

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

**注意:**请将 domain-endpoint 替换为您的域端点。在输出中,记下分片 ID。

然后,运行以下命令以获取有关分片未分配原因的详细信息:

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

**注意:**请将 domain-endpoint 替换为您的域端点,将 index-name 替换为您的索引名称,将 shardID 替换为未分配分片的 ID。如果分片为主分片,请将 false 替换为 true

对红色或黄色状态进行故障排除

要确定集群状态为黄色或红色的原因,请执行以下操作:

  • 查看以下 Amazon CloudWatch 指标ClusterStatus.yellowClusterStatus.redShards.unassignedCPUUtilizationJVMMemoryPressureFreeStorageSpace

  • 运行以下查询以识别受影响的索引:

    GET /_cat/indices?v&health=yellow
    GET /_cat/indices?v&health=red
  • 运行以下查询以了解所有索引中分片未分配的原因:

    GET /_cluster/allocation/explain

    **注意:**此命令的输出将显示整个集群中未分配的分片及其分配状态的全面视图。您可以利用这些信息来大致了解分配问题。

要解决红色集群状态,请运行以下命令删除红色索引:

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

**注意:**请将 domain-endpoint 替换为您的域端点,将 index-names 替换为您的索引名称。

然后,从快照恢复索引

如果黄色集群状态未自行恢复,请利用分片未分配的相关原因信息来解决根本原因。

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

主分片和副本分片必须位于不同的节点上。因此,具有副本分片的单节点集群在初始化时始终为黄色状态,因为 OpenSearch Service 无法分配副本分片。

OpenSearch Service 7.x 及更高版本的 cluster.max_shards_per_node 的默认配额为 1000。最佳做法是使用 cluster.max_shards_per_node 的默认值。有关详细信息,请参阅 OpenSearch 网站上的 Cluster-level shard, block, and task settings(集群级分片、块和任务设置)

如果您设置了分片分配筛选条件,则分片可能会因没有足够的筛选节点而变为未分配状态。有关分片分配筛选条件的详细信息,请参阅 OpenSearch 网站上的 Index-level index settings(索引级索引设置)

要避免此问题,请执行以下操作:

有关详细信息,请参阅调整 OpenSearch Service 域大小Demystifying OpenSearch Service shard allocation(揭秘 OpenSearch Service 分片分配)

存储空间问题

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

要检查集群中每个节点有多少可用存储空间,请运行以下命令:

curl domain-endpoint/_cat/allocation?v

**注意:**请将 domain-endpoint 替换为您的域端点。

如果分片分配不均匀,则可能会出现某些节点空间耗尽,而其他节点仍有容量的情况。这可能会导致分片重新分配期间出现问题,致使 OpenSearch Service 在重新平衡过程中无法分配新的分片。

要检查您的分片分配设置,请运行以下命令:

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

**注意:**请将 domain-endpoint 替换为您的域端点。

最佳做法是定期监控磁盘空间并主动解决磁盘偏斜问题,以解决集群运行状况问题。

有关详细信息,请参阅如何解决我的 OpenSearch Service 域中的存储空间不足问题?以及如果我的 OpenSearch Service 集群中的分片分配不均匀,如何重新平衡?

JVM 内存压力高

分片分配是一个资源密集型过程,会消耗 CPU、堆空间、磁盘和网络资源。持续较高的 Java 虚拟机 (JVM) 内存压力可能会干扰成功的分片分配。要解决此问题,请对高 JVM 内存压力进行故障排除。降低 JVM 内存压力后,执行以下操作,以将集群恢复到绿色状态:

  • 运行以下命令以增加默认分片重试值:
    PUT /index-name/_settings
    {
      "index.allocation.max_retries": 10
    }
    
    **注意:**请将 index-name 替换为您的索引名称,将 10 替换为您的重试值。
  • 将分片重试值更改为 0 可停用副本分片。然后,将其更改为正值可重新激活分片。

节点故障

节点故障会导致为其分配的分片变为未分配状态。如果未配置副本分片,则即使是单个节点故障,也可能会导致红色运行状态。但是,当您为索引配置了副本分片时,节点故障通常只会导致暂时的黄色状态。这种黄色状态会在 OpenSearch Service 自动恢复过程时出现。当故障节点恢复正常运行状态,或 OpenSearch Service 将分片重新分配到其他节点时,黄色状态将结束。

要防范硬件故障,请执行以下操作:

有关如何识别节点故障的详细信息,请参阅故障集群节点

反复出现黄色集群运行状态

您的集群可能会因以下原因频繁处于黄色运行状态:

  • 当节点暂时出现故障且副本分片处于未分配状态时,出现暂时性节点故障或重启。
    **注意:**当节点恢复或 OpenSearch Service 重新平衡分片时,集群可能会自行恢复。
  • 由于资源限制或配置问题,您超出了分片分配失败或重试配额。
  • 资源使用率较高的集群上会执行计划维护、备份作业或出现高负载峰值,这会导致节点波动或拒绝分片分配。
  • 定期升级或自动创建的索引会创建超出集群容量的新副本。

要防止并解决反复出现的黄色运行状态,请执行以下操作:

  • 对于单节点集群,请确保所有索引都有 0 个副本。
    **注意:**对于单节点集群,OpenSearch Service 会自动管理和配置系统索引,例如 opendistro_security。您无法修改系统索引的设置。
  • 对于多节点集群,请至少保留一个副本节点。要提高冗余,请增加您的节点数量和副本数量。
  • 配置多可用区域以实现高可用性和容错能力。
    **注意:**如果分片分配失败,请验证您的集群、可用区和备用配置中的节点数量是否符合您的集群需求。
  • 如果分片无法获取内存锁,请增加 index.allocation.max_retries 值。
  • 为避免资源耗尽,请在高负载期间纵向扩展您的域
  • 要主动监控资源需求的变化,请为 ClusterStatus.yellowClusterStatus.redJVMMemoryPressureAutomatedSnapshotFailureFreeStorageSpace 指标创建 CloudWatch 警报

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