wake-up-neo.net

Wie benenne ich einen Index in einem Cluster um?

Ich muss mehrere Indizes in einem Cluster umbenennen (ihr Name muss geändert werden, ich kann Aliase nicht verwenden).

Ich habe gesehen, dass es dafür keine unterstützten Möglichkeiten gibt. Der nächste Weg, den ich gefunden habe, ist benenne das Verzeichnis des Index um , ich habe dies in einem Cluster versucht.

Der Cluster verfügt über 3 Computer A, B und C, auf denen die Shards repliziert werden. Ich habe die Elasticsearch für A beendet, /var/lib/elasticsearch/security/nodes/0/indices/oldindexname In /var/lib/elasticsearch/security/nodes/0/indices/newindexname Umbenannt und A neu gestartet.

Der Status des Clusters war gelb, und die Elasticsearch-Funktion hat etwas Magisches getan, um den korrekten Status wiederherzustellen. Nach einiger Zeit endete ich mit

  • oldindexname verfügbar und vollständig repliziert (wiederhergestellt von B und C, denke ich)
  • newindexname ist verfügbar (ich kann es durchsuchen), aber das head-Plugin zeigt an, dass sich seine Shards in einem "nicht zugewiesenen" Zustand befinden und dass sie ausgegraut sind (nicht repliziert)

Während der Wiederherstellung zeigte security.log Die folgende Meldung an:

[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

Während newindexname durchsuchbar ist, ist es sicherlich nicht in einem normalen Zustand.

Ich habe den vorherigen Status wiederhergestellt, indem ich newindexname gelöscht habe. Der Cluster ist wieder grün, ohne "Nicht zugeordnete" Einträge.

Wie kann ich oldindexname in einem Cluster in newindexname umbenennen?

Hinweis: Die ultimative Lösung, die ich mir vorgestellt habe, ist, oldindex in newindex zu scrollen und oldindex danach. Dies wird einige Zeit in Anspruch nehmen. Wenn es also eine direktere Lösung gibt, wäre dies großartig.

96
WoJ

Um Ihren Index umzubenennen, können Sie das Elasticsearch Snapshot-Modul verwenden.

Zuerst müssen Sie einen Schnappschuss Ihres Index erstellen. Während Sie ihn wiederherstellen, können Sie Ihren Index umbenennen.

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

rename_replacement: -Neuer Indexname, in dem Sie Ihre Daten sichern möchten.

47
krishna kumar

Sie können dazu REINDEX verwenden.

Reindex versucht nicht, den Zielindex einzurichten. Die Einstellungen des Quellindex werden nicht kopiert. Sie sollten Richten Sie den Zielindex ein vor dem Ausführen einer _reindex-Aktion, einschließlich des Einrichtens von Zuordnungen, Shard-Zählern, Replikaten usw.

  1. Kopieren Sie zuerst den Index unter einem neuen Namen
POST /_reindex
{
  "source": {
    "index": "Twitter"
  },
  "dest": {
    "index": "new_Twitter"
  }
}
  1. Löschen Sie nun den Index
DELETE /Twitter
143
reto

Wenn Sie nicht REINDEXEN können, verwenden Sie eine Problemumgehung Aliase. Aus der offiziellen Dokumentation:

APIs in elasticsearch akzeptieren einen Indexnamen, wenn sie mit einem bestimmten Index arbeiten, und gegebenenfalls mehrere Indizes. Die Index-Aliase-API ermöglicht das Aliasen eines Index mit einem Namen, wobei alle APIs den Aliasnamen automatisch in den tatsächlichen Indexnamen konvertieren. Ein Alias ​​kann auch mehr als einem Index zugeordnet werden. Wenn Sie ihn angeben, wird der Alias ​​automatisch auf die Aliase-Indizes erweitert. Ein Alias ​​kann auch einem Filter zugeordnet werden, der bei der Suche automatisch angewendet wird, und leitet Werte weiter. Ein Alias ​​kann nicht denselben Namen wie ein Index haben.

Beachten Sie, dass diese Lösung nicht funktioniert, wenn Sie die Funktion "Weitere Funktionen" verwenden. https://github.com/elastic/elasticsearch/issues/1656

6
Leo

Eine andere Möglichkeit, das Umbenennen oder Ändern der Zuordnungen für einen Index zu erreichen, ist das erneute Indizieren mit logstash. Hier ist ein Beispiel für die Konfiguration von 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"
 }
}
5
Gabriel Rosca

Daher gibt es in ES keine direkte Methode zum Kopieren oder Umbenennen des Index (ich habe intensiv nach meinem eigenen Projekt gesucht).

Es ist jedoch sehr einfach, ein beliebtes Migrationstool [Elastic-Exporter] zu verwenden.

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

[PS: Dies ist nicht mein Blog, nur gestolpert und fand es gut]

Dadurch können Sie den Index/Typ kopieren und dann den alten löschen.

5
lazywiz

Wie in Elasticsearch-Referenz für das Snapshot-Modul angegeben,

Die Optionen rename_pattern und rename_replacement können auch verwendet werden, um den Index bei der Wiederherstellung mithilfe eines regulären Ausdrucks umzubenennen

3
oldbam

Der folgende Befehl hat bei mir funktioniert:

POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "new_index",
        "alias": "old_index"
      }
    },
    {
      "remove_index": {
        "index": "old_index"
      }
    }
  ]
}
0
Enayat