2013-06-19 212 views

回答

114

已更新的答案。

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

一些选项:

  • 在你的终端(DEV模式基本上),只需键入 “CTRL-C”

  • 如果你开始它作为一个守护进程(-d)找到PID,并杀死过程:SIGTERM将关闭Elasticsearch下来干净(kill -15 PID

  • 如果作为服务运行,像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' 
+2

因此,从elasticsearch 1.6(根据提供的链接)可以看出,shutdown API已被弃用。什么是推荐的关闭新方法? – Mike

+2

我认为它已被弃用,因为您现在可以将其作为服务安装并运行服务停止elasticsearch。如果你只是为了测试而运行它,那么点击CTRL + C就完成了。 – dadoonet

+0

“gracefull”=>您可以使用重定向API移动碎片https://www.elastic.co/guide/en/elasticsearch/reference/2.4/cluster-reroute.html –

3

元首插件Elasticsearch提供Elasticsearch管理一个伟大的基于Web的前端,包括关停节点。它也可以运行任何Elasticsearch命令。

1

以防万一你想找到实例的PID,并杀死进程,假设节点侦听端口9300(默认端口),你可以运行下面的命令:

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

您可能必须使用上述代码中的数字(例如58和1)

5

如果您只是想应用新的配置,则不需要关闭它。

$ sudo service elasticsearch restart

但是,如果你想关机也无妨:

$ sudo service elasticsearch stop

+0

问题是关于停止服务,不重新启动它。 –

+0

doenst需要关闭服务器以应用新的配置。它不是一个答案,它是他的问题的解决方案:) –

0

如果你不能找到什么进程正在运行的Windows机器上elasticsearch你可以尝试在控制台中运行:

netstat -a -n -o 

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

taskkill /PID here_goes_PID /F 
0

使用以下命令可知道已在运行的节点的pid。

卷曲-XGET“http://localhost:9200/_nodes/process

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

0

这适用于我在OSX上。

pkill -f elasticsearch 
0

内泊坞答案Elasticsearch:

只要停止泊坞窗容器。它似乎停止正常,因为它记录:

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

停止服务,并杀死守护进程确实是正确的方法来关闭一个节点。但是,如果您想取下节点进行维护,则不建议直接执行此操作。事实上,如果你没有副本,你会丢失数据。

当您直接关闭某个节点时,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/en/elasticsearch/reference/5.5/allocation-filtering.html

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