スナップショットと復元

スナップショットは、実行中のElasticsearchクラスターのバックアップです。スナップショットを使用して、次のことができます:

  • ダウンタイムなしでクラスターを定期的にバックアップする
  • 削除後やハードウェア障害後にデータを復元する
  • クラスター間でデータを転送する
  • コールドおよびフローズンデータ層で検索可能なスナップショットを使用してストレージコストを削減する

スナップショットワークフロー

Elasticsearchは、スナップショットをオフクラスターのストレージ場所であるスナップショットリポジトリに保存します。スナップショットを取得または復元する前に、クラスターでスナップショットリポジトリを登録する必要があります。Elasticsearchは、次のようなクラウドストレージオプションを持ついくつかのリポジトリタイプをサポートしています:

  • AWS S3
  • Google Cloud Storage (GCS)
  • Microsoft Azure

スナップショットリポジトリを登録した後、スナップショットライフサイクル管理 (SLM)を使用して、スナップショットを自動的に取得および管理できます。その後、スナップショットを復元することで、そのデータを復元または転送できます。

スナップショットの内容

デフォルトでは、クラスターのスナップショットには、クラスターの状態、すべての通常のデータストリーム、およびすべての通常のインデックスが含まれます。クラスターの状態には、次のものが含まれます:

クラスター内の特定のデータストリームまたはインデックスのみのスナップショットを取得することもできます。データストリームまたはインデックスを含むスナップショットは、自動的にそのエイリアスも含まれます。スナップショットを復元する際に、これらのエイリアスを復元するかどうかを選択できます。

スナップショットには、次のものは含まれませんまたはバックアップされません:

機能状態

機能状態には、ElasticsearchのセキュリティやKibanaなどのElastic機能の構成、履歴、およびその他のデータを保存するために使用されるインデックスとデータストリームが含まれます。

機能状態のリストを取得するには、Features APIを使用します。

機能状態には通常、1つ以上のシステムインデックスまたはシステムデータストリームが含まれます。また、機能によって使用される通常のインデックスやデータストリームも含まれる場合があります。たとえば、機能状態には、機能の実行履歴を含む通常のインデックスが含まれる場合があります。この履歴を通常のインデックスに保存することで、より簡単に検索できます。

Elasticsearch 8.0以降、機能状態はシステムインデックスとシステムデータストリームをバックアップおよび復元する唯一の方法です。

スナップショットの動作

スナップショットは、自動的に重複排除され、ストレージスペースを節約し、ネットワーク転送コストを削減します。インデックスをバックアップするために、スナップショットはインデックスのセグメントのコピーを作成し、それをスナップショットリポジトリに保存します。セグメントは不変であるため、スナップショットはリポジトリの最後のスナップショット以降に作成された新しいセグメントのみをコピーする必要があります。

各スナップショットは論理的に独立しています。スナップショットを削除すると、Elasticsearchはそのスナップショット専用に使用されているセグメントのみを削除します。Elasticsearchは、リポジトリ内の他のスナップショットによって使用されているセグメントを削除しません。

スナップショットとシャードの割り当て

スナップショットは、インデックスのプライマリシャードからセグメントをコピーします。スナップショットを開始すると、Elasticsearchはすぐに利用可能なプライマリシャードのセグメントのコピーを開始します。シャードが開始中または移動中の場合、Elasticsearchはこれらのプロセスが完了するまで待機してからシャードのセグメントをコピーします。1つ以上のプライマリシャードが利用できない場合、スナップショットの試行は失敗します。

スナップショットがシャードのセグメントのコピーを開始すると、Elasticsearchはシャードを別のノードに移動しません。たとえ再バランスやシャード割り当て設定が通常再配置をトリガーする場合でも、スナップショットがシャードのデータのコピーを完了するまで、Elasticsearchはシャードを移動しません。

スナップショットの開始と停止の時間

スナップショットは、クラスターを正確な時点で表すものではありません。代わりに、各スナップショットには開始時刻と終了時刻が含まれます。スナップショットは、これらの2つの時刻の間のある時点での各シャードのデータのビューを表します。

スナップショットの互換性

