Wie man die Anzahl der primären Shards in Elasticsearch erhöht
Erfahren Sie, wie Sie die Anzahl der primären Shards in Elasticsearch mithilfe der Split- und Reindex-APIs für ein optimales Shard-Skalieren erhöhen können.
Es ist nicht möglich, die Anzahl der primären Shards eines bestehenden Index zu erhöhen. Das bedeutet, dass ein Index neu erstellt werden muss, wenn Sie die Anzahl der primären Shards erhöhen möchten. In solchen Situationen werden üblicherweise zwei Methoden verwendet: die _reindex API und die _split API.
Die _split-API ist oft eine schnellere Methode als die _reindex-API. Die Indizierung muss vor beiden Operationen gestoppt werden , da sich sonst die Dokumentanzahlen in source_index und target_index unterscheiden.

Methode 1 – Verwendung der Split-API
Die Split-API wird verwendet, um einen neuen Index mit der gewünschten Anzahl primärer Shards zu erstellen, indem die Einstellungen kopiert und ein vorhandener Index zugeordnet werden. Die gewünschte Anzahl primärer Shards kann bei der Erstellung festgelegt werden. Vor der Implementierung der Split-API sollten folgende Einstellungen überprüft werden:
Der Quellindex muss schreibgeschützt sein. Dies bedeutet, dass der Indexierungsprozess gestoppt werden muss.
Die Anzahl der primären Shards im Zielindex muss ein Vielfaches der Anzahl der primären Shards im Quellindex sein. Wenn der Quellindex beispielsweise 5 primäre Shards hat, können die primären Shards des Zielindex auf 10, 15, 20 usw. festgelegt werden.
Hinweis: Wenn nur die Nummer des primären Shards geändert werden muss, ist die Split-API vorzuziehen, da sie wesentlich schneller ist als die Reindex-API.
Implementierung der Split-API
Erstellen Sie einen Testindex:
POST test_split_source/_doc
{
"test": "test"
}Der Quellindex muss schreibgeschützt sein, um aufgeteilt werden zu können:
PUT test_split_source/_settings
{
"index.blocks.write": true
}Einstellungen und Zuordnungen werden automatisch aus dem Quellindex kopiert:
POST /test_split_source/_split/test_split_target
{
"settings": {
"index.number_of_shards": 3
}
}Den Fortschritt können Sie mit folgendem Link überprüfen:
GET _cat/recovery/test_split_target?v&h=index,shard,time,stage,files_percent,files_totalDa Einstellungen und Zuordnungen aus den Quellindizes kopiert werden, ist der Zielindex schreibgeschützt. Aktivieren wir nun den Schreibvorgang für den Zielindex:
PUT test_split_target/_settings
{
"index.blocks.write": null
}Prüfen Sie die Anzahl der Dokumente (docs.count) im Quell- und Zielindex, bevor Sie den ursprünglichen Index löschen:
GET _cat/indices/test_split*?v&h=index,pri,rep,docs.countIndexname und Aliasname dürfen nicht identisch sein. Sie müssen den Quellindex löschen und den Namen des Quellindex als Alias zum Zielindex hinzufügen:
DELETE test_split_source
PUT /test_split_target/_alias/test_split_sourceNachdem Sie den Alias test_split_source zum Index test_split_target hinzugefügt haben, sollten Sie ihn wie folgt testen:
GET test_split_source
POST test_split_source/_doc
{
"test": "test"
}Methode 2 – Verwendung der Reindex-API
Durch die Erstellung eines neuen Index mit der Reindex-API kann eine beliebige Anzahl primärer Shards angegeben werden. Nach der Erstellung eines neuen Index mit der gewünschten Anzahl primärer Shards können alle Daten im Quellindex in diesen neuen Index neu indiziert werden.
Zusätzlich zu den Split-API-Funktionen können die Daten mithilfe der ingest_pipeline im Reindex-AP manipuliert werden. Bei der Ingest-Pipeline werden nur die angegebenen Felder, die dem Filter entsprechen, mithilfe der Abfrage in den Zielindex indiziert. Der Dateninhalt kann mithilfe eines einfachen Skripts geändert werden, und mehrere Indizes können zu einem einzigen Index zusammengeführt werden.
Implementierung der Reindex-API
Erstellen Sie einen Test-Reindex:
POST test_reindex_source/_doc
{
"test": "test"
}Kopieren Sie die Einstellungen und Zuordnungen aus dem Quellindex:
GET test_reindex_sourceErstellen Sie einen Zielindex mit Einstellungen, Zuordnungen und der gewünschten Shard-Anzahl:
PUT test_reindex_target
{
"mappings" : {},
"settings": {
"number_of_shards": 10,
"number_of_replicas": 0,
"refresh_interval": -1
}
}*Hinweis: Die Einstellung number_of_replicas: 0 und refresh_interval: -1 erhöht die Geschwindigkeit der Neuindizierung.
Starten Sie den Reindexierungsprozess. Durch die Einstellung requests_per_second=-1 und slices=auto wird die Reindexierungsgeschwindigkeit angepasst.
POST _reindex?requests_per_second=-1&slices=auto&wait_for_completion=false
{
"source": {
"index": "test_reindex_source"
},
"dest": {
"index": "test_reindex_target"
}
}Die task_id wird Ihnen beim Ausführen der Reindex-API angezeigt. Kopiere das und überprüfe es mit der _tasks-API:
GET _tasks/<task_id>Aktualisieren Sie die Einstellungen, nachdem die Neuindizierung abgeschlossen ist:
PUT test_reindex_target/_settings
{
"number_of_replicas": 1,
"refresh_interval": "1s"
}Prüfen Sie vor dem Löschen des ursprünglichen Index die Anzahl der Dokumente (docs.count) im Quell- und Zielindex; sie sollte identisch sein.
GET _cat/indices/test_reindex_*?v&h=index,pri,rep,docs.countDer Indexname und der Aliasname dürfen nicht identisch sein. Löschen Sie den Quellindex und fügen Sie den Namen des Quellindex als Alias zum Zielindex hinzu:
DELETE test_reindex_source
PUT /test_reindex_target/_alias/test_reindex_sourceNachdem Sie den Alias test_split_source zum Index test_split_target hinzugefügt haben, testen Sie ihn mit folgendem Befehl:
GET test_reindex_sourceZusammenfassung
Wenn Sie die Anzahl der primären Shards eines bestehenden Index erhöhen möchten, müssen Sie die Einstellungen und Zuordnungen für einen neuen Index neu erstellen. Hierfür gibt es zwei Hauptmethoden: die Reindex-API und die Split-API. Die aktive Indizierung muss vor Anwendung beider Methoden beendet werden.




