やさぐれSEの技術メモ

皆が辛い思いをしないようにハマったポイントなどを書きます

Elasticsearchのインストール及び設定 その9 スナップショットの作成

設定変更の際や定期的なスナップショットの取得がElasticsearchに不可欠です。

公式URL

www.elastic.co

準備

NFSのマウント

スナップショットの取得、スナップショットからのデータ復旧には、基本的に全てのインスタンスが同一領域をマウントしている必要があります。
※スナップショットの操作を実施する際にマウントする運用が良いかと思われます。

(1)Configの「path.repo」という定義でそのディレクトリを指定してますので、そこにNFS領域をマウントします。
 ※RHEL#1~#5全台に実施します。

mount -t nfs -o rw NFSサーバのIPアドレス:NFS共有ディレクトリパス /snapshot

(2)dfコマンド等でマウントされていることを確認します。

リポジトリの作成

スナップショットのデータを格納する器としてリポジトリを作成する必要があります。
こちらはいずれかのインスタンスから一度だけ実施します。

curl -H "Content-Type: application/json" -XPUT -u elastic 'http://192.168.0.3:9200/_snapshot/リポジトリ名' -d '{
"type": "fs",
"settings": {
"location": "/snapshot",
"compress": true
}
}'
  • リポジトリ名に任意の名称を入力します。
  • typeには共有フォルダを示す「fs」を入力します。
  • locationにはスナップショット用のパスを記述します。
  • compressは圧縮するかどうかを設定します。

[参考]
type の設定値ですが、下記の6種類があります。 クラウドストレージへの格納を是非やってみたいところです。

type リポジトリ
fs 共有フォルダ
url 読み取り専用URL(なんのこっちゃか解りませんね)
s3 S3ストレージ
hdfs Hadoop環境のバックアップ先みたいです
azure Azureストレージ
gcs Google Cloudのストレージ

[余談]

Elasticsearch 6系からPUTのAPIを発行する際に「"Content-Type: application/json"」を付けないとエラーになります。
これを知らずに多少はまりました。

curl -H "Content-Type: application/json" -XPUT なにがしかのURL

スナップショットの作成

実際にスナップショットの取得を実施します。

■特定のインデックスを指定する場合

curl -H "Content-Type: application/json" -XPUT -u elastic 'http://192.168.0.3:9200/_snapshot/リポジトリ名/スナップショット名?wait_for_completion=true' -d '{
"indices": "インデックス名",
"ignore_unavailable": true,
"include_global_state": false
}'
  • indices にスナップショットを取得したいインデックス名を記入します
  • ignore_unavailable は存在しないインデックスを記入した場合に無視するかどうかです。基本的に「true」で良いと思います。
  • include_global_state はglobal stateファイルを含めるかどうかの指定になります。基本的に「false」で良いと思います。

スナップショットの確認方法

スナップショットからのデータ復旧方法は下記の通りです。

■特定のスナップショットを指定する場合

curl -XGET -u elastic 'http://192.168.0.3:9200/_snapshot/リポジトリ名/スナップショット名

■全スナップショットを指定する場合

curl -XGET -u elastic 'http://192.168.0.3:9200/_snapshot/リポジトリ名/_all?pretty

スナップショットからのリストア

curl -H "Content-Type: application/json" -XPOST -u elastic 'http://192.168.0.3:9200/_snapshot/リポジトリ名/リストアに使用するスナップショット名/_restore' -d '{
"indices": "リストア後のインデックス名",
"ignore_unavailable": "true",
"include_global_state": false
}'