スナップショットをクラスターに復元するには、スナップショット、クラスター、および復元されたインデックスのバージョンが互換性がある必要があります。

スナップショットバージョンの互換性

スナップショットをElasticsearchの以前のバージョンに復元することはできません。たとえば、7.6.0で取得されたスナップショットを7.5.0で実行されているクラスターに復元することはできません。

インデックスの互換性

スナップショットから復元するインデックスは、現在のクラスターのバージョンとも互換性がある必要があります。互換性のないバージョンで作成されたインデックスを復元しようとすると、復元の試行は失敗します。

クラスターのバージョン
インデックス作成バージョン 6.8 7.0–7.1 7.2–7.17 8.0–8.2 8.3-8.15
5.0–5.6 Yes No No No Yes[1]
6.0–6.7 Yes Yes Yes No Yes[1]
6.8 Yes No Yes No Yes[1]
7.0–7.1 No Yes Yes Yes Yes
7.2–7.17 No No Yes Yes Yes
8.0–8.15 No No No Yes Yes

1. アーカイブインデックスでサポートされています。

インデックスをElasticsearchの以前のバージョンに復元することはできません。たとえば、7.6.0で作成されたインデックスを7.5.0で実行されているクラスターに復元することはできません。

互換性のあるスナップショットには、古い互換性のないバージョンで作成されたインデックスが含まれる場合があります。たとえば、7.17クラスターのスナップショットには、6.8で作成されたインデックスが含まれる場合があります。6.8インデックスを8.15クラスターに復元することは、アーカイブ機能を使用できない限り失敗します。クラスターをアップグレードする前にスナップショットを取得する場合は、これを考慮してください。

回避策として、最初にインデックスを、インデックスと現在のクラスターの両方に互換性のある最新バージョンのElasticsearchを実行している別のクラスターに復元できます。その後、reindex-from-remoteを使用して、現在のクラスターでインデックスを再構築できます。リモートからの再インデックスは、インデックスの_sourceが有効になっている場合にのみ可能です。

リモートからの再インデックスは、スナップショットを復元するよりもかなり時間がかかる場合があります。開始する前に、データのサブセットを使用してリモートからの再インデックスプロセスをテストして、時間の要件を見積もってください。

警告

その他のバックアップ方法

スナップショットを取得することは、クラスターをバックアップするための唯一の信頼できるサポートされた方法です。 Elasticsearchクラスターのノードのデータディレクトリのコピーを作成することで、クラスターをバックアップすることはできません。ファイルシステムレベルのバックアップからデータを復元するためのサポートされた方法はありません。そのようなバックアップからクラスターを復元しようとすると、破損やファイルの欠落、その他のデータの不整合の報告が発生する可能性があり、または成功したように見えてもデータの一部が静かに失われている可能性があります。

クラスターのノードのデータディレクトリのコピーは、単一の時点での内容の一貫した表現ではないため、バックアップとして機能しません。コピーを作成する際にノードをシャットダウンしても、または原子的なファイルシステムレベルのスナップショットを取得しても、これを修正することはできません。なぜなら、Elasticsearchにはクラスター全体にわたる一貫性の要件があるからです。クラスターのバックアップには、組み込みのスナップショット機能を使用する必要があります。

リポジトリの内容

リポジトリ内の何も変更したり、その内容に干渉する可能性のあるプロセスを実行したりしないでください。 Elasticsearch以外の何かがリポジトリの内容を変更すると、将来のスナップショットまたは復元操作が失敗し、破損やその他のデータの不整合が報告される可能性があります。または、成功したように見えてもデータの一部が静かに失われている可能性があります。

ただし、リポジトリのバックアップからリポジトリを復元することは安全です。

  • 1. リポジトリの内容を復元している間、Elasticsearchに登録されていないこと。
  • 2. リポジトリの復元が完了したとき、その内容がバックアップを取得したときとまったく同じであること。

リポジトリ内のスナップショットがもはや必要ない場合は、その内容を基盤となるストレージから削除する前に、Elasticsearchから登録を解除してください。

さらに、スナップショットにはセキュリティに敏感な情報が含まれている可能性があるため、専用のリポジトリに保存することを検討してください。