无法从 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 存储在该节点上的分片。
要真正从集群中删除节点,您需要将其从单播主机列表中删除。当然,您也可以将其关闭并将其保留在列表中,直到您下次需要重新启动集群为止,据我所知,这不会造成任何伤害。
我在三台不同的机器上用 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 存储在该节点上的分片。
要真正从集群中删除节点,您需要将其从单播主机列表中删除。当然,您也可以将其关闭并将其保留在列表中,直到您下次需要重新启动集群为止,据我所知,这不会造成任何伤害。