スナップショットの復元

このガイドでは、スナップショットを復元する方法を示します。スナップショットは、クラスターの外部にデータのコピーを保存する便利な方法です。スナップショットを復元することで、削除後やハードウェアの故障後にインデックスやデータストリームを回復できます。また、スナップショットを使用してクラスター間でデータを転送することもできます。

このガイドでは、次のことを学びます:

  • 利用可能なスナップショットのリストを取得する
  • スナップショットからインデックスまたはデータストリームを復元する
  • 機能状態を復元する
  • クラスター全体を復元する
  • 復元操作を監視する
  • 進行中の復元をキャンセルする

このガイドでは、別のクラスターへの復元一般的な復元エラーのトラブルシューティングに関するヒントも提供します。

前提条件

  • Kibanaのスナップショットと復元機能を使用するには、次の権限が必要です:
  • スナップショットを復元できるのは、選出されたマスターノードを持つ稼働中のクラスターのみです。スナップショットのリポジトリは登録済みで、クラスターに利用可能でなければなりません。
  • スナップショットとクラスターのバージョンは互換性がなければなりません。スナップショットの互換性を参照してください。
  • スナップショットを復元するには、クラスターのグローバルメタデータが書き込み可能である必要があります。クラスターブロックが書き込みを妨げていないことを確認してください。復元操作はインデックスブロックを無視します。
  • データストリームを復元する前に、クラスターにデータストリームが有効な一致するインデックステンプレートが含まれていることを確認してください。確認するには、Kibanaのインデックス管理機能またはget index template APIを使用します。

