So entfernen Sie Knoten zur Laufzeit ohne Ausfallzeit aus dem Elasticsearch-Cluster

71

Angenommen, ich hatte 5 Knoten im Cluster und musste zur Laufzeit 2 Knoten entfernen. Wie kann dies getan werden, ohne die Indizes zu beeinflussen?

Ich hatte einen kontinuierlichen Datenstrom mit fast 10 Gbphour, der kontinuierlich indiziert wird.

Hilft das Rebalancing dabei? Danke im Voraus

Lav
quelle
warum ist solr in dieser frage markiert? Ich denke, dies ist nur eine Frage zur Elasticsearch. Bitte verwenden Sie keine falschen Tags. Dies kann Benutzer irreführen, sich mit unwiderruflichen Fragen zu befassen.
Vamsi Krishna

Antworten:

131

Sie können einen Knoten außer Betrieb nehmen, indem Sie den Cluster anweisen, ihn von der Zuordnung auszuschließen. (Aus der Dokumentation hier )

curl -XPUT localhost:9200/_cluster/settings -H 'Content-Type: application/json' -d '{
  "transient" :{
      "cluster.routing.allocation.exclude._ip" : "10.0.0.1"
   }
}';echo

Dies führt dazu, dass Elasticsearch die Shards auf diesem Knoten den verbleibenden Knoten zuordnet, ohne dass sich der Status des Clusters in Gelb oder Rot ändert (selbst wenn Sie Replikation 0 haben).

Sobald alle Shards neu zugewiesen wurden, können Sie den Knoten herunterfahren und alles tun, was Sie dort tun müssen. Wenn Sie fertig sind, fügen Sie den Knoten für die Zuweisung hinzu, und Elasticsearch gleicht die Shards erneut aus.

Towr
quelle
34
Auch "cluster.routing.allocation.exclude._name" und "cluster.routing.allocation.exclude._id" können zur Außerbetriebnahme nach Knotenname und Knoten-ID verwendet werden. Wird in einer Situation benötigt, in der aufgrund einer falschen Konfiguration (/ etc / hosts & elasticsearch.yml) alle Knoten die gleiche (veröffentlichte) IP 127.0.1.1 erhalten haben.
Alexey Tigarev
2
Wie überprüfe ich, ob das Herunterfahren des stillgelegten Knotens in Ordnung ist?
Mischa Arefiev
11
Sie könnten verwenden curl -XGET 'http://ES_SERVER:9200/_cluster/health?pretty'; Wenn keine Knoten verschoben werden, muss der ausgeschlossene Knoten entleert und sicher heruntergefahren sein. Eine andere Möglichkeit besteht darin, zu überprüfen curl -XGET 'http://ES_SERVER:9200/_nodes/NODE_NAME/stats/indices?pretty', ob auf dem Knoten keine Dokumente mehr vorhanden sind.
Towr
11
Mehrere _ip-Datensätze können durch Kommas getrennt werden, z. B.: "Cluster.routing.allocation.exclude._ip": "10.0.0.1,10.0.0.2"
Marc Tamsky
1
@ TomMiller - Es spielt keine Rolle. Wenn Sie es aus der Routing-Zuordnung entfernen, bevor Sie es aus dem Load Balancer entfernen, werden weiterhin Abfragen verarbeitet und Ergebnisse zurückgegeben.
Paul Lemke
10

Um den Elasticsearch-Knoten aus dem Cluster zu entfernen, führen Sie einfach den folgenden Befehl aus

curl -XPUT P.P.P.P:9200/_cluster/settings -H 'Content-Type: application/json' -d '{
  "transient" :{
      "cluster.routing.allocation.exclude._ip" : "X.X.X.X"
   }
}';echo

Hier P.P.P.Pist die private IP des Masterknotens. Sie können auch die IP- localhostAdresse verwenden, auf der elasticsearch ausgeführt wird localhost. X.X.X.Xist die private IP des Knotens, der aus dem Cluster entfernt werden soll.

Dieser Befehl gibt aus, acknowledgement trueob der Knoten zum Entfernen akzeptiert wird und die Datenverschiebung beginnt. Überprüfen Sie, ob die Datenverschiebung beendet ist und auf dem Knoten keine Shards mehr vorhanden sind, und stoppen Sie dann den elasticsearchProzess und stop/terminatedie Instanz. Die Befehle zum Überprüfen der Datenverschiebung und der verbleibenden Shards finden Sie in diesem Artikel .

Ajeet Khan
quelle
Ich denke nicht, dass dies richtig ist. Zumindest in Version 1.7.5 werden beim Ausschließen eines Knotens keine NEUEN Shards zugewiesen, aber vorhandene Shards werden nicht beeinflusst.
TheFiddler gewinnt