Elasticsearchのバックアップ

Elasticsearchレプリカは、ノードが停止するのを防ぎますが、壊滅的な障害には役立ちません。壊滅的な障害の場合、バックアップをしっかり取っておく習慣でしか対処できません。

Elasticsearchクラスターを3つのステップでバックアップおよび復元します。

  1. リポジトリを設定する

  2. クラスターのスナップショットを作成する

  3. スナップショットから復元する

詳細については、Elasticsearch管理ガイド、特にSnapshot / Restoreモジュールのドキュメンテーションを参照してください 。

リポジトリを作成する

まず、スナップショットを保存するためのリポジトリを作成します。いくつかのリポジトリタイプがサポートされています。

  • ネットワークファイルシステムやNASなどの共有ファイルシステム
  • Amazon S3
  • HDFS(Hadoop分散ファイルシステム)
  • Azureクラウド

共有ファイルシステムのリポジトリタイプを使用している場合は、最初にpath.repo設定を使用して、各ノードのelasticsearch.ymlにある共有ファイルシステムへのパスを登録します。

path.repo: ["path/to/shared/file/system/"]

リポジトリをホストしているフォルダへのパスが登録されたら(フォルダが存在することを確認してください)、PUTコマンドでリポジトリを作成します。

curl -X PUT "localhost:9200/_snapshot/test_backup" -H 'Content-Type: application/json' -d'
{
"type": "fs",
"settings": {
"location": "/path/to/shared/file/system/"
}
}
'

localhost:9200を使用しているシステムに適したhostname:portの組み合わせに置き換え、test_backupを作成するリポジトリの名前に置き換え、そしてロケーション内にある共有ファイルシステムへの絶対パスを使用します。

リポジトリが正常に設定されると、次のメッセージが表示されます。

{"acknowledged":true}

リポジトリが完成したら、スナップショットの作成を始めることができます。

クラスターのスナップショットの取得

最も簡単な方法は、クラスター内のすべてのインデックスのスナップショットを作成することです。 すべてをスナップショットするには、次のように入力します。

curl -XPUT localhost:9200/_snapshot/test_backup/snapshot_1

{"accepted":true}端末に表示されていれば、スナップショットは成功しています。

スナップショットを取得する際、選択肢をさらに絞り込むこともできます。たとえば、X-Packモニタリングを使用している場合は、モニタリングインデックスを除外できます。スナップショットに含めるインデックスを明示的に宣言します。

curl -XPUT localhost:9200/_snapshot/test_backup/snapshot_2
{ "indices": "liferay-0,liferay-20116" }

Elasticsearchはスマートスナップショットアプローチを使用していることに注意することが重要です。 それが何を意味するのかを理解するために、単一のインデックスについて考えます。最初のスナップショットにはインデックス全体のコピーが含まれ、後続のスナップショットには最初の完全なインデックススナップショットとインデックスの現在の状態との差分のみが含まれます。

最終的にはリポジトリにたくさんのスナップショットが作成されることになり、スナップショットにどれほど賢く名前を付けても、いくつかのスナップショットに何が含まれているのか忘れてしまう可能性があります。 そのため、Elasticsearch APIはスナップショットに関する情報を取得し、提供します。例えば:

curl -XGET localhost:9200/_snapshot/test_backup/snapshot_1

は以下を返します。

{"snapshots":[
{"snapshot":"snapshot_1",
"uuid":"WlSjvJwHRh-xlAny7zeW3w",
"version_id":6.50399,
"version":"6.5.1",
"indices":["liferay-20099","liferay-0","liferay-47206"],
"state":"SUCCESS",
"start_time":"2018-08-15T21:40:17.261Z",
"start_time_in_millis":1534369217261,
"end_time":"2018-08-15T21:40:17.482Z",
"end_time_in_millis":1534369217482,
"duration_in_millis":221,
"failures":[],
"shards":{
"total":3,
"failed":0,
"successful":3

}
}
]}

どのインデックスがスナップショットに含まれていたかなどの有用な情報がたくさんあります。

スナップショットを削除したい場合は、DELETEコマンドを使用してください。

curl -XDELETE localhost:9200/_snapshot/test_backup/snapshot_1

スナップショットの作成をトリガーして後悔する可能性があります(たとえば、スナップショットにすべてのインデックスを含めたくない場合)。スナップショットに大量のデータが含まれていると、時間とリソースがかかる可能性があります。進行中のスナップショットの作成をキャンセルするには、同じDELETEコマンドを使用します。スナップショットのプロセスが終了し、部分スナップショットはリポジトリから削除されます。

スナップショットからの復元

壊滅的な障害が発生した場合に、スナップショットを使用してサーチインデックスを復元することはできませんが、以下の方法があります。_restoreAPIを使用して、すべてのスナップショットのインデックスを復元します。

curl -XPOST localhost:9200/_snapshot/test_backup/snapshot_1/_restore

indicesオプションを渡してスナップショットから特定のインデックスのみを復元し、rename_pattern and rename_replacementオプションを使用してインデックスの名前を変更します。

curl -XPOST
localhost:9200/_snapshot/test_backup/snapshot_1/_restore
{
"indices": "liferay-20116",
"rename_pattern": "liferayindex_(.+)",
"rename_replacement": "restored_liferayindex_$1"
}

これは、スナップショットからliferay-20116index_1というインデックスのみを復元します。rename...設定は、先頭のliferayindex_restored_liferayindex_に置き換えられるように指定します。したがって、liferay-20116index_1restored_liferay-20116index_1になります。

スナップショットを作成するプロセスと同様に、誤って復元されたインデックスはDELETEコマンドでキャンセルできます。

curl -XDELETE localhost:9200/restored_liferay-20116index_3

詳細とオプションについては、スナップショットと復元モジュールに関するElasticsearchのドキュメンテーションを参照してください。

« ElasticsearchのチューニングElasticsearch 6.1のインストール »
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています