ノードごとのシャードの総数に達しました
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に移動します。
- 4.
cluster.routing.allocation.total_shards_per_node
クラスタ設定を確認します:
Python
resp = client.cluster.get_settings(
flat_settings=True,
)
print(resp)
Ruby
response = client.cluster.get_settings(
flat_settings: true
)
puts response
Js
const response = await client.cluster.getSettings({
flat_settings: "true",
});
console.log(response);
Console
GET /_cluster/settings?flat_settings
Console-Result
{
"persistent": {
"cluster.routing.allocation.total_shards_per_node": "300"
},
"transient": {}
}
システム内の単一ノードに存在できるシャードの総数の現在の構成値を表します。 |
- 5. 増加させて、単一ノードに割り当てられるシャードの総数の値を高い値にします:
Python
resp = client.cluster.put_settings(
persistent={
"cluster.routing.allocation.total_shards_per_node": 400
},
)
print(resp)
Ruby
response = client.cluster.put_settings(
body: {
persistent: {
'cluster.routing.allocation.total_shards_per_node' => 400
}
}
)
puts response
Js
const response = await client.cluster.putSettings({
persistent: {
"cluster.routing.allocation.total_shards_per_node": 400,
},
});
console.log(response);
Console
PUT _cluster/settings
{
"persistent" : {
"cluster.routing.allocation.total_shards_per_node" : 400
}
}
システム全体の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
resp = client.indices.get_settings(
index="my-index-000001",
name="index.routing.allocation.include._tier_preference",
flat_settings=True,
)
print(resp)
Ruby
response = client.indices.get_settings(
index: 'my-index-000001',
name: 'index.routing.allocation.include._tier_preference',
flat_settings: true
)
puts response
Js
const response = await client.indices.getSettings({
index: "my-index-000001",
name: "index.routing.allocation.include._tier_preference",
flat_settings: "true",
});
console.log(response);
Console
GET /my-index-000001/_settings/index.routing.allocation.include._tier_preference?flat_settings
Console-Result
{
"my-index-000001": {
"settings": {
"index.routing.allocation.include._tier_preference": "data_warm,data_hot"
}
}
}
このインデックスが割り当てられることが許可されているデータティアノードロールのカンマ区切りリストを表します。 リストの最初のものが優先度の高いものです。 すなわち、インデックスがターゲットにしているティアです。 例えば、この例ではティアの優先度が 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
resp = client.cluster.get_settings(
flat_settings=True,
)
print(resp)
Ruby
response = client.cluster.get_settings(
flat_settings: true
)
puts response
Js
const response = await client.cluster.getSettings({
flat_settings: "true",
});
console.log(response);
Console
GET /_cluster/settings?flat_settings
Console-Result
{
"persistent": {
"cluster.routing.allocation.total_shards_per_node": "300"
},
"transient": {}
}
システム内の単一ノードに存在できるシャードの総数の現在の構成値を表します。 |
- 2. 増加させて、単一ノードに割り当てられるシャードの総数の値を高い値にします:
Python
resp = client.cluster.put_settings(
persistent={
"cluster.routing.allocation.total_shards_per_node": 400
},
)
print(resp)
Ruby
response = client.cluster.put_settings(
body: {
persistent: {
'cluster.routing.allocation.total_shards_per_node' => 400
}
}
)
puts response
Js
const response = await client.cluster.putSettings({
persistent: {
"cluster.routing.allocation.total_shards_per_node": 400,
},
});
console.log(response);
Console
PUT _cluster/settings
{
"persistent" : {
"cluster.routing.allocation.total_shards_per_node" : 400
}
}
システム全体のtotal_shards_per_node 構成の新しい値は、以前の値 300 から400 に増加しました。total_shards_per_node 構成はnull に設定することもでき、これはシステム内の単一ノードに共存できるシャードの数に関して上限がないことを表します。 |