所以我不小心在同一台机器上启动了2个ElasticSearch实例。一个使用端口9200,另一个使用端口9201.这意味着有2个集群节点,每个节点具有相同的名称,每个节点具有每个索引的总分片数的1/2。
如果我杀死其中一个实例,我现在最终得到一个具有1/2分片的实例。
如何解决此问题?我想只有一个包含所有分片的实例(就像以前一样)
答案 0 :(得分:1)
所以...有一个干净的方法来解决这个问题。虽然我必须说ElasticSearch文档非常令人困惑(所有这些流行语如集群和zen发现都让我大吃一惊!)
1) 现在,如果您有2个实例,一个在端口9200中,另一个在9201中。并且您希望所有分片都在9200中。
运行此命令以禁用9201实例中的分配。如果您希望此更改不是永久性的,则可以将持久性更改为瞬态。我会坚持下去,所以这不会再发生了。
curl -XPUT localhost:9201/_cluster/settings -d '{
"persistent" : {
"cluster.routing.allocation.disable_allocation" : true
}
}'
2)现在,运行命令将9201实例中的所有分片移动到9200。
curl -XPOST 'localhost:9200/_cluster/reroute' -d '{
"commands" : [ {
"move" :
{
"index" : "<NAME OF INDEX HERE>", "shard" : <SHARD NUMBER HERE>,
"from_node" : "<ID OF 9201 node>", "to_node" : "<ID of 9200 node>"
}
}
]
}'
您需要为9201实例中的每个分片运行此命令(您要删除的分区)。
如果您有ElasticSearch头,该分片将为紫色,并且将具有“REALLOCATING”状态。如果您有大量数据,请说&gt; 1 GB,碎片移动需要一段时间 - 可能长达一个小时甚至更长,所以请耐心等待。在完成所有操作之前,请不要关闭实例/节点。
就是这样!