togatttiのエンジニアメモ

過度な期待はしないでください.

Elasticsearchのデータをバックアップして、別ノードにリストアする

Elasticsearchを運用していて、あるノードのデータをバックアップして、それを別のノードにリストアする方法を探した。

以前は、elasticsearch-knapsackやesclientといった方法があったらしい。

ただ、Elasticsearch自体の機能に、バックアップ、リストアの機能が備わっている。

技術の進歩って早いね!!

はじめに

  • 192.168.0.2
    • データ移動元ノード
  • 192.168.0.3
    • データ移動先ノード、インストール後の状態で用意。

共に、Ubuntu 16.04.1 LTS、 Elasticsearch 2.4.1で構築している。

データのバックアップ

バックアップは、Snapshotを使う。作業は、移動元ノードで行う。

www.elastic.co

バックアップディレクトリ作成

# 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
}'

参考

Elasticsearchのバックアップとリストア - Qiita