Elasticsearchのスナップショット機能を使用してリストアを行います。
スナップショット機能の詳細はElasticsearchの公式ドキュメントを参照してください。
Kubernetes masterサーバーにログインします。詳細は、「第2章 共通の操作」を参照してください。
リポジトリの確認
以下のコマンドを実行することで、作成済みのリポジトリ一覧を参照することができます。
$ curl http://`kubectl -n fj-esdp-system get svc | grep 'elasticsearch-master '| awk -F " " '{print $3}'`:9200/_snapshot/
スナップショットの確認
以下のコマンドを実行することで、作成済みのスナップショット一覧を参照することができます。
また各スナップショットに含まれるインデックス名も確認することができます。
$ curl http://`kubectl -n fj-esdp-system get svc | grep 'elasticsearch-master '| awk -F " " '{print $3}'`:9200/_snapshot/<リポジトリ名>/*
上記で確認した<リポジトリ名>、<スナップショット名>を指定し、以下のコマンドでリストアを実施してください。
<インデックス名>にはリストアするインデックス名を指定し、リストアを実行します。スナップショットに含まれる全インデックスを対象としてリストアを実行することも可能です。後述の例を参照ください。
$ curl http://`kubectl -n fj-esdp-system get svc | grep 'elasticsearch-master '| awk -F " " '{print $3}'`:9200/_snapshot/<リポジトリ名>/<スナップショット名>/_restore?wait_for_completion=true \ -X POST \ -H 'Content-Type: application/json' \ -d '{ "indices": "<インデックス名>" }'
例として、別のElasticsearchで作成したスナップショット'ghi'を含むリポジトリ'def'内のファイルを圧縮したdef.tar.gzをリストアする場合は、以下の通りです。
Kubernetes masterサーバーにログインします。詳細は、「第2章 共通の操作」を参照してください。
$ curl http://`kubectl -n fj-esdp-system get svc | grep 'elasticsearch-master '| awk -F " " '{print $3}'`:9200/_snapshot/abc -X PUT -H 'Content-Type: application/json' \ -d '{"type": "fs","settings": {"location": "def","compress": true}}'
NFSサーバーにログインし、リストアするスナップショットを含むリポジトリのディレクトリ配下のファイル一式を展開します。
$ tar tvfz def.tar.gz -C /var/FJSGHD/fj-esdp-system-elasticsnapshot-volume/def
Kubernetes masterサーバーにログインします。詳細は、「第2章 共通の操作」を参照してください。
インデックスを指定してリストアする場合
$ curl http://`kubectl -n fj-esdp-system get svc | grep 'elasticsearch-master '| awk -F " " '{print $3}'`:9200/_snapshot/abc/ghi/_restore?wait_for_completion=true \ -X POST -H 'Content-Type: application/json' -d '{"indices": "<インデックス名>"}'
全インデックスをリストアする場合
バックアップ時に全インデックスをバックアップしている必要があります。
全インデックスリストアのためにインデックスをクローズします
$ curl -X POST http://`kubectl -n fj-esdp-system get svc | grep 'elasticsearch-master '| awk -F " " '{print $3}'`:9200/*/_close
kibanaのインデックスが存在するか確認します。存在しない場合は、no such indexのメッセージが出力され、存在する場合はインデックスの情報が出力されます。
$ curl -X GET http://`kubectl -n fj-esdp-system get svc | grep 'elasticsearch-master '| awk -F " " '{print $3}'`:9200/.kibana
以下のコマンドを実行して、全インデックスをリストアします。以下のコマンドはkibanaのインデックスが存在する場合の例です。存在しない場合は、indicesに"*"を指定します。
$ curl http://`kubectl -n fj-esdp-system get svc | grep 'elasticsearch-master '| awk -F " " '{print $3}'`:9200/_snapshot/<リポジトリ名>/<スナップショット名>/_restore?wait_for_completion=true \ -X POST \ -H 'Content-Type: application/json' \ -d '{ "indices": "*,-.kibana_1" }'
クローズしたインデックスをもとに戻します。
$ curl -X POST http://`kubectl -n fj-esdp-system get svc | grep 'elasticsearch-master '| awk -F " " '{print $3}'`:9200/*/_open
kibanaのインデックスを復元します。
$ curl http://`kubectl -n fj-esdp-system get svc | grep 'elasticsearch-master '| awk -F " " '{print $3}'`:9200/_reindex \ -X POST \ -H 'Content-Type: application/json' \ -d '{ "source": { "index": "backup.kibana" }, "dest": { "index": ".kibana" } }'