2013-06-19 215 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

其他答案解釋瞭如何殺死一個進程。