我有一个有 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 }
现在我的集群处于黄色状态。解决此问题的最佳方法是什么?
有趣的是,当添加一个新索引时,该节点开始处理它并与集群的其余部分配合得很好,它只是留下了未分配的分片。
跟随问题:我做错了什么导致这种情况首先发生吗?我对重新启动节点时以这种方式运行的集群没有多大信心。
注意: 如果您出于某种原因正在运行单节点集群,您可能只需要执行以下操作:
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>您认为是罪魁祸首的指数在哪里。如果您不知道,只需在所有节点上运行它:
<index>
curl -XPUT 'localhost:9200/_settings' \ -d '{"index.routing.allocation.disable_allocation": false}'
我还将这一行添加到我的 yaml 配置中,从那时起,服务器/服务的任何重新启动都没有问题。分片立即重新分配回来。
FWIW,要回答一个经常受到追捧的问题,请将 MAX_HEAP_SIZE 设置为 30G,除非您的机器的 RAM 小于 60G,在这种情况下,请将其设置为可用内存的一半。