无法从 ES 集群中取消分配分片

Not able to disallocate shard from ES cluster

我在三台不同的机器上用 ES 运行ning 创建了一个 ES 集群。为了使它们成为集群,我在 elasticsearch.yml 配置文件中的所有 3 台机器中添加了如下单播配置。

discovery.zen.ping.unicast.hosts:[IP1, IP2, IP3] 

当我运行

curl -XGET localhost:9200/_cluster/health?pretty

我得到 No_of_nodes 作为 3。现在我想从集群中删除一个节点 所以在不更改任何配置文件的情况下,我 运行 下面的命令

curl -XPUT localhost:9200/_cluster/settings -d '{
"transient" :{
    "cluster.routing.allocation.exclude._ip" : "IP_adress_of_Node3"
}
}';

在此之后我 运行 第二个命令再次获取集群详细信息,预期输出是 NO_of_nodes 应该是 2 但结果它显示节点数 = 3 即使在排除之后节点。如果有人可以告诉我删除节点的步骤有什么问题,那将很有帮助。

谢谢

您发送到集群的命令cluster.routing.allocation.exclude._ip实际上不会从集群中删除节点,而是准备删除。它所做的是,它指示 Elasticsearch 将保存在该节点上的所有分片从该节点移开,并将它们存储在其他节点上。 这允许您在节点为空后将其删除,而不会导致 under-replication 存储在该节点上的分片。

要真正从集群中删除节点,您需要将其从单播主机列表中删除。当然,您也可以将其关闭并将其保留在列表中,直到您下次需要重新启动集群为止,据我所知,这不会造成任何伤害。