ノードごとのシャードの総数に達しました

Elasticsearchは、クラスタノード間でデータ(インデックスシャード)を分散させることによって、利用可能なすべてのリソースを活用しようとします。

ユーザーは、システム内の単一ノードにホストできるシャードの数を制限するために、cluster.routing.allocation.total_shards_per_nodeシステム設定を構成することで、このデータ分配に影響を与えたい場合があります。単一ノードにホストできるシャードの数を制限するさまざまな構成は、クラスタにその構成を満たすのに十分なノードがないために、シャードが未割り当てになる原因となる可能性があります。

これを修正するためには、次の手順に従ってください:

シャードを割り当てるためには、クラスタ内のノードに共存できるシャードの数を増やす必要があります。これを実現するために、システム全体のcluster.routing.allocation.total_shards_per_node [クラスタ設定]を確認し、構成された値を増やします。

Kibanaを使用する

  • 1. Elastic Cloudコンソールにログインします。
  • 2. Elasticsearchサービスパネルで、デプロイメントの名前をクリックします。
    デプロイメントの名前が無効になっている場合、Kibanaインスタンスが正常でない可能性があります。その場合は、Elasticサポートにお問い合わせください。デプロイメントにKibanaが含まれていない場合は、最初に有効にするだけで済みます。
  • 3. デプロイメントのサイドナビゲーションメニュー(左上隅のElasticロゴの下に配置)を開き、Dev Tools > Consoleに移動します。
    Kibana Console
  • 4. cluster.routing.allocation.total_shards_per_node クラスタ設定を確認します:

Python

  1. resp = client.cluster.get_settings(
  2. flat_settings=True,
  3. )
  4. print(resp)

Ruby

  1. response = client.cluster.get_settings(
  2. flat_settings: true
  3. )
  4. puts response

Js

  1. const response = await client.cluster.getSettings({
  2. flat_settings: "true",
  3. });
  4. console.log(response);

Console

  1. GET /_cluster/settings?flat_settings

レスポンスは次のようになります:

Console-Result

  1. {
  2. "persistent": {
  3. "cluster.routing.allocation.total_shards_per_node": "300"
  4. },
  5. "transient": {}
  6. }
システム内の単一ノードに存在できるシャードの総数の現在の構成値を表します。
  • 5. 増加させて、単一ノードに割り当てられるシャードの総数の値を高い値にします:

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "cluster.routing.allocation.total_shards_per_node": 400
  4. },
  5. )
  6. print(resp)

Ruby

  1. response = client.cluster.put_settings(
  2. body: {
  3. persistent: {
  4. 'cluster.routing.allocation.total_shards_per_node' => 400
  5. }
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.cluster.putSettings({
  2. persistent: {
  3. "cluster.routing.allocation.total_shards_per_node": 400,
  4. },
  5. });
  6. console.log(response);

Console

  1. PUT _cluster/settings
  2. {
  3. "persistent" : {
  4. "cluster.routing.allocation.total_shards_per_node" : 400
  5. }
  6. }
システム全体のtotal_shards_per_node構成の新しい値は、
以前の値300から400に増加しました。
total_shards_per_node構成はnullに設定することもでき、
これはシステム内の単一ノードに共存できるシャードの数に関して上限がないことを表します。

シャードを割り当てるためには、Elasticsearchクラスタにノードを追加し、インデックスのターゲットティアindex.routing.allocation.include._tier_preferenceノードロールを新しいノードに割り当てることができます。

インデックスがどのティアをターゲットにしているかを確認するには、index.routing.allocation.include._tier_preference設定 APIを使用して構成された値を取得します:

Python

  1. resp = client.indices.get_settings(
  2. index="my-index-000001",
  3. name="index.routing.allocation.include._tier_preference",
  4. flat_settings=True,
  5. )
  6. print(resp)

Ruby

  1. response = client.indices.get_settings(
  2. index: 'my-index-000001',
  3. name: 'index.routing.allocation.include._tier_preference',
  4. flat_settings: true
  5. )
  6. puts response

Js

  1. const response = await client.indices.getSettings({
  2. index: "my-index-000001",
  3. name: "index.routing.allocation.include._tier_preference",
  4. flat_settings: "true",
  5. });
  6. console.log(response);

Console

  1. GET /my-index-000001/_settings/index.routing.allocation.include._tier_preference?flat_settings

レスポンスは次のようになります:

Console-Result

  1. {
  2. "my-index-000001": {
  3. "settings": {
  4. "index.routing.allocation.include._tier_preference": "data_warm,data_hot"
  5. }
  6. }
  7. }
このインデックスが割り当てられることが許可されているデータティアノードロールのカンマ区切りリストを表します。
リストの最初のものが優先度の高いものです。
すなわち、インデックスがターゲットにしているティアです。
例えば、この例ではティアの優先度がdata_warm,data_hotであるため、インデックスはwarmティアをターゲットにしており、
Elasticsearchクラスタにはdata_warmロールを持つノードがさらに必要です。

または、Elasticsearchクラスタにノードを追加することが望ましくない場合は、システム全体のcluster.routing.allocation.total_shards_per_node クラスタ設定を確認し、構成された値を増やします:

  • 1. 未割り当てのシャードを持つインデックスのためにcluster.routing.allocation.total_shards_per_node クラスタ設定を確認します:

Python

  1. resp = client.cluster.get_settings(
  2. flat_settings=True,
  3. )
  4. print(resp)

Ruby

  1. response = client.cluster.get_settings(
  2. flat_settings: true
  3. )
  4. puts response

Js

  1. const response = await client.cluster.getSettings({
  2. flat_settings: "true",
  3. });
  4. console.log(response);

Console

  1. GET /_cluster/settings?flat_settings

レスポンスは次のようになります:

Console-Result

  1. {
  2. "persistent": {
  3. "cluster.routing.allocation.total_shards_per_node": "300"
  4. },
  5. "transient": {}
  6. }
システム内の単一ノードに存在できるシャードの総数の現在の構成値を表します。
  • 2. 増加させて、単一ノードに割り当てられるシャードの総数の値を高い値にします:

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "cluster.routing.allocation.total_shards_per_node": 400
  4. },
  5. )
  6. print(resp)

Ruby

  1. response = client.cluster.put_settings(
  2. body: {
  3. persistent: {
  4. 'cluster.routing.allocation.total_shards_per_node' => 400
  5. }
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.cluster.putSettings({
  2. persistent: {
  3. "cluster.routing.allocation.total_shards_per_node": 400,
  4. },
  5. });
  6. console.log(response);

Console

  1. PUT _cluster/settings
  2. {
  3. "persistent" : {
  4. "cluster.routing.allocation.total_shards_per_node" : 400
  5. }
  6. }
システム全体のtotal_shards_per_node構成の新しい値は、
以前の値300から400に増加しました。
total_shards_per_node構成はnullに設定することもでき、
これはシステム内の単一ノードに共存できるシャードの数に関して上限がないことを表します。