Elasticsearchでは、Snapshotという機能を使うことでIndexのバックアップを取得することができるらしい。 別ディスクにオンタイムで取得できるらしく、使い勝手はよさそう。

1. Snapshot用リポジトリの作成

Snapshotを取得するにあたり、事前にElasticsearch側にSnapshot用のリポジトリを作成する必要がある(取得対象となるリポジトリとは別)。 Snapshotの保存先ディレクトリについても作成する必要があるので、まず最初にSnapshot用のディレクトリを作成する。

sudo mkdir -p /path/to/snapshot
sudo chown elasticsearch:elasticsearch /path/to/snapshot

ディレクトリを作成したら、Elasticsearchの設定ファイル(/etc/elasticsearch/elasticsearch.yml)に以下のように追記をする。

path.repo: ["/path/to/snapshot"]

追記をしたらElasticsearchを再起動し、以下のコマンドを実行してAPIからリポジトリ登録を行う。

curl -XPUT 'http://localhost:9200/_snapshot/リポジトリ名' -d '{
    "type": "fs",
    "settings": {
        "location": "/path/to/snapshot",
        "compress": true
    }
}'

これで、Snapshot用のリポジトリが作成できた。

2. Snapshotの取得・確認

リポジトリの作成ができたら、次はSnapshotを実際に取得してみよう。 Snapshotは、以下のようなリクエストをPOSTすることで、取得できる。

curl -X PUT 'localhost:9200/_snapshot/<Snapshot用リポジトリ名>/Snapshot名?pretty&wait_for_completion=true' -d '{
    "indices": "Snapshot取得対象INDEX名(ワイルドカード使用可)",
    "ignore_unavailable": true,
    "include_global_state": false
}'

取得したSnapshotのサイズ等を調べる場合は、以下のコマンドでSnapshotの一覧が確認できるのでこれを使うといい。

curl -X GET 'http://localhost:9200/_cat/snapshots/スナップショットリポジトリ名?v&s=id'

3. Snapshotからのリストア

Snapshotからリストアする場合は、以下のようなコマンドでリクエストを投げる。

curl -XPOST "http://localhost:9200/_snapshot/<Snapshotリポジトリ>/<Snapshot名>/_restore" -d '{"indices": "<INDEX名>"}'

参考