インデックス回復設定
ピア回復は、プライマリシャードから新しいまたは既存のシャードコピーにデータを同期します。
ピア回復は、Elasticsearchが次の操作を行うと自動的に発生します:
- ノード障害中に失われたシャードを再作成する
- クラスターのリバランスやシャード割り当て設定の変更により、シャードを別のノードに移動する
進行中および完了した回復のリストは、cat recovery APIを使用して表示できます。
回復設定
indices.recovery.max_bytes_per_sec
- (動的) 各ノードの総入出力回復トラフィックを制限します。ピア回復とスナップショット回復(すなわち、スナップショットからの復元)の両方に適用されます。ノードが専用のコールドまたはフローズンノードでない限り、デフォルトは
40mb
です。この場合、デフォルトはノードに利用可能な総メモリに関連します:
| 総メモリ | コールドおよびフローズンノードのデフォルト回復レート |
| :— | :— |
| ≤ 4 GB | 40 MB/s |
| > 4 GB および ≤ 8 GB | 60 MB/s |
| > 8 GB および ≤ 16 GB | 90 MB/s |
| > 16 GB および ≤ 32 GB | 125 MB/s |
| > 32 GB | 250 MB/s |
この制限は各ノードに個別に適用されます。クラスター内の複数のノードが同時に回復を実行する場合、クラスターの総回復トラフィックはこの制限を超える可能性があります。
この制限が高すぎる場合、進行中の回復が帯域幅や他のリソースを過剰に消費し、クラスターのパフォーマンスに影響を与え、極端な場合には不安定にする可能性があります。
これは動的設定であり、各ノードのelasticsearch.yml
設定ファイルで設定でき、クラスター更新設定APIを使用して動的に更新できます。動的に設定した場合、同じ制限がクラスター内のすべてのノードに適用されます。動的に設定しない場合は、各ノードに異なる制限を設定でき、これは一部のノードが他のノードよりも優れた帯域幅を持っている場合に便利です。たとえば、インデックスライフサイクル管理を使用している場合、ホットノードに対してウォームノードよりも高い回復帯域幅制限を設定できるかもしれません。
専門的なピア回復設定
次の専門的設定を使用して、ピア回復のリソースを管理できます。
indices.recovery.max_concurrent_file_chunks
- (動的, 専門) 各回復のために並行して送信されるファイルチャンクの数。デフォルトは
2
です。
この設定の値は、単一のシャードの回復がindices.recovery.max_bytes_per_sec
で設定されたトラフィック制限に達していない場合に増加させることができ、最大8
まで増加できます。 indices.recovery.max_concurrent_operations
- (動的, 専門) 各回復のために並行して送信される操作の数。デフォルトは
1
です。
回復中に操作を同時に再生することは非常にリソース集約的であり、インデックス作成、検索、クラスター内の他の活動に干渉する可能性があります。この設定を増加させる前に、クラスターが追加の負荷を処理するためのリソースを持っていることを慎重に確認してください。 indices.recovery.use_snapshots
- (動的, 専門) スナップショットベースのピア回復を有効にします。
Elasticsearchは、ピア回復プロセスを使用してレプリカを回復し、プライマリシャードを移動します。これには、ターゲットノードにシャードの新しいコピーを構築することが含まれます。indices.recovery.use_snapshots
がfalse
の場合、Elasticsearchは現在のプライマリからインデックスデータを転送することによってこの新しいコピーを構築します。この設定がtrue
の場合、Elasticsearchは最初に最近のスナップショットからインデックスデータをコピーし、適切なスナップショットを特定できない場合のみプライマリからデータをコピーします。デフォルトはtrue
です。
このオプションをtrue
に設定すると、クラスターがノード間のデータ転送コストがスナップショットからのデータ回復コストよりも高い環境で実行されている場合、運用コストが削減されます。また、回復中にプライマリが行う必要のある作業量も減少します。
さらに、use_for_peer_recovery=true
の設定を持つリポジトリが、シャードを回復する際に良好なスナップショットを見つけるために参照されます。登録されたリポジトリのいずれにもこの設定が定義されていない場合、インデックスファイルはソースノードから回復されます。 indices.recovery.max_concurrent_snapshot_file_downloads
- (動的, 専門) 各回復のためにターゲットノードに並行して送信されるスナップショットファイルダウンロードリクエストの数。デフォルトは
5
です。
この設定を増加させる前に、クラスターが追加の負荷を処理するためのリソースを持っていることを慎重に確認してください。 indices.recovery.max_concurrent_snapshot_file_downloads_per_node
- (動的, 専門) すべての回復のためにターゲットノードで並行して実行されるスナップショットファイルダウンロードリクエストの数。デフォルトは
25
です。
この設定を増加させる前に、クラスターが追加の負荷を処理するためのリソースを持っていることを慎重に確認してください。
管理サービスのための回復設定
この機能は、Elasticsearch Service、Elastic Cloud Enterprise、およびElastic Cloud on Kubernetesによる間接的な使用のために設計されています。直接使用はサポートされていません。
Elasticsearchを管理サービスとして実行する場合、次の設定により、サービスは各ノードのディスク読み取り、ディスク書き込み、およびネットワークトラフィックの絶対最大帯域幅を指定し、これらの絶対最大値に基づいて各ノードの最大回復帯域幅を制御できます。これには2つの効果があります:
- 1.
indices.recovery.max_bytes_per_sec
が設定されていない場合、回復に使用される帯域幅を決定し、上記のデフォルト動作を上書きします。 - 2.
indices.recovery.max_bytes_per_sec
の値に依存せず、回復帯域幅に対してノード全体の制限を課します。
`````indices.recovery.max_bytes_per_sec`````を設定した場合、Elasticsearchはその値を最大回復帯域幅として使用します。ただし、これはノード全体の制限を超えない限りです。Elasticsearchは、絶対最大帯域幅に`````node.bandwidth.recovery.operator.factor.max_overcommit`````係数を掛けることによってノード全体の制限を計算します。`````indices.recovery.max_bytes_per_sec`````をノード全体の制限を超えて設定した場合、ノード全体の制限が優先されます。
サービスは、回復のようなワークロードを使用して実験により絶対最大帯域幅設定の値を決定する必要があります。このワークロードでは、複数の同時ワーカーが各ファイルを512kiBのチャンクで順次処理します。
- `````node.bandwidth.recovery.disk.read
- (バイト値毎秒) ノード上の回復のようなワークロードに対する絶対最大ディスク読み取り速度。設定されている場合、
node.bandwidth.recovery.disk.write
およびnode.bandwidth.recovery.network
も設定する必要があります。 node.bandwidth.recovery.disk.write
- (バイト値毎秒) ノード上の回復のようなワークロードに対する絶対最大ディスク書き込み速度。設定されている場合、
node.bandwidth.recovery.disk.read
およびnode.bandwidth.recovery.network
も設定する必要があります。 node.bandwidth.recovery.network
- (バイト値毎秒) ノード上の回復のようなワークロードに対する絶対最大ネットワークスループット。これは読み取りと書き込みの両方に適用されます。設定されている場合、
node.bandwidth.recovery.disk.read
およびnode.bandwidth.recovery.disk.write
も設定する必要があります。 node.bandwidth.recovery.factor.read
- (float, 動的)
indices.recovery.max_bytes_per_sec
が設定されていない場合に回復に使用できる最大読み取り帯域幅の割合。0
より大きく、1
より大きくない必要があります。設定されていない場合、node.bandwidth.recovery.operator.factor.read
の値が使用されます。係数設定が設定されていない場合、0.4
の値が使用されます。 node.bandwidth.recovery.factor.write
- (float, 動的)
indices.recovery.max_bytes_per_sec
が設定されていない場合に回復に使用できる最大書き込み帯域幅の割合。0
より大きく、1
より大きくない必要があります。設定されていない場合、node.bandwidth.recovery.operator.factor.write
の値が使用されます。係数設定が設定されていない場合、0.4
の値が使用されます。 node.bandwidth.recovery.operator.factor.read
- (float, 動的)
indices.recovery.max_bytes_per_sec
およびnode.bandwidth.recovery.factor.read
が設定されていない場合に回復に使用できる最大読み取り帯域幅の割合。0
より大きく、1
より大きくない必要があります。設定されていない場合、node.bandwidth.recovery.operator.factor
の値が使用されます。係数設定が設定されていない場合、0.4
の値が使用されます。オペレータ特権機能が有効になっている場合、この設定はオペレータユーザーのみが更新できます。 node.bandwidth.recovery.operator.factor.write
- (float, 動的)
indices.recovery.max_bytes_per_sec
およびnode.bandwidth.recovery.factor.write
が設定されていない場合に回復に使用できる最大書き込み帯域幅の割合。0
より大きく、1
より大きくない必要があります。設定されていない場合、node.bandwidth.recovery.operator.factor
の値が使用されます。係数設定が設定されていない場合、0.4
の値が使用されます。オペレータ特権機能が有効になっている場合、この設定はオペレータユーザーのみが更新できます。 node.bandwidth.recovery.operator.factor
- (float, 動的)
indices.recovery.max_bytes_per_sec
または他の係数設定が設定されていない場合に回復に使用できる最大帯域幅の割合。0
より大きく、1
より大きくない必要があります。デフォルトは0.4
です。オペレータ特権機能が有効になっている場合、この設定はオペレータユーザーのみが更新できます。 node.bandwidth.recovery.operator.factor.max_overcommit
- (float, 動的) 他の設定に関係なく回復に使用できる絶対最大帯域幅の割合。
0
より大きくなければなりません。デフォルトは100
です。オペレータ特権機能が有効になっている場合、この設定はオペレータユーザーのみが更新できます。