クローンインデックスAPI

既存のインデックスをクローンします。

Python

  1. resp = client.indices.clone(
  2. index="my-index-000001",
  3. target="cloned-my-index-000001",
  4. )
  5. print(resp)

Js

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

コンソール

  1. POST /my-index-000001/_clone/cloned-my-index-000001

リクエスト

POST /<index>/_clone/<target-index>

PUT /<index>/_clone/<target-index>

前提条件

  • Elasticsearchのセキュリティ機能が有効になっている場合、クローンしたいインデックスに対してmanage インデックス権限を持っている必要があります。
  • インデックスをクローンするには、そのインデックスが読み取り専用としてマークされ、クラスタヘルスの状態がgreenである必要があります。

例えば、以下のリクエストはmy_source_indexへの書き込み操作を防止するため、インデックスブロックを追加するAPIを使用してクローンできます。インデックスを削除するなどのメタデータの変更は引き続き許可されます。

Python

  1. resp = client.indices.add_block(
  2. index="my_source_index",
  3. block="write",
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.add_block(
  2. index: 'my_source_index',
  3. block: 'write'
  4. )
  5. puts response

Js

  1. const response = await client.indices.addBlock({
  2. index: "my_source_index",
  3. block: "write",
  4. });
  5. console.log(response);

コンソール

  1. PUT /my_source_index/_block/write

データストリームの現在の書き込みインデックスはクローンできません。現在の書き込みインデックスをクローンするには、データストリームを最初にロールオーバーして新しい書き込みインデックスを作成し、その後に以前の書き込みインデックスをクローンする必要があります。

説明

クローンインデックスAPIを使用して、既存のインデックスを新しいインデックスにクローンします。このとき、元のプライマリシャードは新しいインデックスの新しいプライマリシャードにクローンされます。

Elasticsearchは、結果のインデックスにインデックステンプレートを適用しません。また、APIは元のインデックスからインデックスメタデータをコピーしません。インデックスメタデータには、エイリアス、ILMフェーズ定義、およびCCRフォロワー情報が含まれます。たとえば、CCRフォロワーインデックスをクローンすると、結果のクローンはフォロワーインデックスにはなりません。

クローンAPIは、index.number_of_replicasおよびindex.auto_expand_replicasを除いて、ソースインデックスから結果のインデックスにほとんどのインデックス設定をコピーします。結果のインデックスのレプリカ数を設定するには、クローンリクエストでこれらの設定を構成します。

クローンの仕組み

クローンは次のように機能します:

  • 最初に、ソースインデックスと同じ定義を持つ新しいターゲットインデックスを作成します。
  • 次に、ソースインデックスからターゲットインデックスにセグメントをハードリンクします。(ファイルシステムがハードリンクをサポートしていない場合、すべてのセグメントが新しいインデックスにコピーされ、これははるかに時間がかかるプロセスです。)
  • 最後に、ターゲットインデックスを閉じたインデックスとして回復し、再オープンされたかのようにします。

インデックスをクローンする

  1. #### Python
  2. ``````python
  3. resp = client.indices.clone(
  4. index="my_source_index",
  5. target="my_target_index",
  6. )
  7. print(resp)
  8. `

Ruby

  1. response = client.indices.clone(
  2. index: 'my_source_index',
  3. target: 'my_target_index'
  4. )
  5. puts response

Js

  1. const response = await client.indices.clone({
  2. index: "my_source_index",
  3. target: "my_target_index",
  4. });
  5. console.log(response);

コンソール

  1. POST /my_source_index/_clone/my_target_index

上記のリクエストは、ターゲットインデックスがクラスタ状態に追加されるとすぐに返されます。クローン操作が開始されるのを待ちません。

インデックスは、次の要件を満たす場合にのみクローンできます:

  • ターゲットインデックスは存在してはいけません。
  • ソースインデックスは、ターゲットインデックスと同じ数のプライマリシャードを持っている必要があります。
  • クローンプロセスを処理するノードは、既存のインデックスの2番目のコピーを収容するのに十分な空きディスクスペースを持っている必要があります。

_clone APIは、create index APIに似ており、ターゲットインデックスのためのsettingsおよびaliasesパラメータを受け入れます:

Python

  1. resp = client.indices.clone(
  2. index="my_source_index",
  3. target="my_target_index",
  4. settings={
  5. "index.number_of_shards": 5
  6. },
  7. aliases={
  8. "my_search_indices": {}
  9. },
  10. )
  11. print(resp)

Ruby

  1. response = client.indices.clone(
  2. index: 'my_source_index',
  3. target: 'my_target_index',
  4. body: {
  5. settings: {
  6. 'index.number_of_shards' => 5
  7. },
  8. aliases: {
  9. my_search_indices: {}
  10. }
  11. }
  12. )
  13. puts response

Js

  1. const response = await client.indices.clone({
  2. index: "my_source_index",
  3. target: "my_target_index",
  4. settings: {
  5. "index.number_of_shards": 5,
  6. },
  7. aliases: {
  8. my_search_indices: {},
  9. },
  10. });
  11. console.log(response);

コンソール

  1. POST /my_source_index/_clone/my_target_index
  2. {
  3. "settings": {
  4. "index.number_of_shards": 5
  5. },
  6. "aliases": {
  7. "my_search_indices": {}
  8. }
  9. }
ターゲットインデックスのシャード数。この数はソースインデックスのシャード数と等しくなければなりません。

マッピングは_cloneリクエストで指定できません。ソースインデックスのマッピングがターゲットインデックスに使用されます。

クローンプロセスの監視

クローンプロセスは、_cat recovery APIで監視できます。また、cluster health APIを使用して、wait_for_statusパラメータをyellowに設定することで、すべてのプライマリシャードが割り当てられるまで待つこともできます。

_clone APIは、ターゲットインデックスがクラスタ状態に追加されるとすぐに返され、シャードが割り当てられる前に返されます。この時点で、すべてのシャードはunassignedの状態にあります。何らかの理由でターゲットインデックスが割り当てられない場合、そのプライマリシャードはunassignedのままで、そのノードに割り当てられるまで待機します。

プライマリシャードが割り当てられると、initializingの状態に移行し、クローンプロセスが開始されます。クローン操作が完了すると、シャードはactiveになります。この時点で、Elasticsearchはレプリカを割り当てようとし、プライマリシャードを別のノードに移動することを決定する場合があります。

アクティブシャードの待機

クローン操作は新しいインデックスを作成してシャードをクローンするため、インデックス作成時のアクティブシャードの待機設定はクローンインデックスアクションにも適用されます。

パスパラメータ

  • <index>
  • (必須、文字列)クローンするソースインデックスの名前。
  • <target-index>
  • (必須、文字列)作成するターゲットインデックスの名前。
    インデックス名は次の基準を満たす必要があります:
    • 小文字のみ
    • \/*?"<>| (スペース文字)、,#を含むことはできません。
    • 7.0以前のインデックスはコロン(:)を含むことができましたが、これは非推奨となり、7.0以降はサポートされません。
    • -_+で始まることはできません。
    • .または..であってはいけません。
    • 255バイトを超えてはいけません(バイト数であるため、マルチバイト文字は255の制限に早くカウントされます)。
    • .で始まる名前は非推奨ですが、隠しインデックスおよびプラグインによって管理される内部インデックスは除きます。

クエリパラメータ

  • wait_for_active_shards
  • (オプション、文字列)操作を進める前にアクティブでなければならないシャードのコピーの数。allまたはインデックス内のシャードの総数(number_of_replicas+1)までの任意の正の整数に設定します。デフォルト:1、プライマリシャード。
    アクティブシャードを参照してください。
  • master_timeout
  • (オプション、時間単位)マスターノードを待機する期間。タイムアウトが切れる前にマスターノードが利用できない場合、リクエストは失敗し、エラーが返されます。デフォルトは30sです。リクエストがタイムアウトしないことを示すために-1に設定することもできます。
  • timeout
  • (オプション、時間単位)クラスタメタデータを更新した後、クラスタ内のすべての関連ノードからの応答を待機する期間。タイムアウトが切れる前に応答が受信されない場合、クラスタメタデータの更新は適用されますが、応答は完全に承認されなかったことを示します。デフォルトは30sです。リクエストがタイムアウトしないことを示すために-1に設定することもできます。

リクエストボディ

  • aliases
  • (オプション、オブジェクトのオブジェクト)結果のインデックスのエイリアス。
    1. - `````<alias>
    • (必須、オブジェクト)キーはエイリアス名です。インデックスエイリアス名は日付数学をサポートします。
      オブジェクトボディにはエイリアスのオプションが含まれます。空のオブジェクトをサポートします。
      1. - `````filter
      • (オプション、クエリDSLオブジェクト)エイリアスがアクセスできるドキュメントを制限するために使用されるクエリ。
      • index_routing
      • (オプション、文字列)インデックス操作を特定のシャードにルーティングするために使用される値。指定された場合、これはインデックス操作のrouting値を上書きします。
      • is_hidden
      • (オプション、ブール値)trueの場合、エイリアスは隠しです。デフォルトはfalseです。エイリアスのすべてのインデックスは同じis_hidden値を持っている必要があります。
      • is_write_index
      • (オプション、ブール値)trueの場合、インデックスはエイリアスの書き込みインデックスです。デフォルトはfalseです。
      • routing
      • (オプション、文字列)インデックス操作と検索操作を特定のシャードにルーティングするために使用される値。
      • search_routing
      • (オプション、文字列)検索操作を特定のシャードにルーティングするために使用される値。指定された場合、これは検索操作のrouting値を上書きします。
  • settings
  • (オプション、インデックス設定オブジェクト)ターゲットインデックスの構成オプション。 インデックス設定を参照してください。