Python

  1. resp = client.indices.get_index_template(
  2. name="*",
  3. filter_path="index_templates.name,index_templates.index_template.index_patterns,index_templates.index_template.data_stream",
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.get_index_template(
  2. name: '*',
  3. filter_path: 'index_templates.name,index_templates.index_template.index_patterns,index_templates.index_template.data_stream'
  4. )
  5. puts response

Js

  1. const response = await client.indices.getIndexTemplate({
  2. name: "*",
  3. filter_path:
  4. "index_templates.name,index_templates.index_template.index_patterns,index_templates.index_template.data_stream",
  5. });
  6. console.log(response);

コンソール

  1. GET _index_template/*?filter_path=index_templates.name,index_templates.index_template.index_patterns,index_templates.index_template.data_stream

そのようなテンプレートが存在しない場合は、作成するか、クラスター状態を復元することができます。一致するインデックステンプレートがない場合、データストリームはロールオーバーやバックインデックスの作成ができません。

  • スナップショットにApp SearchまたはWorkplace Searchのデータが含まれている場合は、スナップショットを復元する前にEnterprise Search暗号化キーを復元していることを確認してください。

考慮事項

スナップショットからデータを復元する際は、次の点に留意してください:

  • データストリームを復元する場合、そのバックインデックスも復元されます。
  • 既存のインデックスを復元できるのは、クローズされていて、スナップショット内のインデックスが同じ数のプライマリシャードを持っている場合のみです。
  • 既存のオープンインデックスを復元することはできません。これにはデータストリームのバックインデックスも含まれます。
  • 復元操作は、自動的に復元されたインデックスをオープンにします。バックインデックスも含まれます。
  • データストリームから特定のバックインデックスのみを復元できます。ただし、復元操作は復元されたバックインデックスを既存のデータストリームに追加しません。

利用可能なスナップショットのリストを取得する

Kibanaで利用可能なスナップショットのリストを表示するには、メインメニューに移動し、スタック管理 > スナップショットと復元をクリックします。

また、get repository APIおよびget snapshot APIを使用して、復元可能なスナップショットを見つけることもできます。最初に、get repository APIを使用して登録されたスナップショットリポジトリのリストを取得します。

Python

  1. resp = client.snapshot.get_repository()
  2. print(resp)

Ruby

  1. response = client.snapshot.get_repository
  2. puts response

Js

  1. const response = await client.snapshot.getRepository();
  2. console.log(response);

コンソール

  1. GET _snapshot

次に、get snapshot APIを使用して特定のリポジトリ内のスナップショットのリストを取得します。これにより、各スナップショットの内容も返されます。

Python

  1. resp = client.snapshot.get(
  2. repository="my_repository",
  3. snapshot="*",
  4. verbose=False,
  5. )
  6. print(resp)

Ruby

  1. response = client.snapshot.get(
  2. repository: 'my_repository',
  3. snapshot: '*',
  4. verbose: false
  5. )
  6. puts response

Js

  1. const response = await client.snapshot.get({
  2. repository: "my_repository",
  3. snapshot: "*",
  4. verbose: "false",
  5. });
  6. console.log(response);

コンソール

  1. GET _snapshot/my_repository/*?verbose=false

インデックスまたはデータストリームを復元する

Kibanaのスナップショットと復元機能またはrestore snapshot APIを使用してスナップショットを復元できます。

デフォルトでは、復元リクエストはスナップショット内のすべての通常のインデックスと通常のデータストリームを復元しようとします。ほとんどの場合、スナップショットから特定のインデックスまたはデータストリームを復元するだけで済みます。ただし、既存のオープンインデックスを復元することはできません。

既存のクラスターにデータを復元する場合は、既存のインデックスやデータストリームとの競合を避けるために、次のいずれかの方法を使用してください:

削除して復元

競合を避ける最も簡単な方法は、復元する前に既存のインデックスまたはデータストリームを削除することです。インデックスまたはデータストリームの偶発的な再作成を防ぐために、復元操作が完了するまで、すべてのインデクシングを一時的に停止することをお勧めします。

action.destructive_requires_nameクラスター設定がfalseの場合、*を使用して*または.*ワイルドカードパターンをターゲットにしないでください。Elasticsearchのセキュリティ機能を使用している場合、これにより認証に必要なシステムインデックスが削除されます。代わりに、*,-.*ワイルドカードパターンをターゲットにして、これらのシステムインデックスやドット(.)で始まる他のインデックス名を除外してください。

Python

  1. resp = client.indices.delete(
  2. index="my-index",
  3. )
  4. print(resp)
  5. resp1 = client.indices.delete_data_stream(
  6. name="logs-my_app-default",
  7. )
  8. print(resp1)

Ruby

  1. response = client.indices.delete(
  2. index: 'my-index'
  3. )
  4. puts response
  5. response = client.indices.delete_data_stream(
  6. name: 'logs-my_app-default'
  7. )
  8. puts response

Js

  1. const response = await client.indices.delete({
  2. index: "my-index",
  3. });
  4. console.log(response);
  5. const response1 = await client.indices.deleteDataStream({
  6. name: "logs-my_app-default",
  7. });
  8. console.log(response1);

コンソール

  1. # インデックスを削除する
  2. DELETE my-index
  3. # データストリームを削除する
  4. DELETE _data_stream/logs-my_app-default

復元リクエストでは、復元するインデックスやデータストリームを明示的に指定します。

Python

  1. resp = client.snapshot.restore(
  2. repository="my_repository",
  3. snapshot="my_snapshot_2099.05.06",
  4. indices="my-index,logs-my_app-default",
  5. )
  6. print(resp)

Ruby

  1. response = client.snapshot.restore(
  2. repository: 'my_repository',
  3. snapshot: 'my_snapshot_2099.05.06',
  4. body: {
  5. indices: 'my-index,logs-my_app-default'
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.snapshot.restore({
  2. repository: "my_repository",
  3. snapshot: "my_snapshot_2099.05.06",
  4. indices: "my-index,logs-my_app-default",
  5. });
  6. console.log(response);

コンソール

  1. POST _snapshot/my_repository/my_snapshot_2099.05.06/_restore
  2. {
  3. "indices": "my-index,logs-my_app-default"
  4. }

復元時に名前を変更

既存のデータを削除したくない場合は、復元するインデックスやデータストリームの名前を変更することができます。通常、この方法は既存のデータとスナップショットからの履歴データを比較するために使用されます。たとえば、偶発的な更新や削除の後にドキュメントを確認するためにこの方法を使用できます。

開始する前に、クラスターが既存のデータと復元されたデータの両方に十分な容量を持っていることを確認してください。

次の復元スナップショットAPIリクエストは、復元されたインデックスまたはデータストリームの名前の先頭にrestored-を追加します。

Python

  1. resp = client.snapshot.restore(
  2. repository="my_repository",
  3. snapshot="my_snapshot_2099.05.06",
  4. indices="my-index,logs-my_app-default",
  5. rename_pattern="(.+)",
  6. rename_replacement="restored-$1",
  7. )
  8. print(resp)

Ruby

  1. response = client.snapshot.restore(
  2. repository: 'my_repository',
  3. snapshot: 'my_snapshot_2099.05.06',
  4. body: {
  5. indices: 'my-index,logs-my_app-default',
  6. rename_pattern: '(.+)',
  7. rename_replacement: 'restored-$1'
  8. }
  9. )
  10. puts response

Js

  1. const response = await client.snapshot.restore({
  2. repository: "my_repository",
  3. snapshot: "my_snapshot_2099.05.06",
  4. indices: "my-index,logs-my_app-default",
  5. rename_pattern: "(.+)",
  6. rename_replacement: "restored-$1",
  7. });
  8. console.log(response);

コンソール

  1. POST _snapshot/my_repository/my_snapshot_2099.05.06/_restore
  2. {
  3. "indices": "my-index,logs-my_app-default",
  4. "rename_pattern": "(.+)",
  5. "rename_replacement": "restored-$1"
  6. }

名前変更オプションが同じ名前のインデックスやデータストリームを2つ以上生成する場合、復元操作は失敗します。

データストリームの名前を変更すると、そのバックインデックスも名前が変更されます。たとえば、logs-my_app-defaultデータストリームの名前をrestored-logs-my_app-defaultに変更すると、バックインデックス.ds-logs-my_app-default-2099.03.09-000005の名前が.ds-restored-logs-my_app-default-2099.03.09-000005に変更されます。

復元操作が完了すると、元のデータと復元されたデータを比較できます。元のインデックスやデータストリームがもはや必要ない場合は、それを削除し、再インデックスを使用して復元されたものの名前を変更できます。

Python

  1. resp = client.indices.delete(
  2. index="my-index",
  3. )
  4. print(resp)
  5. resp1 = client.reindex(
  6. source={
  7. "index": "restored-my-index"
  8. },
  9. dest={
  10. "index": "my-index"
  11. },
  12. )
  13. print(resp1)
  14. resp2 = client.indices.delete_data_stream(
  15. name="logs-my_app-default",
  16. )
  17. print(resp2)
  18. resp3 = client.reindex(
  19. source={
  20. "index": "restored-logs-my_app-default"
  21. },
  22. dest={
  23. "index": "logs-my_app-default",
  24. "op_type": "create"
  25. },
  26. )
  27. print(resp3)

Ruby

  1. response = client.indices.delete(
  2. index: 'my-index'
  3. )
  4. puts response
  5. response = client.reindex(
  6. body: {
  7. source: {
  8. index: 'restored-my-index'
  9. },
  10. dest: {
  11. index: 'my-index'
  12. }
  13. }
  14. )
  15. puts response
  16. response = client.indices.delete_data_stream(
  17. name: 'logs-my_app-default'
  18. )
  19. puts response
  20. response = client.reindex(
  21. body: {
  22. source: {
  23. index: 'restored-logs-my_app-default'
  24. },
  25. dest: {
  26. index: 'logs-my_app-default',
  27. op_type: 'create'
  28. }
  29. }
  30. )
  31. puts response

Js

  1. const response = await client.indices.delete({
  2. index: "my-index",
  3. });
  4. console.log(response);
  5. const response1 = await client.reindex({
  6. source: {
  7. index: "restored-my-index",
  8. },
  9. dest: {
  10. index: "my-index",
  11. },
  12. });
  13. console.log(response1);
  14. const response2 = await client.indices.deleteDataStream({
  15. name: "logs-my_app-default",
  16. });
  17. console.log(response2);
  18. const response3 = await client.reindex({
  19. source: {
  20. index: "restored-logs-my_app-default",
  21. },
  22. dest: {
  23. index: "logs-my_app-default",
  24. op_type: "create",
  25. },
  26. });
  27. console.log(response3);

コンソール

  1. # 元のインデックスを削除する
  2. DELETE my-index
  3. # 復元されたインデックスの名前を変更するために再インデックスする
  4. POST _reindex
  5. {
  6. "source": {
  7. "index": "restored-my-index"
  8. },
  9. "dest": {
  10. "index": "my-index"
  11. }
  12. }
  13. # 元のデータストリームを削除する
  14. DELETE _data_stream/logs-my_app-default
  15. # 復元されたデータストリームの名前を変更するために再インデックスする
  16. POST _reindex
  17. {
  18. "source": {
  19. "index": "restored-logs-my_app-default"
  20. },
  21. "dest": {
  22. "index": "logs-my_app-default",
  23. "op_type": "create"
  24. }
  25. }

機能状態を復元する

スナップショットからシステムインデックス、システムデータストリーム、および機能の他の設定データを回復するために、機能状態を復元できます。

スナップショットのクラスター状態を復元する場合、操作はデフォルトでスナップショット内のすべての機能状態を復元します。同様に、スナップショットのクラスター状態を復元しない場合、操作はデフォルトで機能状態を復元しません。スナップショットから特定の機能状態のみを復元することもできます。クラスター状態に関係なく。

スナップショットの機能状態を表示するには、get snapshot APIを使用します。

Python

  1. resp = client.snapshot.get(
  2. repository="my_repository",
  3. snapshot="my_snapshot_2099.05.06",
  4. )
  5. print(resp)

Ruby

  1. response = client.snapshot.get(
  2. repository: 'my_repository',
  3. snapshot: 'my_snapshot_2099.05.06'
  4. )
  5. puts response

Js

  1. const response = await client.snapshot.get({
  2. repository: "my_repository",
  3. snapshot: "my_snapshot_2099.05.06",
  4. });
  5. console.log(response);

コンソール

  1. GET _snapshot/my_repository/my_snapshot_2099.05.06

レスポンスのfeature_statesプロパティには、スナップショット内の機能のリストと各機能のインデックスが含まれています。

スナップショットから特定の機能状態を復元するには、レスポンスからfeature_nameを指定し、restore snapshot APIのfeature_statesパラメータに渡します。

機能状態を復元すると、Elasticsearchは機能の既存のインデックスを閉じて上書きします。

security機能状態を復元すると、認証に使用されるシステムインデックスが上書きされます。Elasticsearch Serviceを使用している場合は、security機能状態を復元する前にElasticsearch Service Consoleにアクセスできることを確認してください。自分のハードウェアでElasticsearchを実行している場合は、ファイル領域にスーパーユーザーを作成して、クラスターにアクセスできるようにしてください。

Python

  1. resp = client.snapshot.restore(
  2. repository="my_repository",
  3. snapshot="my_snapshot_2099.05.06",
  4. feature_states=[
  5. "geoip"
  6. ],
  7. include_global_state=False,
  8. indices="-*",
  9. )
  10. print(resp)

Ruby

  1. response = client.snapshot.restore(
  2. repository: 'my_repository',
  3. snapshot: 'my_snapshot_2099.05.06',
  4. body: {
  5. feature_states: [
  6. 'geoip'
  7. ],
  8. include_global_state: false,
  9. indices: '-*'
  10. }
  11. )
  12. puts response

Js

  1. const response = await client.snapshot.restore({
  2. repository: "my_repository",
  3. snapshot: "my_snapshot_2099.05.06",
  4. feature_states: ["geoip"],
  5. include_global_state: false,
  6. indices: "-*",
  7. });
  8. console.log(response);

コンソール

  1. POST _snapshot/my_repository/my_snapshot_2099.05.06/_restore
  2. {
  3. "feature_states": [ "geoip" ],
  4. "include_global_state": false,
  5. "indices": "-*"
  6. }
復元操作からクラスター状態を除外します。
スナップショット内の他のインデックスやデータストリームを復元操作から除外します。

クラスター全体を復元する

場合によっては、スナップショットからクラスター全体を復元する必要があります。これには、クラスター状態とすべての機能状態が含まれます。これらのケースは、壊滅的な障害が発生した場合など、稀であるべきです。

クラスター全体を復元するには、認証に使用される重要なシステムインデックスを削除する必要があります。特定のインデックスやデータストリームを復元できるかどうかを検討してください。

別のクラスターに復元する場合は、開始する前に別のクラスターへの復元を参照してください。

  • 1. クラスターの設定ファイルをバックアップしている場合は、各ノードに復元できます。このステップはオプションであり、フルクラスター再起動が必要です。
    ノードをシャットダウンした後、バックアップした設定ファイルをノードの$ES_PATH_CONFディレクトリにコピーします。ノードを再起動する前に、elasticsearch.ymlに適切なノードロール、ノード名、およびその他のノード固有の設定が含まれていることを確認してください。
    このステップを実行する場合は、クラスター内の各ノードでこのプロセスを繰り返す必要があります。
  • 2. インデクシングを一時的に停止し、次の機能をオフにします:
    • GeoIPデータベースダウンローダーとILM履歴ストア

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "ingest.geoip.downloader.enabled": False,
  4. "indices.lifecycle.history_index_enabled": False
  5. },
  6. )
  7. print(resp)

Ruby

  1. response = client.cluster.put_settings(
  2. body: {
  3. persistent: {
  4. 'ingest.geoip.downloader.enabled' => false,
  5. 'indices.lifecycle.history_index_enabled' => false
  6. }
  7. }
  8. )
  9. puts response

Js

  1. const response = await client.cluster.putSettings({
  2. persistent: {
  3. "ingest.geoip.downloader.enabled": false,
  4. "indices.lifecycle.history_index_enabled": false,
  5. },
  6. });
  7. console.log(response);

コンソール

  1. PUT _cluster/settings
  2. {
  3. "persistent": {
  4. "ingest.geoip.downloader.enabled": false,
  5. "indices.lifecycle.history_index_enabled": false
  6. }
  7. }
  • ILM

Python

  1. resp = client.ilm.stop()
  2. print(resp)

Ruby

  1. response = client.ilm.stop
  2. puts response

Js

  1. const response = await client.ilm.stop();
  2. console.log(response);

コンソール

  1. POST _ilm/stop
  • 機械学習

Python

  1. resp = client.ml.set_upgrade_mode(
  2. enabled=True,
  3. )
  4. print(resp)

Ruby

  1. response = client.ml.set_upgrade_mode(
  2. enabled: true
  3. )
  4. puts response

Js

  1. const response = await client.ml.setUpgradeMode({
  2. enabled: "true",
  3. });
  4. console.log(response);

コンソール

  1. POST _ml/set_upgrade_mode?enabled=true
  • 監視

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "xpack.monitoring.collection.enabled": False
  4. },
  5. )
  6. print(resp)

Ruby

  1. response = client.cluster.put_settings(
  2. body: {
  3. persistent: {
  4. 'xpack.monitoring.collection.enabled' => false
  5. }
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.cluster.putSettings({
  2. persistent: {
  3. "xpack.monitoring.collection.enabled": false,
  4. },
  5. });
  6. console.log(response);

コンソール

  1. PUT _cluster/settings
  2. {
  3. "persistent": {
  4. "xpack.monitoring.collection.enabled": false
  5. }
  6. }
  • ウォッチャー

Python

  1. resp = client.watcher.stop()
  2. print(resp)

Ruby

  1. response = client.watcher.stop
  2. puts response

Js

  1. const response = await client.watcher.stop();
  2. console.log(response);

コンソール

  1. POST _watcher/_stop
  • ユニバーサルプロファイリング
    ユニバーサルプロファイリングインデックステンプレート管理が有効になっているか確認します:

Python

  1. resp = client.cluster.get_settings(
  2. filter_path="**.xpack.profiling.templates.enabled",
  3. include_defaults=True,
  4. )
  5. print(resp)

Ruby

  1. response = client.cluster.get_settings(
  2. filter_path: '**.xpack.profiling.templates.enabled',
  3. include_defaults: true
  4. )
  5. puts response

Js

  1. const response = await client.cluster.getSettings({
  2. filter_path: "**.xpack.profiling.templates.enabled",
  3. include_defaults: "true",
  4. });
  5. console.log(response);

コンソール

  1. GET /_cluster/settings?filter_path=**.xpack.profiling.templates.enabled&include_defaults=true

値がtrueの場合、ユニバーサルプロファイリングインデックステンプレート管理を無効にします:

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "xpack.profiling.templates.enabled": False
  4. },
  5. )
  6. print(resp)

Ruby

  1. response = client.cluster.put_settings(
  2. body: {
  3. persistent: {
  4. 'xpack.profiling.templates.enabled' => false
  5. }
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.cluster.putSettings({
  2. persistent: {
  3. "xpack.profiling.templates.enabled": false,
  4. },
  5. });
  6. console.log(response);

コンソール

  1. PUT _cluster/settings
  2. {
  3. "persistent": {
  4. "xpack.profiling.templates.enabled": false
  5. }
  6. }
  • 3. Elasticsearchのセキュリティ機能を使用している場合は、ノードホストにログインし、Elasticsearchインストールディレクトリに移動し、elasticsearch-usersツールを使用してファイル領域にsuperuserロールを持つユーザーを追加します。
    たとえば、次のコマンドはrestore_userという名前のユーザーを作成します。
    1. ./bin/elasticsearch-users useradd restore_user -p my_password -r superuser
    このファイル領域ユーザーを使用して、復元操作が完了するまでリクエストを認証します。
  • 4. cluster update settings APIを使用して、action.destructive_requires_namefalseに設定します。これにより、ワイルドカードを使用してデータストリームやインデックスを削除できます。

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "action.destructive_requires_name": False
  4. },
  5. )
  6. print(resp)

Ruby

  1. response = client.cluster.put_settings(
  2. body: {
  3. persistent: {
  4. 'action.destructive_requires_name' => false
  5. }
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.cluster.putSettings({
  2. persistent: {
  3. "action.destructive_requires_name": false,
  4. },
  5. });
  6. console.log(response);

コンソール

  1. PUT _cluster/settings
  2. {
  3. "persistent": {
  4. "action.destructive_requires_name": false
  5. }
  6. }
  • 5. クラスター上のすべての既存のデータストリームを削除します。

Python

  1. resp = client.indices.delete_data_stream(
  2. name="*",
  3. expand_wildcards="all",
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.delete_data_stream(
  2. name: '*',
  3. expand_wildcards: 'all'
  4. )
  5. puts response

Js

  1. const response = await client.indices.deleteDataStream({
  2. name: "*",
  3. expand_wildcards: "all",
  4. });
  5. console.log(response);

コンソール

  1. DELETE _data_stream/*?expand_wildcards=all
  • 6. クラスター上のすべての既存のインデックスを削除します。

Python

  1. resp = client.indices.delete(
  2. index="*",
  3. expand_wildcards="all",
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.delete(
  2. index: '*',
  3. expand_wildcards: 'all'
  4. )
  5. puts response

Js

  1. const response = await client.indices.delete({
  2. index: "*",
  3. expand_wildcards: "all",
  4. });
  5. console.log(response);

コンソール

  1. DELETE *?expand_wildcards=all
  • 7. スナップショット全体を復元し、クラスター状態を含めます。デフォルトでは、クラスター状態を復元すると、スナップショット内の機能状態も復元されます。

Python

  1. resp = client.snapshot.restore(
  2. repository="my_repository",
  3. snapshot="my_snapshot_2099.05.06",
  4. indices="*",
  5. include_global_state=True,
  6. )
  7. print(resp)

Ruby

  1. response = client.snapshot.restore(
  2. repository: 'my_repository',
  3. snapshot: 'my_snapshot_2099.05.06',
  4. body: {
  5. indices: '*',
  6. include_global_state: true
  7. }
  8. )
  9. puts response

Js

  1. const response = await client.snapshot.restore({
  2. repository: "my_repository",
  3. snapshot: "my_snapshot_2099.05.06",
  4. indices: "*",
  5. include_global_state: true,
  6. });
  7. console.log(response);

コンソール

  1. POST _snapshot/my_repository/my_snapshot_2099.05.06/_restore
  2. {
  3. "indices": "*",
  4. "include_global_state": true
  5. }
  • 8. 復元操作が完了したら、インデクシングを再開し、停止した機能を再起動します:
    スナップショットが復元されると、スナップショットが取得された時点で使用されていたライセンスも復元されます。スナップショットが取得されて以来ライセンスが期限切れになっている場合は、Update License APIを使用して現在のライセンスをインストールする必要があります。
    • GeoIPデータベースダウンローダーとILM履歴ストア

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "ingest.geoip.downloader.enabled": True,
  4. "indices.lifecycle.history_index_enabled": True
  5. },
  6. )
  7. print(resp)

Ruby

  1. response = client.cluster.put_settings(
  2. body: {
  3. persistent: {
  4. 'ingest.geoip.downloader.enabled' => true,
  5. 'indices.lifecycle.history_index_enabled' => true
  6. }
  7. }
  8. )
  9. puts response

Js

  1. const response = await client.cluster.putSettings({
  2. persistent: {
  3. "ingest.geoip.downloader.enabled": true,
  4. "indices.lifecycle.history_index_enabled": true,
  5. },
  6. });
  7. console.log(response);

コンソール

  1. PUT _cluster/settings
  2. {
  3. "persistent": {
  4. "ingest.geoip.downloader.enabled": true,
  5. "indices.lifecycle.history_index_enabled": true
  6. }
  7. }
  • ILM

Python

  1. resp = client.ilm.start()
  2. print(resp)

Ruby

  1. response = client.ilm.start
  2. puts response

Js

  1. const response = await client.ilm.start();
  2. console.log(response);

コンソール

  1. POST _ilm/start
  • 機械学習

Python

  1. resp = client.ml.set_upgrade_mode(
  2. enabled=False,
  3. )
  4. print(resp)

Ruby

  1. response = client.ml.set_upgrade_mode(
  2. enabled: false
  3. )
  4. puts response

Js

  1. const response = await client.ml.setUpgradeMode({
  2. enabled: "false",
  3. });
  4. console.log(response);

コンソール

  1. POST _ml/set_upgrade_mode?enabled=false
  • 監視

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "xpack.monitoring.collection.enabled": True
  4. },
  5. )
  6. print(resp)

Ruby

  1. response = client.cluster.put_settings(
  2. body: {
  3. persistent: {
  4. 'xpack.monitoring.collection.enabled' => true
  5. }
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.cluster.putSettings({
  2. persistent: {
  3. "xpack.monitoring.collection.enabled": true,
  4. },
  5. });
  6. console.log(response);

コンソール

  1. PUT _cluster/settings
  2. {
  3. "persistent": {
  4. "xpack.monitoring.collection.enabled": true
  5. }
  6. }
  • ウォッチャー

Python

  1. resp = client.watcher.start()
  2. print(resp)

Ruby

  1. response = client.watcher.start
  2. puts response

Js

  1. const response = await client.watcher.start();
  2. console.log(response);

コンソール

  1. POST _watcher/_start
  • ユニバーサルプロファイリング
    値がtrueの場合、ユニバーサルプロファイリングインデックステンプレート管理を再度有効にし、それ以外はこのステップをスキップします:

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "xpack.profiling.templates.enabled": True
  4. },
  5. )
  6. print(resp)

Ruby

  1. response = client.cluster.put_settings(
  2. body: {
  3. persistent: {
  4. 'xpack.profiling.templates.enabled' => true
  5. }
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.cluster.putSettings({
  2. persistent: {
  3. "xpack.profiling.templates.enabled": true,
  4. },
  5. });
  6. console.log(response);

コンソール

  1. PUT _cluster/settings
  2. {
  3. "persistent": {
  4. "xpack.profiling.templates.enabled": true
  5. }
  6. }
  • 9. 必要に応じて、action.destructive_requires_nameクラスター設定をリセットします。

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "action.destructive_requires_name": None
  4. },
  5. )
  6. print(resp)

Ruby

  1. response = client.cluster.put_settings(
  2. body: {
  3. persistent: {
  4. 'action.destructive_requires_name' => nil
  5. }
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.cluster.putSettings({
  2. persistent: {
  3. "action.destructive_requires_name": null,
  4. },
  5. });
  6. console.log(response);

コンソール

  1. PUT _cluster/settings
  2. {
  3. "persistent": {
  4. "action.destructive_requires_name": null
  5. }
  6. }

復元を監視する

復元操作は、シャード回復プロセスを使用して、スナップショットからインデックスのプライマリシャードを復元します。復元操作がプライマリシャードを回復している間、クラスターはyellowヘルスステータスを持ちます。

すべてのプライマリシャードが回復されると、レプリケーションプロセスが開始され、適格なデータノードにレプリカを作成して配布します。レプリケーションが完了すると、クラスターのヘルスステータスは通常greenになります。

Kibanaで復元を開始すると、復元ステータスページに移動します。このページを使用して、スナップショット内の各シャードの現在の状態を追跡できます。

Elasticsearch APIを使用してスナップショットの回復を監視することもできます。クラスターのヘルスステータスを監視するには、クラスター健康APIを使用します。

Php

  1. $response = $client->cluster()->health();

Python

  1. resp = client.cluster.health()
  2. print(resp)

Ruby

  1. response = client.cluster.health
  2. puts response

Go

  1. res, err := es.Cluster.Health()
  2. fmt.Println(res, err)

Js

  1. const response = await client.cluster.health();
  2. console.log(response);

コンソール

  1. GET _cluster/health

進行中のシャード回復に関する詳細情報を取得するには、インデックス回復APIを使用します。

Python

  1. resp = client.indices.recovery(
  2. index="my-index",
  3. )
  4. print(resp)

Ruby

  1. response = client.indices.recovery(
  2. index: 'my-index'
  3. )
  4. puts response

Js

  1. const response = await client.indices.recovery({
  2. index: "my-index",
  3. });
  4. console.log(response);

スナップショットの復元

このガイドでは、スナップショットを復元する方法を示します。スナップショットは、クラスターの外部にデータのコピーを保存する便利な方法です。スナップショットを復元することで、削除後やハードウェアの故障後にインデックスやデータストリームを回復できます。また、スナップショットを使用してクラスター間でデータを転送することもできます。

このガイドでは、以下のことを学びます:

  • 利用可能なスナップショットのリストを取得する
  • スナップショットからインデックスまたはデータストリームを復元する
  • 機能状態を復元する
  • クラスター全体を復元する
  • 復元操作を監視する
  • 進行中の復元をキャンセルする

このガイドでは、別のクラスターへの復元一般的な復元エラーのトラブルシューティングに関するヒントも提供します。

Python

  1. resp = client.cat.shards(
  2. v=True,
  3. h="index,shard,prirep,state,node,unassigned.reason",
  4. s="state",
  5. )
  6. print(resp)

Ruby

  1. response = client.cat.shards(
  2. v: true,
  3. h: 'index,shard,prirep,state,node,unassigned.reason',
  4. s: 'state'
  5. )
  6. puts response

Js

  1. const response = await client.cat.shards({
  2. v: "true",
  3. h: "index,shard,prirep,state,node,unassigned.reason",
  4. s: "state",
  5. });
  6. console.log(response);

コンソール

  1. GET _cat/shards?v=true&h=index,shard,prirep,state,node,unassigned.reason&s=state

復元をキャンセルする

インデックスまたはデータストリームを削除して、進行中の復元をキャンセルできます。これにより、インデックスまたはデータストリームのためにクラスター内の既存のデータも削除されます。インデックスまたはデータストリームを削除しても、スナップショットやそのデータには影響しません。

Python

  1. response = client.cluster.allocation_explain(
  2. body: {
  3. index: 'my-index',
  4. shard: 0,
  5. primary: false,
  6. current_node: 'my-node'
  7. }
  8. )
  9. puts response

Ruby

  1. const response = await client.cluster.allocationExplain({
  2. index: "my-index",
  3. shard: 0,
  4. primary: false,
  5. current_node: "my-node",
  6. });
  7. console.log(response);

Js

  1. GET _cluster/allocation/explain
  2. {
  3. "index": "my-index",
  4. "shard": 0,
  5. "primary": false,
  6. "current_node": "my-node"
  7. }

コンソール

  1. #### インデックスを削除する
  2. DELETE my-index
  3. #### データストリームを削除する
  4. DELETE _data_stream/logs-my_app-default

スナップショットの復元

このガイドでは、スナップショットを復元する方法を示します。スナップショットは、クラスターの外部にデータのコピーを保存する便利な方法です。スナップショットを復元することで、削除後やハードウェアの故障後にインデックスやデータストリームを回復できます。また、スナップショットを使用してクラスター間でデータを転送することもできます。

このガイドでは、以下のことを学びます:

  • 利用可能なスナップショットのリストを取得する
  • スナップショットからインデックスまたはデータストリームを復元する
  • 機能状態を復元する
  • クラスター全体を復元する
  • 復元操作を監視する
  • 進行中の復元をキャンセルする

このガイドでは、別のクラスターへの復元一般的な復元エラーのトラブルシューティングに関するヒントも提供します。

コンソール

  1. # インデックスの削除
  2. DELETE my-index
  3. # データストリームの削除
  4. DELETE _data_stream/logs-my_app-default

別のクラスターへの復元

Elasticsearch Serviceは、他のデプロイメントからスナップショットを復元するのに役立ちます。詳細はスナップショットの操作を参照してください。

スナップショットは特定のクラスターやクラスター名に結びついていません。1つのクラスターでスナップショットを作成し、別の互換性のあるクラスターで復元できます。スナップショットから復元するデータストリームやインデックスは、現在のクラスターのバージョンと互換性がある必要があります。クラスターのトポロジーは一致する必要はありません。

スナップショットを復元するには、そのリポジトリが登録されている必要があり、新しいクラスターで利用可能でなければなりません。元のクラスターがリポジトリへの書き込みアクセスを持っている場合は、リポジトリを読み取り専用として登録してください。これにより、複数のクラスターが同時にリポジトリに書き込むことを防ぎ、リポジトリの内容が破損するのを防ぎます。また、Elasticsearchがリポジトリの内容をキャッシュするのを防ぎ、他のクラスターによって行われた変更がすぐに表示されるようになります。

復元操作を開始する前に、新しいクラスターが復元したいデータストリームやインデックスのために十分な容量を持っていることを確認してください。新しいクラスターの容量が小さい場合は、次のことができます:

  • ノードを追加するか、ハードウェアをアップグレードして容量を増やす。
  • 復元するインデックスやデータストリームを減らす。
  • 復元されたインデックスのレプリカの数を減らす。
    例えば、次の復元スナップショットAPIリクエストは、index_settingsオプションを使用してindex.number_of_replicas1に設定します。

Python

  1. resp = client.snapshot.restore(
  2. repository="my_repository",
  3. snapshot="my_snapshot_2099.05.06",
  4. indices="my-index,logs-my_app-default",
  5. index_settings={
  6. "index.number_of_replicas": 1
  7. },
  8. )
  9. print(resp)

Ruby

  1. response = client.snapshot.restore(
  2. repository: 'my_repository',
  3. snapshot: 'my_snapshot_2099.05.06',
  4. body: {
  5. indices: 'my-index,logs-my_app-default',
  6. index_settings: {
  7. 'index.number_of_replicas' => 1
  8. }
  9. }
  10. )
  11. puts response

Js

  1. const response = await client.snapshot.restore({
  2. repository: "my_repository",
  3. snapshot: "my_snapshot_2099.05.06",
  4. indices: "my-index,logs-my_app-default",
  5. index_settings: {
  6. "index.number_of_replicas": 1,
  7. },
  8. });
  9. console.log(response);

コンソール

  1. POST _snapshot/my_repository/my_snapshot_2099.05.06/_restore
  2. {
  3. "indices": "my-index,logs-my_app-default",
  4. "index_settings": {
  5. "index.number_of_replicas": 1
  6. }
  7. }

元のクラスターのインデックスやバックインデックスがシャード割り当てフィルタリングを使用して特定のノードに割り当てられていた場合、新しいクラスターでも同じルールが適用されます。新しいクラスターに復元されたインデックスを割り当てることができる適切な属性を持つノードが含まれていない場合、インデックスは復元されません。復元操作中にこれらのインデックス割り当て設定が変更されない限り、インデックスは正常に復元されません。

復元操作は、復元された永続的設定が現在のクラスターと互換性があることを確認し、互換性のない設定が誤って復元されるのを防ぎます。互換性のない永続的設定を持つスナップショットを復元する必要がある場合は、グローバルクラスター状態なしで復元を試みてください。

復元エラーのトラブルシューティング

復元リクエストによって返される一般的なエラーを解決する方法は次のとおりです。

インデックス [\u0026lt;index \u0026gt;] を復元できません。クラスターに同じ名前のオープンインデックスが既に存在します。

既に存在するオープンインデックスを復元することはできません。このエラーを解決するには、インデックスまたはデータストリームを復元するのメソッドのいずれかを試してください。

インデックス [\u0026lt;index \u0026gt;] を復元できません。スナップショットのインデックス [\u0026lt;snapshot-index \u0026gt;] のシャード数 [x] と異なります。

既存のインデックスを復元できるのは、クローズされていて、スナップショット内のインデックスが同じ数のプライマリシャードを持っている場合のみです。このエラーは、スナップショット内のインデックスが異なる数のプライマリシャードを持っていることを示しています。

このエラーを解決するには、インデックスまたはデータストリームを復元するのメソッドのいずれかを試してください。