我想使用新配置重新启动elasticsearch节点。正常关闭节点的最佳方法是什么?
关闭进程是关闭服务器的最佳方法,还是我可以使用一些神奇的URL关闭节点?
Answers:
更新的答案。
_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'
如果您只想应用新配置,则无需将其关闭。
$ 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>
停止服务并终止守护程序确实是关闭节点的正确方法。但是,如果要拆卸节点进行维护,建议不要直接这样做。实际上,如果您没有副本,则将丢失数据。
当您直接关闭节点时,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
其他答案也说明了如何终止进程。
Elasticsearch的Head插件为Elasticsearch管理(包括关闭节点)提供了一个基于Web的出色前端。它也可以运行任何Elasticsearch命令。
使用以下命令可以知道已经运行的节点的pid。
curl -XGET'http :// localhost:9200 / _nodes / process '
我花了一个小时才找到杀死节点的方法,并且在终端窗口中使用此命令后终于可以做到这一点。
万一您想查找实例的PID并终止进程,假设节点正在侦听端口9300(默认端口),则可以运行以下命令:
kill -9 $(netstat -nlpt | grep 9200 | cut -d ' ' -f 58 | cut -d '/' -f 1)
您可能需要使用上述代码中的数字,例如58和1
考虑到您有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"
# 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上测试
资源:
如果您在本地主机上运行节点,请尝试使用 brew service stop elasticsearch
我在iOS本地主机上运行elasticsearch。