Wie kann ich einen Elasticsearch-Knoten stoppen / herunterfahren?

85

Ich möchte einen Elasticsearch-Knoten mit einer neuen Konfiguration neu starten. Was ist der beste Weg, um einen Knoten ordnungsgemäß herunterzufahren?

Ist das Beenden des Prozesses der beste Weg, um den Server herunterzufahren, oder gibt es eine magische URL, mit der ich den Knoten herunterfahren kann?

Michael_Scharf
quelle

Antworten:

126

Antwort aktualisiert.

_shutdown API wurde in elasticsearch 2.x entfernt.

Einige Optionen:

  • Geben Sie in Ihrem Terminal (im Grunde Dev-Modus) einfach "Strg-C" ein.

  • Wenn Sie es als Daemon ( -d) gestartet haben, suchen Sie die PID und SIGTERMbeenden Sie den Prozess: Elasticsearch wird sauber heruntergefahren ( kill -15 PID)

  • Wenn Sie als Dienst ausgeführt werden, führen Sie Folgendes aus service elasticsearch stop:

Vorherige Antwort. Es ist jetzt von 1.6 veraltet.

Ja. Siehe Dokumentation zum Herunterfahren von Admin-Clusterknoten

Grundsätzlich:

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

# Shutdown all nodes in the cluster
$ curl -XPOST 'http://localhost:9200/_shutdown'
dadoonet
quelle
2
Es scheint also, dass die Shutdown-API ab elasticsearch 1.6 (gemäß dem angegebenen Link) veraltet ist. Was ist der empfohlene neue Weg zum Herunterfahren?
Mike
2
Ich denke, es ist veraltet, weil Sie es jetzt als Dienst installieren und Service Stop Elasticsearch ausführen können. Wenn Sie es nur für Tests ausführen, drücken Sie STRG + C und Sie sind fertig.
Dadoonet
„gracefull“ => können Sie Ihre Scherbe bewegen , bevor mit dem reroute API elastic.co/guide/en/elasticsearch/reference/2.4/...
Thomas Decaux
23

Wenn Sie nur eine neue Konfiguration anwenden möchten, müssen Sie diese nicht herunterfahren.

$ sudo service elasticsearch restart

Aber wenn Sie es trotzdem herunterfahren möchten:

$ sudo service elasticsearch stop

ODER

$ sudo systemctl stop elasticsearch.service

$ sudo systemctl restart elasticsearch.service

Docker:

docker restart <elasticsearch-container-name or id>

Ijaz Ahmad Khan
quelle
1
Die Frage ist, den Dienst zu stoppen und nicht neu zu starten.
Jean-François Fabre
1
Sie müssen den Server nicht herunterfahren, um eine neue Konfiguration anzuwenden. Es ist keine Antwort, es ist eine Lösung für sein Problem :)
Ijaz Ahmad Khan
10

Dies funktioniert bei mir unter OSX.

pkill -f elasticsearch
mnishiguchi
quelle
7

Das Beenden des Dienstes und das Beenden des Dämons sind in der Tat die richtigen Methoden, um einen Knoten herunterzufahren. Es wird jedoch nicht empfohlen, dies direkt zu tun, wenn Sie einen Knoten zur Wartung herunterfahren möchten. Wenn Sie keine Replikate haben, gehen Daten verloren.

Wenn Sie einen Knoten direkt herunterfahren, wartet Elasticsearch 1 m (Standardzeit), bis er wieder online ist. Wenn dies nicht der Fall ist, werden die Shards von diesem Knoten anderen Knoten zugewiesen, wodurch viel E / A verschwendet wird.

Ein typischer Ansatz wäre, die Shard-Zuweisung vorübergehend zu deaktivieren, indem Folgendes ausgegeben wird:

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

Wenn Sie jetzt einen Knoten herunterfahren, versucht ES nicht, Shard von diesem Knoten anderen Knoten zuzuweisen, und Sie können Ihre Wartungsaktivität ausführen. Sobald der Knoten aktiv ist, können Sie die Shard-Zuweisung erneut aktivieren:

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

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

Wenn Sie nicht für alle Ihre Indizes Replikate haben, führt die Ausführung dieser Art von Aktivität bei einigen Indizes zu Ausfallzeiten. In diesem Fall wäre es sauberer, alle Shards auf andere Knoten zu migrieren, bevor der Knoten heruntergefahren wird:

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

Dadurch werden alle Shards von 10.0.0.1anderen Knoten verschoben (dies dauert je nach Daten einige Zeit). Sobald alles erledigt ist, können Sie den Knoten beenden, Wartungsarbeiten durchführen und ihn wieder online schalten. Dies ist ein langsamerer Vorgang und nicht erforderlich, wenn Sie über Replikate verfügen.

(Anstelle von _ip, _id funktioniert _name mit Platzhaltern einwandfrei.)

Weitere Informationen: https://www.elastic.co/guide/en/elasticsearch/reference/5.5/allocation-filtering.html

Andere Antworten haben erklärt, wie man einen Prozess beendet.

SureshS
quelle
4

Das Head-Plugin für Elasticsearch bietet ein großartiges webbasiertes Front-End für die Elasticsearch-Verwaltung, einschließlich des Herunterfahrens von Knoten. Es können auch beliebige Elasticsearch-Befehle ausgeführt werden.

Serge Meunier
quelle
3

Verwenden Sie den folgenden Befehl, um die PID des bereits ausgeführten Knotens zu ermitteln.

curl -XGET ' http: // localhost: 9200 / _nodes / process '

Ich brauchte eine Stunde, um herauszufinden, wie ich den Knoten töten kann, und konnte es schließlich tun, nachdem ich diesen Befehl im Terminalfenster verwendet hatte.

Akshit Bhatia
quelle
2

Wenn Sie nicht finden können, welcher Prozess elasticsearch auf einem Windows-Computer ausführt, können Sie versuchen, ihn in der Konsole auszuführen:

netstat -a -n -o

Suchen Sie nach Port Elasticsearch wird ausgeführt, Standard ist 9200. Die letzte Spalte enthält die PID für den Prozess, der diesen Port verwendet. Sie können es mit einem einfachen Befehl in der Konsole herunterfahren

taskkill /PID here_goes_PID /F
Augustas
quelle
1

Nur für den Fall, dass Sie die PID der Instanz ermitteln und den Prozess beenden möchten, können Sie den folgenden Befehl ausführen, vorausgesetzt, der Knoten überwacht Port 9300 (den Standardport):

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

Möglicherweise müssen Sie mit den Zahlen im oben genannten Code wie 58 und 1 spielen

Mohammad-Ali
quelle
Der Standardport ist 9200.
Slhck
0

Antwort für Elasticsearch in Docker:

Stoppen Sie einfach den Docker-Container. Es scheint anmutig anzuhalten, weil es protokolliert:

[INFO ][o.e.n.Node               ] [elastic] stopping ...
Risadinha
quelle
0

Angenommen, Sie haben 3 Knoten.

Bereiten Sie Ihren Cluster vor

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"

Beenden Sie den Elasticsearch-Dienst in jedem Knoten

# 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

Cluster erneut starten

# 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
  }
}
'

Getestet auf Elasticseach 6.5

Quelle:

  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
Thiago Falcao
quelle
0

Wenn Sie einen Knoten auf localhost ausführen, versuchen Sie ihn zu verwenden brew service stop elasticsearch

Ich starte elasticsearch auf iOS localhost.

Ahmer Malik
quelle