Comment augmenter le nombre de shards primaires dans Elasticsearch ?
Apprenez à augmenter le nombre de partitions primaires dans Elasticsearch à l’aide des API split et reindex pour un dimensionnement optimal des partitions.
Il n'est pas possible d'augmenter le nombre de shards primaires d'un index existant, ce qui signifie qu'un index doit être recréé si vous souhaitez augmenter le nombre de shards primaires. Deux méthodes sont généralement utilisées dans ces situations : l'API _reindex et l'API _split.
L'API _split est souvent plus rapide que l'API _reindex. L'indexation doit être arrêtée avant les deux opérations, sinon les comptes des documents source_index et cible_index seront différents.

Méthode 1 - utilisation de l'API fractionnée
L'API de fractionnement est utilisée pour créer un nouvel index avec le nombre souhaité d'unités primaires en copiant les paramètres et en mappant un index existant. Le nombre désiré de fragments primaires peut être défini lors de la création. Les paramètres suivants doivent être vérifiés avant de mettre en œuvre l'API fractionnée :
L'index source doit être en lecture seule. Cela signifie que le processus d'indexation doit être arrêté.
Le nombre de groupes primaires dans l'index cible doit être un multiple du nombre de groupes primaires dans l'index source. Par exemple, si l'index source dispose de 5 groupes primaires, les groupes primaires de l'index cible peuvent être définis comme suit : 10, 15, 20, et ainsi de suite.
Remarque : si seul le numéro du fonds primaire doit être modifié, il est préférable d'utiliser l'API de fractionnement, qui est beaucoup plus rapide que l'API de réindexation.
Mise en œuvre de l'API fractionnée
Créer un index de test :
POST test_split_source/_doc
{
"test": "test"
}L'index source doit être en lecture seule pour pouvoir être scindé :
PUT test_split_source/_settings
{
"index.blocks.write": true
}Les paramètres et les correspondances seront copiés automatiquement à partir de l'index source :
POST /test_split_source/_split/test_split_target
{
"settings": {
"index.number_of_shards": 3
}
}Vous pouvez vérifier l'état d'avancement avec :
GET _cat/recovery/test_split_target?v&h=index,shard,time,stage,files_percent,files_totalÉtant donné que les paramètres et les mappages sont copiés à partir des index source, l'index cible est en lecture seule. Activons l'opération d'écriture pour l'index cible :
PUT test_split_target/_settings
{
"index.blocks.write": null
}Vérifier les index source et cible docs.count avant de supprimer l'index original :
GET _cat/indices/test_split*?v&h=index,pri,rep,docs.countLe nom de l'index et le nom de l'alias ne peuvent pas être identiques. Vous devez supprimer l'index source et ajouter le nom de l'index source comme alias à l'index cible :
DELETE test_split_source
PUT /test_split_target/_alias/test_split_sourceAprès avoir ajouté l'alias test_split_source à l'index test_split_target, vous devez le tester avec :
GET test_split_source
POST test_split_source/_doc
{
"test": "test"
}Méthode 2 - utilisation de l'API de réindexation
En créant un nouvel index à l'aide de l'API Reindex, il est possible d'indiquer n'importe quel nombre de comptes de tessons primaires. Après la création d'un nouvel index avec le nombre prévu de groupes primaires, toutes les données de l'index source peuvent être réindexées sur ce nouvel index.
Outre les fonctionnalités de l'API fractionnée, les données peuvent être manipulées à l'aide de la ligne de conduite ingest_pipeline dans l'API de réindexation. Avec le pipeline d'ingestion, seuls les champs spécifiés qui correspondent au filtre seront indexés dans l'index cible à l'aide de la requête. Le contenu des données peut être modifié à l'aide d'un script simple, et plusieurs index peuvent être fusionnés en un seul.
Mise en œuvre de l'API de réindexation
Créer un test de réindexation :
POST test_reindex_source/_doc
{
"test": "test"
}Copier les paramètres et les mappages de l'index source :
GET test_reindex_sourceCréez un index cible avec des paramètres, des mappings et le nombre de tiroirs souhaité :
PUT test_reindex_target
{
"mappings" : {},
"settings": {
"number_of_shards": 10,
"number_of_replicas": 0,
"refresh_interval": -1
}
}*Remarque : les paramètres number_of_replicas : 0 et refresh_interval : -1 augmentera la vitesse de réindexation.
Lancer le processus de réindexation. Les paramètres requests_per_second=-1 et slices=auto permettent d'ajuster la vitesse de réindexation.
POST _reindex?requests_per_second=-1&slices=auto&wait_for_completion=false
{
"source": {
"index": "test_reindex_source"
},
"dest": {
"index": "test_reindex_target"
}
}Vous verrez l'identifiant de la tâche lorsque vous exécuterez l'API de réindexation. Copiez-le et vérifiez avec l'API _tasks :
GET _tasks/<task_id>Mettre à jour les paramètres une fois la réindexation terminée :
PUT test_reindex_target/_settings
{
"number_of_replicas": 1,
"refresh_interval": "1s"
}Vérifiez les index source et cible docs.count avant de supprimer l'index original, ils doivent être identiques :
GET _cat/indices/test_reindex_*?v&h=index,pri,rep,docs.countLe nom de l'index et le nom de l'alias ne peuvent pas être identiques. Supprimer l'index source et ajouter le nom de l'index source comme alias à l'index cible :
DELETE test_reindex_source
PUT /test_reindex_target/_alias/test_reindex_sourceAprès avoir ajouté l'alias test_split_source à l'index test_split_target, testez-le en utilisant :
GET test_reindex_sourceRésumé
Si vous souhaitez augmenter le nombre de tessons primaires d'un index existant, vous devez recréer les paramètres et les correspondances avec un nouvel index. Il existe deux méthodes principales pour ce faire : l'API de réindexation et l'API de scission. L'indexation active doit être arrêtée avant d'utiliser l'une ou l'autre méthode.




