所以我不小心在同一台机器上启动了 2 个 ElasticSearch 实例。一个使用端口 9200,另一个使用端口 9201。这意味着有 2 个集群节点,每个具有相同的名称,每个具有每个索引总分片的 1/2。
如果我杀死其中一个实例,我现在会得到一个拥有 1/2 碎片的实例。
我该如何解决这个问题?我只想拥有 1 个包含所有碎片的实例(就像以前一样)
所以我不小心在同一台机器上启动了 2 个 ElasticSearch 实例。一个使用端口 9200,另一个使用端口 9201。这意味着有 2 个集群节点,每个具有相同的名称,每个具有每个索引总分片的 1/2。
如果我杀死其中一个实例,我现在会得到一个拥有 1/2 碎片的实例。
我该如何解决这个问题?我只想拥有 1 个包含所有碎片的实例(就像以前一样)
所以......有一个干净的方法来解决这个问题。尽管我必须说 ElasticSearch 文档非常令人困惑(所有这些流行词,如集群和禅宗发现都让我大吃一惊!)
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”状态。如果您有大量数据,例如 > 1 GB,则移动分片需要一段时间 - 可能长达一个小时甚至更长时间,所以请耐心等待。在一切都完成移动之前,不要关闭实例/节点。
就是这样!