Elasticsearch ist eine leistungsstarke Open-Source-Such- und Analyse-Engine, die für eine Vielzahl von Aufgaben verwendet werden kann, einschließlich der Indizierung, Suche und Aggregation von Daten. Ein häufiges Problem, das bei Elasticsearch auftreten kann, ist das Vorhandensein nicht zugewiesener Shards. Diese Shards sind keinem Knoten im Cluster zugeordnet und können eine Reihe von Problemen verursachen, darunter eine verringerte Leistung und eine erhöhte Latenz.
Glücklicherweise gibt es in Elasticsearch mehrere Möglichkeiten, nicht zugewiesene Shards zu löschen. Eine einfache Methode ist die Verwendung der _cluster/reroute-API. Mit dieser API können Sie Shards manuell verschiedenen Knoten im Cluster neu zuweisen und können zum Löschen nicht zugewiesener Shards verwendet werden, indem Sie sie einem nicht vorhandenen Knoten zuweisen.
Um die _cluster/reroute-API zu verwenden, können Sie den folgenden Curl-Befehl verwenden:
„
curl -XPOST 'localhost:9200/_cluster/reroute?dry_run=true' -d '{
„Befehle“:[
{
"bewegen":{
„index“:„mein_index“,
„Scherbe“:0,
„target“:„non_existent_node“
}
}
]
}'
„
Dieser Befehl gibt eine Liste der Änderungen aus, die am Cluster vorgenommen würden, wenn der Neuausgleichsvorgang ausgeführt würde. Um den Neuausgleichsvorgang tatsächlich auszuführen, können Sie einfach den dry_run-Parameter im Curl-Befehl weglassen.
Eine andere Möglichkeit, nicht zugewiesene Shards in Elasticsearch zu löschen, ist die Verwendung der Force-Merge-API. Mit dieser API können Sie die Zusammenführung mehrerer Segmente im Index erzwingen, was manchmal zum Löschen nicht zugewiesener Shards führen kann.
Um die Force-Merge-API zu verwenden, können Sie den folgenden Curl-Befehl verwenden:
„
curl -XPOST 'localhost:9200/my_index/_forcemerge?max_num_segments=1'
„
Dieser Befehl erzwingt die Zusammenführung aller Segmente im Index „my_index“ zu einem einzigen Segment, was zur Löschung nicht zugewiesener Shards führen kann.
Schließlich können Sie auch nicht zugewiesene Shards in Elasticsearch löschen, indem Sie die Datei shards.json aus dem Datenverzeichnis löschen. Dies ist eine drastischere Maßnahme und sollte nur angewendet werden, wenn die anderen Methoden keinen Erfolg hatten.
Um die Datei shards.json zu löschen, können Sie den folgenden Befehl verwenden:
„
rm -f data/nodes/0/indices/my_index/0/shards.json
„
Dieser Befehl löscht die Datei shards.json für Shard 0 des my_index-Index. Sie müssen diesen Befehl für jeden nicht zugewiesenen Shard wiederholen, den Sie löschen möchten.
Wenn Sie diese Schritte befolgen, können Sie nicht zugewiesene Shards in Elasticsearch einfach löschen und die Leistung Ihres Clusters verbessern.