ElasticSearch:未分配的分片,如何修复? [英] ElasticSearch: Unassigned Shards, how to fix?

查看:28
本文介绍了ElasticSearch:未分配的分片,如何修复?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个有 4 个节点的 ES 集群:

I have an ES cluster with 4 nodes:

number_of_replicas: 1
search01 - master: false, data: false
search02 - master: true, data: true
search03 - master: false, data: true
search04 - master: false, data: true

我不得不重新启动 search03,当它回来时,它重新加入集群没问题,但留下了 7 个未分配的碎片.

I had to restart search03, and when it came back, it rejoined the cluster no problem, but left 7 unassigned shards laying about.

{
  "cluster_name" : "tweedle",
  "status" : "yellow",
  "timed_out" : false,
  "number_of_nodes" : 4,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 15,
  "active_shards" : 23,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 7
}

现在我的集群处于黄色状态.解决此问题的最佳方法是什么?

Now my cluster is in yellow state. What is the best way to resolve this issue?

  • 删除(取消)分片?
  • 将分片移动到另一个节点?
  • 将分片分配给节点?
  • 将number_of_replicas"更新为 2?
  • 完全不同的东西?

有趣的是,当添加一个新索引时,该节点开始处理它并与集群的其余部分很好地配合,它只是留下了未分配的分片.

Interestingly, when a new index was added, that node started working on it and played nice with the rest of the cluster, it just left the unassigned shards laying about.

关注问题:我是不是做错了什么导致这种情况发生?我对重新启动节点时以这种方式运行的集群没有太大信心.

Follow on question: am I doing something wrong to cause this to happen in the first place? I don't have much confidence in a cluster that behaves this way when a node is restarted.

注意:如果您出于某种原因运行单节点集群,您可能只需要执行以下操作:

NOTE: If you're running a single node cluster for some reason, you might simply need to do the following:

curl -XPUT 'localhost:9200/_settings' -d '
{
    "index" : {
        "number_of_replicas" : 0
    }
}'

推荐答案

好的,我在 ES 支持的帮助下解决了这个问题.向所有节点(或您认为导致问题的节点)上的 API 发出以下命令:

OK, I've solved this with some help from ES support. Issue the following command to the API on all nodes (or the nodes you believe to be the cause of the problem):

curl -XPUT 'localhost:9200/<index>/_settings' 
    -d '{"index.routing.allocation.disable_allocation": false}'

其中 是您认为是罪魁祸首的索引.如果你不知道,就在所有节点上运行这个:

where <index> is the index you believe to be the culprit. If you have no idea, just run this on all nodes:

curl -XPUT 'localhost:9200/_settings' 
    -d '{"index.routing.allocation.disable_allocation": false}'

我还将这一行添加到我的 yaml 配置中,从那时起,服务器/服务的任何重新启动都没有问题.分片立即重新分配回来.

I also added this line to my yaml config and since then, any restarts of the server/service have been problem free. The shards re-allocated back immediately.

FWIW,要回答一个经常追捧的问题,请将 MAX_HEAP_SIZE 设置为 30G,除非您的机器内存小于 60G,在这种情况下,请将其设置为可用内存的一半.

FWIW, to answer an oft sought after question, set MAX_HEAP_SIZE to 30G unless your machine has less than 60G RAM, in which case set it to half the available memory.

这篇关于ElasticSearch:未分配的分片,如何修复?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