如何停止/关闭elasticsearch节点?

时间:2013-06-19 12:44:54

标签: elasticsearch

我想使用新配置重新启动elasticsearch节点。优雅地关闭节点的最佳方法是什么?

杀死进程是关闭服务器的最佳方法,还是有一些神奇的URL我可以用来关闭节点?

11 个答案:

答案 0 :(得分:120)

更新了答案。

_shutdown API已在elasticsearch 2.x中删除。

一些选项:

  • 在您的终端(基本上是开发模式)中,只需输入“Ctrl-C”

  • 如果您以守护进程(-d)启动它,请找到PID并终止进程:SIGTERM将彻底关闭Elasticsearch(kill -15 PID

    < / LI>
  • 如果作为服务运行,请运行service elasticsearch stop

    之类的内容

以前的答案。它现在已从1.6推荐使用。

呀。见admin cluster nodes shutdown documentation

基本上:

# Shutdown local node
$ curl -XPOST 'http://localhost:9200/_cluster/nodes/_local/_shutdown'

# Shutdown all nodes in the cluster
$ curl -XPOST 'http://localhost:9200/_shutdown'

答案 1 :(得分:14)

如果您只想应用新配置,则无需关闭它。

$ sudo service elasticsearch restart

但是如果你想要关闭它:

$ sudo service elasticsearch stop

OR

$ sudo systemctl stop elasticsearch.service

$ sudo systemctl restart elasticsearch.service

泊坞:

docker restart <elasticsearch-container-name or id>

答案 2 :(得分:5)

这适用于OSX。

pkill -f elasticsearch

答案 3 :(得分:4)

停止服务并终止守护进程确实是关闭节点的正确方法。但是,如果要删除节点进行维护,则不建议直接执行此操作。事实上,如果您没有副本,则会丢失数据。

当您直接关闭节点时,Elasticsearch将等待1米(默认时间)以使其重新联机。如果没有,那么它将开始将该节点的分片分配给浪费大量IO的其他节点。

一种典型的方法是通过发出以下命令暂时禁用分片分配:

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}

现在,当您取下节点时,ES不会尝试将该节点的分片分配给其他节点,您可以执行维护活动,然后一旦节点启动,您可以再次启用分片分配:

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "all"
  }
}

来源:https://www.elastic.co/guide/en/elasticsearch/reference/5.5/restart-upgrade.html

如果您没有所有索引的副本,则执行此类活动将导致某些索引停机。在这种情况下,更简洁的方法是在关闭节点之前将所有分片迁移到其他节点:

PUT _cluster/settings
{
  "transient" : {
    "cluster.routing.allocation.exclude._ip" : "10.0.0.1"
  }
}

这会将所有分片从10.0.0.1移动到其他节点(根据数据需要时间)。一切都完成后,您可以终止节点,执行维护并将其重新联机。这是一个较慢的操作,如果你有副本,则不需要。

(而不是_ip,_id,带通配符的_name可以正常工作。)

更多信息:https://www.elastic.co/guide/en/elasticsearch/reference/5.5/allocation-filtering.html

其他答案解释了如何杀死进程。

答案 4 :(得分:3)

Elasticsearch的Head插件为Elasticsearch管理提供了一个很棒的基于Web的前端,包括关闭节点。它也可以运行任何Elasticsearch命令。

答案 5 :(得分:1)

如果您想查找实例的PID并终止进程,假设该节点正在侦听端口9300(默认端口),您可以运行以下命令:

kill -9  $(netstat -nlpt | grep 9300 | cut -d ' ' -f 58 | cut -d '/' -f 1)

您可能需要使用上述代码中的数字,例如58和1

答案 6 :(得分:1)

如果您无法在Windows机器上找到正在运行elasticsearch的进程,您可以尝试在控制台中运行:

keys =  ['a','b','c']
current_level = code # Top level
for key in keys:
    current_level = current_level.get(key) # Descent next level
print current_level # Value of the 'c' dict

查找端口elasticsearch正在运行,默认为netstat -a -n -o 。最后一列是使用该端口的进程的PID。您可以在控制台

中使用简单命令关闭它
9200

答案 7 :(得分:1)

使用以下命令来了解已在运行的节点的pid。

  

curl -XGET&#39; http://localhost:9200/_nodes/process&#39;

我花了一个小时才找到杀死节点的方法,最后在终端窗口中使用此命令后可以这样做。

答案 8 :(得分:1)

对于使用 Homebrew (Brew) 安装和管理服务的 Mac 用户:

列出您的 Brew 服务:

brew services

用服务做点什么:

brew services start elasticsearch-full
brew services restart elasticsearch-full
brew services stop elasticsearch-full

答案 9 :(得分:0)

如果您在本地主机上运行节点,请使用“ brew service stop elasticsearch”

我在iOS本地主机上运行elasticsearch。

答案 10 :(得分:0)

考虑到您有3个节点。

准备集群

export ES_HOST=localhost:9200

# Disable shard allocation
curl -X PUT "$ES_HOST/_cluster/settings" -H 'Content-Type: application/json' -d'
{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}
'

# Stop non-essential indexing and perform a synced flush
curl -X POST "$ES_HOST/_flush/synced"

在每个节点中停止Elasticsearch服务

# check nodes
export ES_HOST=localhost:9200
curl -X GET "$ES_HOST/_cat/nodes"

# node 1
systemctl stop elasticsearch.service

# node 2
systemctl stop elasticsearch.service

# node 3
systemctl stop elasticsearch.service

再次重启集群

# start
systemctl start elasticsearch.service

# Reenable shard allocation once the node has joined the cluster
curl -X PUT "$ES_HOST/_cluster/settings" -H 'Content-Type: application/json' -d'
{
  "persistent": {
    "cluster.routing.allocation.enable": null
  }
}
'

在Elasticseach 6.5上测试

来源:

  1. https://www.elastic.co/guide/en/elasticsearch/reference/6.5/stopping-elasticsearch.html
  2. https://www.elastic.co/guide/en/elasticsearch/reference/6.5/rolling-upgrades.html