Elasticsearchのデータをバックアップして、別ノードにリストアする
Elasticsearchを運用していて、あるノードのデータをバックアップして、それを別のノードにリストアする方法を探した。
以前は、elasticsearch-knapsackやesclientといった方法があったらしい。
ただ、Elasticsearch自体の機能に、バックアップ、リストアの機能が備わっている。
技術の進歩って早いね!!
はじめに
- 192.168.0.2
- データ移動元ノード
- 192.168.0.3
- データ移動先ノード、インストール後の状態で用意。
共に、Ubuntu 16.04.1 LTS、 Elasticsearch 2.4.1で構築している。
データのバックアップ
バックアップは、Snapshotを使う。作業は、移動元ノードで行う。
バックアップディレクトリ作成
# mkdir -p /var/elasticsearch/backups # chown -R elasticsearch:elasticsearch /var/elasticsearch
リポジトリ作成
# curl -XPUT -uadmin:admin 'http://192.168.0.2:9200/_snapshot/backup1' -d '{
"type": "fs",
"settings": {
"location" : "/var/elasticsearch/backups/backup1",
"compress": true
}
}'
設定ファイル編集
# diff -u /etc/elasticsearch/elasticsearch.yml.20161109/etc/elasticsearch/elasticsearch.yml (snip) +path.repo: ["/var/elasticsearch/backups"] (snip)
Elasticsearchを再起動
# systemctl restart elasticsearch
Snapshot取得
# curl -XPUT 'http://192.168.0.2:9200/_snapshot/backup1/backup-2016.11.09?wait_for_completion=true' -d '{
"indices": "*",
"ignore_unavailable": true,
"include_global_state": false
}'
# curl -XGET -uadmin:admin 'http://192.168.0.2:9200/_snapshot/backup1/backup-2016.11.09?pretty'
{
"snapshots" : [ {
"snapshot" : "backup-2016.11.09",
"version_id" : 2040199,
"version" : "2.4.1",
"indices" : [ (snip) ],
"state" : "SUCCESS",
"start_time" : "2016-11-09T01:47:12.035Z",
"start_time_in_millis" : 1478656032035,
"end_time" : "2016-11-09T01:52:47.587Z",
"end_time_in_millis" : 1478656367587,
"duration_in_millis" : 335552,
"failures" : [ ],
"shards" : {
"total" : 717,
"failed" : 0,
"successful" : 717
}
} ]
}
stateが"SUCCESS"になっていることを確認する。
# ls -l /var/elasticsearch/backups/backup1/ total 32 -rw-r--r-- 1 elasticsearch elasticsearch 59 11月 9 10:52 index drwxr-xr-x 147 elasticsearch elasticsearch 12288 11月 9 10:46 indices -rw-r--r-- 1 elasticsearch elasticsearch 103 11月 9 10:45 meta-snapshot-2016.11.09.dat -rw-r--r-- 1 elasticsearch elasticsearch 2133 11月 9 10:46 snap-snapshot-2016.11.09.dat
バックアップディレクトリに、データが作られていることを確認する。
バックアップデータを移動先ノードに転送
# scp -pr /var/elasticsearch 192.168.0.3:/var/
データのリストア
以下、移動先ノードで行う。
所有権、グループ権変更
# chown -R elasticsearch:elasticsearch /var/elasticsearch
リポジトリ作成
# curl -XPUT 'http://192.168.0.3:9200/_snapshot/backup1' -d '{
"type": "fs",
"settings": {
"location" : "/var/elasticsearch/backups/backup1",
"compress": true
}
}'
設定ファイル編集
# diff -u /etc/elasticsearch/elasticsearch.yml.20161109 /etc/elasticsearch/elasticsearch.yml (snip) +path.repo: ["/var/elasticsearch/backups"] (snip)
Elasticsearchを再起動
# systemctl restart elasticsearch
リストア
# curl -XPOST 'http://192.168.0.3:9200/_snapshot/backup1/backup-2016.11.09/_restore' -d '{
"indices": "*",
"ignore_unavailable": true,
"include_global_state": false
}'