如何停止/关闭Elasticsearch节点?


85

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

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

Answers:


126

更新的答案。

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

一些选项:

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

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

  • 如果作为服务运行,请运行以下命令service elasticsearch stop

先前的答案。现在从1.6开始不推荐使用。

是的 请参阅管理群集节点关闭文档

基本上:

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

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

2
因此,似乎从Elasticsearch 1.6开始(根据提供的链接),不推荐使用shutdown API。建议的新关闭方式是什么?
迈克

2
我认为它已被弃用,因为您现在可以将其作为服务安装并运行service stop elasticsearch。如果仅运行它以进行测试,则按CTRL + C即可完成。
dadoonet

“ gracefull” =>您可以在使用重新路由APIelastic.co/guide/en/elasticsearch/reference/2.4/…
Thomas Decaux

23

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

$ sudo service elasticsearch restart

但是,如果您仍要关闭它:

$ sudo service elasticsearch stop

要么

$ sudo systemctl stop elasticsearch.service

$ sudo systemctl restart elasticsearch.service

码头工人:

docker restart <elasticsearch-container-name or id>


1
问题是关于停止服务,而不是重新启动它。
让·弗朗索瓦·法布尔

1
确实需要关闭服务器以应用新配置。它不是答案,而是解决他的问题的方法:)
Ijaz Ahmad Khan

10

这对我在OSX上有效。

pkill -f elasticsearch

7

停止服务并终止守护程序确实是关闭节点的正确方法。但是,如果要拆卸节点进行维护,建议不要直接这样做。实际上,如果您没有副本,则将丢失数据。

当您直接关闭节点时,Elasticsearch将等待1m(默认时间)使其恢复联机。如果没有,它将开始从该节点向其他浪费大量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/zh-CN/elasticsearch/reference/5.5/allocation-filtering.html

其他答案也说明了如何终止进程。




2

如果找不到在Windows计算机上运行Elasticsearch的进程,则可以尝试在控制台中运行:

netstat -a -n -o

查找端口elasticsearch是否正在运行,默认为9200。最后一列是使用该端口的进程的PID。您可以在控制台中使用简单命令将其关闭

taskkill /PID here_goes_PID /F

1

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

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

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


默认端口是
9200。– slhck

0

Docker内部对Elasticsearch的回答:

只需停止docker容器即可。它似乎正常停止,因为它记录了:

[INFO ][o.e.n.Node               ] [elastic] stopping ...

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/zh-CN/elasticsearch/reference/6.5/stopping-elasticsearch.html
  2. https://www.elastic.co/guide/zh-CN/elasticsearch/reference/6.5/rolling-upgrades.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.