ESSにおけるElasticsearchの
バックアップ&リストア体制
ドワンゴモバイル @kbigwheel
Elasticsearch 1.0.0からSnapshot & Restore Moduleが追加
1.0.0以前はインデックスをバックアップ・リストアする場合どちらもクラスタを完全に停止する必要があった
1.0.0からは無停止でバックアップ&リストアが可能!!
ここではESSでどのように
Elasticsearchのバックアップ体制をとっているか紹介
ESSの全体図
- mongodbの更新に対応してElasticsearchへ検索ドキュメントを追加
- データの追加は不定期(一日数回~数十回)
1. バックアップ
バックアップリポジトリには共有ファイルシステムリポジトリを使用
ESのバックアップはすごく単純でindexファイルをディレクトリにコピーするだけ。
共有ファイルシステムリポジトリは指定されたディレクトリへファイルをコピーするだけなので、NFSなどにより複数ノードで一つのディレクトリを予め共有しておく必要がある
curl -XPUT "localhost:9200/_snapshot/my_backup/full_`date +\%Y\%m\%d_\%H:\%M:\%S`?wait_for_completion=true"
↑を毎日05:00に実行
- バックアップは差分で取られていくため、バックアップ実行2回目以降は早く実行でき容量も極端に増加しない
- あるバックアップを削除する場合、それ以降のバックアップで使用されているドキュメントの情報は削除しない(賢い)
snapshot status API
1.1.0から追加されたAPI
ドキュメントに書かれた最初の叩き方
http://localhost:9200/_snapshot/_status
が正常に作動しない(500が返ってくる)
localhost:9200/_snapshot/{{バックアップ名}}/_status
はOK
なぜ最初のURLで500が返ってくるか分かる人いたら
このあと教えてくださいm(_ _)m
リストアとリカバリを以下のように定義
リストア: スナップショットを取った時点に戻す
リカバリ:最後のスナップショットを取った後に追加されたデータを改めて追加して最新の状態に戻す
つまり、リストアしてからリカバリして初めて
障害発生前の状態に戻る
復旧の手順
- Elasticsearchのrestore APIを使ってsnapshot時点までリストア
- snapshot作成時間後にmongodbへ追加されたデータから再度検索用ドキュメントを作成(リカバリ)
リストア
- mongodb → Elasticsearchのドキュメント生成を停止