Ich muss mehrere Indizes in einem Cluster umbenennen (ihr Name muss geändert werden, ich kann keine Aliase verwenden ).
Ich habe gesehen, dass es keine unterstützten Möglichkeiten gibt, dies zu tun. Das nächste, was ich gefunden habe, ist das Umbenennen des Indexverzeichnisses . Ich habe dies in einem Cluster versucht.
Der Cluster verfügt über 3 Computer A
, B
und C
die Shards werden auf jedem von ihnen repliziert. Ich heruntergefahren Elasticsearch auf A
, umbenannt /var/lib/elasticsearch/security/nodes/0/indices/oldindexname
zu /var/lib/elasticsearch/security/nodes/0/indices/newindexname
und neu gestartet A
.
Der Status des Clusters war gelb und Elasticsearch hat etwas Magie angewendet, um einen korrekten Status wiederherzustellen. Nach einiger Zeit endete ich mit
oldindexname
verfügbar und vollständig repliziert sein (wiederhergestellt vonB
undC
ich denke)newindexname
verfügbar sein (ich kann es durchsuchen), aber das Head-Plugin zeigt an, dass sich die Shards in einem "Nicht zugewiesenen" Zustand befinden und dass sie ausgegraut sind (nicht repliziert)
Während der Wiederherstellung wurde security.log
die folgende Meldung angezeigt:
[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
es durchsuchbar ist, ist es sicherlich nicht in einem normalen Zustand.
Ich habe durch Löschen den vorherigen Status wiederhergestellt newindexname
. Der Cluster ist ohne "Nicht zugewiesene" Einträge wieder grün.
Da, wie kann ich umbenennen oldindexname
zu newindexname
in einem Cluster?
Hinweis: die ultimative Lösung , die ich im Sinne habe , ist zu Scroll-Kopie oldindex
in newindex
und löscht oldindex
danach. Dies wird einige Zeit in Anspruch nehmen. Wenn es also eine direktere Lösung gibt, wäre dies großartig.
quelle
_source: {enabled: false}
?_reindex
verwendet_source
als Originaldokument Daten.twitter
zunew_twitter
, soweit ich weiß.Zum Umbenennen Ihres Index können Sie das Elasticsearch-Snapshot-Modul verwenden.
Zuerst müssen Sie einen Schnappschuss Ihres Index machen. Während Sie ihn wiederherstellen, können Sie Ihren Index umbenennen.
rename_replacement: -Neuer Indexname, in dem Sie Ihre Daten sichern möchten.
quelle
_source
im Index aktiviert werden. Ich habe einige Multi-TB-Indizes auf diese Weise ohne Probleme umbenannt.Daher gibt es in ES keine direkte Methode zum Kopieren oder Umbenennen von Indizes (ich habe ausgiebig nach meinem eigenen Projekt gesucht).
Eine sehr einfache Option ist jedoch die Verwendung eines beliebten Migrationstools [Elastic-Exporter].
http://www.retailmenot.com/corp/eng/posts/2014/12/02/elasticsearch-cluster-migration/
[PS: Dies ist nicht mein Blog, ich bin nur darauf gestoßen und fand es gut]
Dabei können Sie den Index / Typ kopieren und dann den alten löschen.
quelle
Wenn Sie noch keinen indizieren kann Abhilfe verwenden 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 mehreren Indizes zugeordnet werden. Wenn Sie ihn angeben, wird der Alias automatisch auf die Aliase-Indizes erweitert. Ein Alias kann auch einem Filter zugeordnet werden, der beim Suchen und Weiterleiten von Werten automatisch angewendet wird. Ein Alias kann nicht denselben Namen wie ein Index haben.
Beachten Sie, dass diese Lösung nicht funktioniert, wenn Sie die Funktion "Mehr wie diese" verwenden. https://github.com/elastic/elasticsearch/issues/16560
quelle
I need to rename several indexes in a cluster (their name must be changed I cannot use aliases).
Von @WoJalias
müssen Sie im Voraus planen und den ursprünglichen Indexnamenas an alias
für einen echten Index erstellen . Anschließend können Sie einen neuen Aliasnamen erstellen und den alten Aliasnamen für etwas anderes wiederverwenden. Aber Sie verlieren den Zugang zu old_data wenn Sie nur eine real_index haben haben, stellen Sie einen Alias es, löschen Sie die alte real_index. Der Alias zeigt jetzt auf nichts.Eine andere Möglichkeit, das Umbenennen oder Ändern der Zuordnungen für einen Index zu erreichen, besteht darin, die Verwendung von logstash neu zu indizieren. Hier ist ein Beispiel für die Konfiguration von logstash 2.1:
quelle
Wie in der Elasticsearch-Referenz für das Snapshot-Modul angegeben ,
quelle
Nur für den Fall, dass es noch jemand braucht. Die erfolgreiche, nicht offizielle Methode zum Umbenennen von Indizes ist:
Wenn Sie die Fehlermeldung "Name des baumelnden Indexverzeichnisses ist" erhalten, entfernen Sie den Indexordner in allen Masterknoten (nicht in den Datenknoten) und starten Sie einen der Datenknoten neu.
quelle