ElasticSearch:意外地在同一服务器中启动2个实例

时间:2013-09-20 19:08:48

标签: lucene elasticsearch

所以我不小心在同一台机器上启动了2个ElasticSearch实例。一个使用端口9200,另一个使用端口9201.这意味着有2个集群节点,每个节点具有相同的名称,每个节点具有每个索引的总分片数的1/2。

如果我杀死其中一个实例,我现在最终得到一个具有1/2分片的实例。

如何解决此问题?我想只有一个包含所有分片的实例(就像以前一样)

1 个答案:

答案 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,碎片移动需要一段时间 - 可能长达一个小时甚至更长,所以请耐心等待。在完成所有操作之前,请不要关闭实例/节点。

就是这样!