ElasticSearch:未分配的碎片,如何解决?

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

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个未分配的碎片。

{

"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

}

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

  • 删除(取消)分片?
  • 将分片移动到另一个节点?
  • 将分片分配给节点?
  • 将“ number_of_replicas”更新为2?
  • 还有其他东西吗?

有趣的是,当添加新索引时,该节点开始在该节点上工作并与集群的其余部分配合良好,它只是留下了未分配的碎片。

追问一个问题:我是不是做错了什么导致该事情首先发生?我对重启节点时以这种方式运行的群集没有太大的信心。

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

curl -XPUT 'localhost:9200/_settings' -d '

{

"index" : {

"number_of_replicas" : 0

}

}'

回答:

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

curl -XPUT 'localhost:9200/<index>/_settings' \

-d '{"index.routing.allocation.disable_allocation": false}'

<index>您认为是罪魁祸首的索引在哪里?如果您不知道,只需在所有节点上运行此命令:

curl -XPUT 'localhost:9200/_settings' \

-d '{"index.routing.allocation.disable_allocation": false}'

我还将这一行添加到我的yaml配置中,此后,服务器/服务的任何重新启动都没有问题。碎片立即重新分配。

FWIW为回答经常遇到的问题,除非您的计算机的RAM小于60G,否则将MAX_HEAP_SIZE设置为30G,在这种情况下,请将其设置为可用内存的一半。

参考资料

  • 分片分配意识

以上是 ElasticSearch:未分配的碎片,如何解决? 的全部内容, 来源链接: utcz.com/qa/411669.html

回到顶部