クローンインデックスAPI
既存のインデックスをクローンします。
Python
resp = client.indices.clone(
index="my-index-000001",
target="cloned-my-index-000001",
)
print(resp)
Js
const response = await client.indices.clone({
index: "my-index-000001",
target: "cloned-my-index-000001",
});
console.log(response);
コンソール
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
resp = client.indices.add_block(
index="my_source_index",
block="write",
)
print(resp)
Ruby
response = client.indices.add_block(
index: 'my_source_index',
block: 'write'
)
puts response
Js
const response = await client.indices.addBlock({
index: "my_source_index",
block: "write",
});
console.log(response);
コンソール
PUT /my_source_index/_block/write
データストリームの現在の書き込みインデックスはクローンできません。現在の書き込みインデックスをクローンするには、データストリームを最初にロールオーバーして新しい書き込みインデックスを作成し、その後に以前の書き込みインデックスをクローンする必要があります。
説明
クローンインデックスAPIを使用して、既存のインデックスを新しいインデックスにクローンします。このとき、元のプライマリシャードは新しいインデックスの新しいプライマリシャードにクローンされます。
Elasticsearchは、結果のインデックスにインデックステンプレートを適用しません。また、APIは元のインデックスからインデックスメタデータをコピーしません。インデックスメタデータには、エイリアス、ILMフェーズ定義、およびCCRフォロワー情報が含まれます。たとえば、CCRフォロワーインデックスをクローンすると、結果のクローンはフォロワーインデックスにはなりません。
クローンAPIは、index.number_of_replicas
およびindex.auto_expand_replicas
を除いて、ソースインデックスから結果のインデックスにほとんどのインデックス設定をコピーします。結果のインデックスのレプリカ数を設定するには、クローンリクエストでこれらの設定を構成します。
クローンの仕組み
クローンは次のように機能します:
- 最初に、ソースインデックスと同じ定義を持つ新しいターゲットインデックスを作成します。
- 次に、ソースインデックスからターゲットインデックスにセグメントをハードリンクします。(ファイルシステムがハードリンクをサポートしていない場合、すべてのセグメントが新しいインデックスにコピーされ、これははるかに時間がかかるプロセスです。)
- 最後に、ターゲットインデックスを閉じたインデックスとして回復し、再オープンされたかのようにします。
インデックスをクローンする
#### Python
``````python
resp = client.indices.clone(
index="my_source_index",
target="my_target_index",
)
print(resp)
`
Ruby
response = client.indices.clone(
index: 'my_source_index',
target: 'my_target_index'
)
puts response
Js
const response = await client.indices.clone({
index: "my_source_index",
target: "my_target_index",
});
console.log(response);
コンソール
POST /my_source_index/_clone/my_target_index
上記のリクエストは、ターゲットインデックスがクラスタ状態に追加されるとすぐに返されます。クローン操作が開始されるのを待ちません。
インデックスは、次の要件を満たす場合にのみクローンできます:
- ターゲットインデックスは存在してはいけません。
- ソースインデックスは、ターゲットインデックスと同じ数のプライマリシャードを持っている必要があります。
- クローンプロセスを処理するノードは、既存のインデックスの2番目のコピーを収容するのに十分な空きディスクスペースを持っている必要があります。
_clone
APIは、create index
APIに似ており、ターゲットインデックスのためのsettings
およびaliases
パラメータを受け入れます:
Python
resp = client.indices.clone(
index="my_source_index",
target="my_target_index",
settings={
"index.number_of_shards": 5
},
aliases={
"my_search_indices": {}
},
)
print(resp)
Ruby
response = client.indices.clone(
index: 'my_source_index',
target: 'my_target_index',
body: {
settings: {
'index.number_of_shards' => 5
},
aliases: {
my_search_indices: {}
}
}
)
puts response
Js
const response = await client.indices.clone({
index: "my_source_index",
target: "my_target_index",
settings: {
"index.number_of_shards": 5,
},
aliases: {
my_search_indices: {},
},
});
console.log(response);
コンソール
POST /my_source_index/_clone/my_target_index
{
"settings": {
"index.number_of_shards": 5
},
"aliases": {
"my_search_indices": {}
}
}
ターゲットインデックスのシャード数。この数はソースインデックスのシャード数と等しくなければなりません。 |
マッピングは_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
- (オプション、オブジェクトのオブジェクト)結果のインデックスのエイリアス。
- `````<alias>
- (必須、オブジェクト)キーはエイリアス名です。インデックスエイリアス名は日付数学をサポートします。
オブジェクトボディにはエイリアスのオプションが含まれます。空のオブジェクトをサポートします。- `````filter
- (オプション、クエリDSLオブジェクト)エイリアスがアクセスできるドキュメントを制限するために使用されるクエリ。
index_routing
- (オプション、文字列)インデックス操作を特定のシャードにルーティングするために使用される値。指定された場合、これはインデックス操作の
routing
値を上書きします。 is_hidden
- (オプション、ブール値)
true
の場合、エイリアスは隠しです。デフォルトはfalse
です。エイリアスのすべてのインデックスは同じis_hidden
値を持っている必要があります。 is_write_index
- (オプション、ブール値)
true
の場合、インデックスはエイリアスの書き込みインデックスです。デフォルトはfalse
です。 routing
- (オプション、文字列)インデックス操作と検索操作を特定のシャードにルーティングするために使用される値。
search_routing
- (オプション、文字列)検索操作を特定のシャードにルーティングするために使用される値。指定された場合、これは検索操作の
routing
値を上書きします。
settings
- (オプション、インデックス設定オブジェクト)ターゲットインデックスの構成オプション。 インデックス設定を参照してください。