Elasticsearch未分配分片异常处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch未分配分片异常处理相关的知识,希望对你有一定的参考价值。

参考技术A

由于服务器磁盘满了,所有服务未能正常运行,检查了一下es,发现有个索引以出现黄色警告,显示有两个分片未被分配。
通过命令 systemctl status elasticsearch 查看es运行状态,看到以下异常:

网上搜到很多解决方法是调用一下接口,但仍然无法解决。

后来在 亚马逊 上找到了解决方案,以下是操作步骤:

由于节点或网络故障,您的 Elasticsearch 群集会进入黄色状态。如果集群中的节点因内部硬件问题出现故障,则现有节点将被新节点替换。此替换是 Amazon ES 的自动检测功能。但是,在某些情况下,故障节点中的副本分片尚未分配。如果先前使用的资源尚未释放,则副本分片将保留未分配状态。在此期间,领导节点进行了五次分配副本分片尝试。如果领导节点的五次分配副本分片尝试都失败,则您的集群将进入红色或黄色运行状态。
要识别哪些索引导致集群进入黄色状态,请使用以下查询:

然后,使用以下查询来识别集群未分配分片的根本原因:

要使 Elasticsearch 集群恢复到绿色状态,请增加每个黄色索引的最大重试次数:

运行此 API 调用时,领导节点将重试您的集群上指定索引的分片分配。

注意: 当您增加最大重试设置时,分片不会总是自动分配。您可能需要手动分配分片。

重要提示: 如果 Elasticsearch 集群负载高,请不要使用此方法。从索引中删除所有副本时,索引必须且仅能依赖于主分片。如果节点出现故障,您的集群则可能因为主分片尚未分配而进入 红色群集状态 。

要更改副本数量,请执行以下步骤:

Elasticsearch 有未分配的分片 详细思路

Elasticsearch 有未分配的分片通常意味着某些节点无法分配索引分片,这可能会导致搜索和写入的延迟或失败。以下是排查和处理 Elasticsearch 未分配分片的步骤:

  1. 使用 Elasticsearch API 检查集群状态:使用以下 API 获取集群的状态信息:
GET /_cluster/health

如果有未分配的分片,该 API 将返回一个黄色或红色的集群状态。黄色表示分片分配正常,但不是所有的主分片都已经分配。红色表示有一个或多个主分片未分配。

  1. 检查日志:查看 Elasticsearch 节点的日志,以了解是否有任何错误或警告。在节点日志中搜索 “unassigned” 关键字,可以找到未分配的分片的原因,例如节点故障、索引设置不正确等。
  2. 使用 Elasticsearch API 确定未分配的分片:使用以下 API 获取未分配的分片列表:
GET /_cat/shards/<index>?h=index,shard,prirep,state,unassigned.reason

其中 ​​<index>​​ 是要检查的索引名称。这个 API 将返回所有未分配的分片以及原因,例如节点故障、索引设置不正确等。

  1. 解决未分配的分片:一旦确定了未分配的分片,可以采取以下措施:
  • 如果是节点故障造成的未分配,可以修复节点或添加新节点。
  • 如果是索引设置不正确造成的未分配,可以更改索引设置以便正确分配分片。
  • 如果是其他原因造成的未分配,可以根据日志中提供的信息采取相应的措施。
  1. 重新平衡分片:一旦解决了未分配的分片,可以使用以下 API 强制重新平衡分片:
POST /_cluster/reroute?retry_failed=true

这个 API 将强制 Elasticsearch 重新分配所有未分配的分片,并将它们分配给适当的节点。

通过以上步骤,您可以成功排查和处理 Elasticsearch 未分配分片的问题。

以上是关于Elasticsearch未分配分片异常处理的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearches 集群健康值 红色 red 分片 未分配

AWS 上的 Elasticsearch:如何修复未分配的分片?

elasticsearch 产生未分配分片的原因(es官网)

es Unassigned Shards 排查思路

es 基于磁盘的shard分配参数

记一次ElasticSearch重启之后shard未分配问题的解决