comment renommer un index en cluster?

J'ai besoin de renommer plusieurs indices dans un cluster (leur nom doit être changé, je ne peux pas utiliser alias).

J'ai vu qu'il n'y a pas soutenu les façons de le faire, le plus proche que j'ai trouvé est de renommer le répertoire de l'index, j'ai essayé ceci dans un cluster.

, Le cluster a 3 machines A, B et C, et les fragments sont répliquées sur chacun d'eux. J'ai arrêté elasticsearch sur A, renommé /var/lib/elasticsearch/security/nodes/0/indices/oldindexname à /var/lib/elasticsearch/security/nodes/0/indices/newindexname et redémarré A.

L'état du cluster était jaune et elasticsearch faisait de la magie pour restaurer un état correct. Après un certain temps, je me suis retrouvé avec

  • oldindexname étant disponible et entièrement répliqué (récupéré à partir de B et C je suppose)
  • {[11] } étant disponible (je peux le rechercher) mais le plugin head montre que ses fragments sont dans un état "non affecté" et qu'ils sont grisés (Non répliqués)

Pendant la récupération security.log a montré ce qui suit message:

[2015-02-20 11:02:33,461][INFO ][gateway.local.state.meta ] [A.example.com] dangled index directory name is [newindexname], state name is [oldindexname], renaming to directory name

Alors que newindexname est consultable, il n'est certainement pas dans un état normal.

Je suis revenu à l'état précédent en supprimant newindexname. Le cluster est de retour au vert sans aucune entrée "non assignée".

, étant Donné que, comment puis-je renommer oldindexname à newindexname dans un cluster?

Note: la solution ultime que j'ai en tête est de faire défiler-copier oldindex dans newindex et supprimer oldindex après. Cela va prendre du temps donc s'il y a un plus direct la solution ce serait génial.

73
demandé sur WoJ 2015-02-20 13:32:21

7 réponses

Vous pouvez utiliser REINDEX pour ce faire.

Reindex ne tente pas de configurer l'index de destination. Il n'a pas copiez les paramètres de l'index source. Vous devriez configurer le index de destination avant d'exécuter une action _reindex, y compris configuration des mappages, des nombres de fragments, des répliques, etc.

  1. copiez D'abord l'index sous un nouveau nom
POST /_reindex
{
  "source": {
    "index": "twitter"
  },
  "dest": {
    "index": "new_twitter"
  }
}
  1. Maintenant, supprimez L'Index
DELETE /twitter
106
répondu reto 2017-02-01 19:37:11

Pour renommer votre index, vous pouvez utiliser le module Elasticsearch Snapshot.

Vous devez d'Abord prendre un instantané de votre index.tout en le restaurant vous pouvez renommez votre index.

    POST /_snapshot/my_backup/snapshot_1/_restore
    {
     "indices": "jal",
     "ignore_unavailable": "true",
     "include_global_state": false,
     "rename_pattern": "jal",
     "rename_replacement": "jal1"
     }

Rename_replacement: - nouveau nom d'index dans lequel vous souhaitez sauvegarder vos données.

24
répondu krishna kumar 2016-02-24 05:00:13

Une autre façon de renommer ou de modifier les mappages d'un index est de réindexer à l'aide de logstash. Voici un exemple de configuration de logstash 2.1:

input {
  elasticsearch {
   hosts => ["es01.example.com", "es02.example.com"]
   index => "old-index-name"
   size => 500
   scroll => "5m"
  }
}
filter {

 mutate {
  remove_field => [ "@version" ]
 }

 date {
   "match" => [ "custom_timestamp", "MM/dd/YYYY HH:mm:ss" ]
   target => "@timestamp"
 }

}
output {
 elasticsearch {
   hosts => ["es01.example.com", "es02.example.com" ]
   manage_template => false
   index => "new-index-name"
 }
}
6
répondu Gabriel Rosca 2018-09-18 02:21:07

En tant que tel, il n'y a pas de méthode directe pour copier ou renommer l'index dans ES (j'ai beaucoup cherché pour mon propre projet)

Cependant, une option très facile est d'utiliser un outil de migration populaire [Elastic-Exporter].

Http://www.retailmenot.com/corp/eng/posts/2014/12/02/elasticsearch-cluster-migration/

[PS: ce n'est pas mon blog, juste tombé sur et trouvé bon]

Ainsi, vous pouvez copier index/type et supprimez l'ancien.

5
répondu lazywiz 2015-06-30 19:59:53

Si vous ne pouvez pas réindexer une solution de contournement {[2] } consiste à utiliser alias. De la documentation officielle:

les API dans elasticsearch acceptent un nom d'index lorsque vous travaillez avec un index spécifique, et plusieurs index le cas échéant. L'API alias d'index permet d'alias un index avec un nom, toutes les API convertissant automatiquement le nom d'alias en nom d'index réel. Un alias peut également être mappé à plus d'un index, et lors de sa spécification, l'alias développez automatiquement les indices d'alias. Un alias peut également être associé à un filtre qui sera automatiquement appliqué lors de la recherche et des valeurs de routage. Un alias ne peut pas avoir le même nom qu'un indice.

Sachez que cette solution ne fonctionne pas si vous utilisez Plus Cette fonction. https://github.com/elastic/elasticsearch/issues/16560

4
répondu Leo 2017-05-19 11:34:54

Comme indiqué dans Référence Elasticsearch pour le module snapshot ,

Les options rename_pattern et rename_replacement peuvent également être utilisées pour renommer l'index lors de la restauration à l'aide de l'expression régulière

3
répondu oldbam 2016-01-12 13:10:27

Juste au cas où quelqu'un en aurait encore besoin. La façon réussie, non officielle, de renommer les index sont:

  1. Ferme les index qui doivent être renommés
  2. renommez les dossiers des index dans tous les répertoires de données des nœuds maître et de données.
  3. rouvrir les anciens index fermés (j'utilise le plugin kofp). Les anciens index seront rouverts mais resteront non affectés. Les nouveaux index apparaîtront à l'état fermé
  4. rouvrir les nouveaux index
  5. Supprimer les anciens index

Si vous obtenez cette erreur "a balancé index nom du répertoire", le retirer du dossier d'index dans tous les nœuds maîtres (pas de données nœuds), et redémarrez l'un des nœuds de données.

-2
répondu Anh Le 2016-07-21 20:27:58