假设我在集群中有5个节点,并且在运行时必须删除2个节点。那么如何在不影响索引的情况下完成呢?
我有近10 Gbphour的连续数据流,并且不断对其建立索引。
重新平衡会对此有所帮助吗?提前致谢
Answers:
您可以通过告诉集群将其从分配中排除来停用节点。(从此处的文档)
curl -XPUT localhost:9200/_cluster/settings -H 'Content-Type: application/json' -d '{
"transient" :{
"cluster.routing.allocation.exclude._ip" : "10.0.0.1"
}
}';echo
这将导致Elasticsearch将该节点上的分片分配给其余节点,而群集的状态不会变为黄色或红色(即使您具有复制0)。
重新分配所有分片后,您可以关闭节点,然后在该处执行任何操作。完成后,包括要分配的节点,Elasticsearch将再次重新平衡分片。
curl -XGET 'http://ES_SERVER:9200/_cluster/health?pretty'
;如果没有要重定位的节点,则排除的节点必须已耗尽并且可以安全关闭。另一个选择是检查curl -XGET 'http://ES_SERVER:9200/_nodes/NODE_NAME/stats/indices?pretty'
节点上是否没有文档。
要从集群中删除elasticsearch节点,只需运行以下命令
curl -XPUT P.P.P.P:9200/_cluster/settings -H 'Content-Type: application/json' -d '{
"transient" :{
"cluster.routing.allocation.exclude._ip" : "X.X.X.X"
}
}';echo
这P.P.P.P
是主节点的专用IP,localhost
如果elasticsearch正在运行,您也可以使用localhost
。X.X.X.X
是要从群集中删除的节点的专用IP。
该命令将给出acknowledgement
true
是否接受删除该节点并开始数据重定位。检查数据重定位是否结束,并且节点上没有剩余的碎片,然后停止elasticsearch
进程和stop/terminate
实例。在本文中可以找到检查数据重定位和碎片的命令。