如何在运行时从elasticsearch集群中删除节点而不停机

时间:2013-06-24 05:22:10

标签: elasticsearch

假设我在群集中有5个节点,我必须在运行时删除2个节点。那么如何在不影响指数的情况下实现呢?

我有接近10 Gbphour的连续数据流,这些数据会被连续编入索引。

重新平衡会对此有所帮助吗?提前致谢

3 个答案:

答案 0 :(得分:110)

您可以通过告知群集将其从分配中排除来停用该节点。 (来自文档here

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将再次重新平衡分片。

答案 1 :(得分:9)

要从群集中删除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,您也可以使用localhostX.X.X.X是要从群集中删除的节点的私有IP。

如果接受删除节点并且数据重定位将开始,则此命令将给acknowledgement true。检查数据重定位是否结束且节点上是否还有任何分片,而不是停止elasticsearch进程和stop/terminate实例。 可以在this article上找到检查数据重定位和分片的命令。

答案 2 :(得分:-1)

您始终可以终止进程以在运行时删除节点。 Elasticsearch集群将自动在其余节点中重新平衡。但是,这里有一些缺点。

  1. 您的设置中有多少个副本?
  2. 您的设置中有多少个分片?
  3. 如果分片中的数据太大(每小时10GB),那么重新平衡可能需要很长时间。
  4. 如果您有足够的副本,则群集状态将变为黄色。在此状态下,您可以在此期间进行索引和搜索。然而,碎片最初会被取消分配,然后慢慢地平衡节点。