Einen ElasticSearch – Index exportieren und importieren

Es gibt mehrere Möglichkeiten eine ElasticSearch – Index zu exportieren und wieder zu importieren. Z.B. die Möglichkeit die Gateway Snapshot API zu benutzen, das Plugin Knapsack, scan & scroll (bei Mapping-Anpassungen), oder den ElasticSearch Service auf einer Maschine herunterzufahren und per copy&paste die Files einfach auf die andere Maschine zu kopieren. Die letzte Möglichkeit stellt bei einem Index welcher nur auf einer Node läuft kein Problem dar, sollte der Index aber auf einem Cluster laufen wird es schnell „tricky“. Dann müssten z.B. alle Nodes nacheinander und mit einem Zeitpuffer heruntergefahren werden, bis auf eine Node, um dann die Index-Files von der letzten Maschine zu kopieren.

Es gibt noch eine weitere Möglichkeit, die ziemlich easy ist, vor allem wenn es nur darum geht einen Index einfach nur zu kopieren, die ich hier kurz erklären werde. Es ist  der Einsatz vom Elasticsearch-Exporter. Die Schritte erfolgen auf einem Mac, der Einsatz von Homebrew erleichtert das Ganze somit. Auf Ubuntu oder Windows könnte der Schwierigkeitsgrad steigen.

Homebrew sollte auf einem Mac nicht fehlen. Zuerst werden Node.js, Curl, NPM, Nomnom und Colors installiert:

brew install node
brew install curl
curl https://npmjs.org/install.sh | sh
npm install nomnom
npm install colors

Das Grund-Setup steht. Jetzt nur noch den Elasticsearch-Exporter auf Github auschecken, z.B. mit:
git clone https://github.com/mallocator/Elasticsearch-Exporter.git

Und dann gehts los (im ausgecheckten Ordner ausführen):

Alle Indizes von einer Maschine auf eine andere:
node exporter.js -a localhost -b otherlocalhost 

Index auf der selben Maschine kopieren:
node exporter.js -i index1 -j index2

Type kopieren innerhalb von einem Index:
node exporter.js -i index -t type1 -u type2

Type 1 vom Index 1 zu Type 2 im Index 2 kopieren:
node exporter.js -i index1 -t type1 -j index2 -u type2

Einen Index von einer auf eine andere Maschine kopieren:
node exporter.js -a localhost -i index1 -b otherlocalhost

Einen Index 1 von Maschine 1 zu einem Index 2 auf einer zweiten Maschine kopieren:
node exporter.js -a localhost -i index1 -b otherlocalhost -j index2

 

Das Kopieren erfolgt ziemlich schnell, da mit scan & scroll von ElasticSearch gearbeitet wird. Bei einer guten Leitung vergehen keine 5 Minuten bis ein Index mit 2 Millionen Dokumenten in der AWS – Cloud neu aufgebaut wurde.

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.