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名>"}'
参考
- Snapshot And Restore | Elasticsearch Reference [6.2] | Elastic
- Elasticsearchのバックアップとリストア - Qiita
- Elasticsearch backup script with snapshot rotation · Karel Bemelmans