シャードの容量の健康問題のトラブルシューティング

Elasticsearchは、cluster.max_shards_per_nodeおよびcluster.max_shards_per_node.frozen設定を使用して、ノードごとに保持される最大シャード数を制限します。クラスターの現在のシャード容量は、ヘルスAPIのシャード容量セクションで確認できます。

クラスターはデータノードのために設定された最大シャード数に近づいています。

cluster.max_shards_per_nodeクラスター設定は、フローズンティアに属さないデータノードのみをカウントして、クラスターのオープンシャードの最大数を制限します。

この症状は、何らかのアクションを取る必要があることを示しています。そうしないと、新しいインデックスの作成やクラスターのアップグレードがブロックされる可能性があります。

変更がクラスターを不安定にしないと確信している場合は、クラスター更新設定APIを使用して、一時的に制限を増やすことができます:

Kibanaを使用する

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

Python

  1. resp = client.health_report(
  2. feature="shards_capacity",
  3. )
  4. print(resp)

Ruby

  1. response = client.health_report(
  2. feature: 'shards_capacity'
  3. )
  4. puts response

Js

  1. const response = await client.healthReport({
  2. feature: "shards_capacity",
  3. });
  4. console.log(response);

Console

  1. GET _health_report/shards_capacity

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

Console-Result

  1. {
  2. "cluster_name": "...",
  3. "indicators": {
  4. "shards_capacity": {
  5. "status": "yellow",
  6. "symptom": "Cluster is close to reaching the configured maximum number of shards for data nodes.",
  7. "details": {
  8. "data": {
  9. "max_shards_in_cluster": 1000,
  10. "current_used_shards": 988
  11. },
  12. "frozen": {
  13. "max_shards_in_cluster": 3000,
  14. "current_used_shards": 0
  15. }
  16. },
  17. "impacts": [
  18. ...
  19. ],
  20. "diagnosis": [
  21. ...
  22. }
  23. }
  24. }
設定の現在の値 cluster.max_shards_per_node
クラスター全体のオープンシャードの現在の数

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "cluster.max_shards_per_node": 1200
  4. },
  5. )
  6. print(resp)

Ruby

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

Js

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

Console

  1. PUT _cluster/settings
  2. {
  3. "persistent" : {
  4. "cluster.max_shards_per_node": 1200
  5. }
  6. }

この増加は一時的なものであるべきです。長期的な解決策として、オーバーシャードされたデータティアにノードを追加するか、クラスターのシャード数を減らすことをお勧めします。

  • 6. 変更が問題を解決したかどうかを確認するには、[shards_capacity]インジケーターの現在の状態を取得するために、ヘルスAPIの[data]セクションを確認できます:

Python

  1. resp = client.health_report(
  2. feature="shards_capacity",
  3. )
  4. print(resp)

Ruby

  1. response = client.health_report(
  2. feature: 'shards_capacity'
  3. )
  4. puts response

Js

  1. const response = await client.healthReport({
  2. feature: "shards_capacity",
  3. });
  4. console.log(response);

Console

  1. GET _health_report/shards_capacity

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

Console-Result

  1. {
  2. "cluster_name": "...",
  3. "indicators": {
  4. "shards_capacity": {
  5. "status": "green",
  6. "symptom": "The cluster has enough room to add new shards.",
  7. "details": {
  8. "data": {
  9. "max_shards_in_cluster": 1000
  10. },
  11. "frozen": {
  12. "max_shards_in_cluster": 3000
  13. }
  14. }
  15. }
  16. }
  17. }
  • 7. 長期的な解決策が整ったら、[cluster.max_shards_per_node]制限をリセットすることをお勧めします。

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "cluster.max_shards_per_node": None
  4. },
  5. )
  6. print(resp)

Ruby

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

Js

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

Console

  1. PUT _cluster/settings
  2. {
  3. "persistent" : {
  4. "cluster.max_shards_per_node": null
  5. }
  6. }

シャード容量インジケーターに従って、クラスターの現在の状態を確認します:

Python

  1. resp = client.health_report(
  2. feature="shards_capacity",
  3. )
  4. print(resp)

Ruby

  1. response = client.health_report(
  2. feature: 'shards_capacity'
  3. )
  4. puts response

Js

  1. const response = await client.healthReport({
  2. feature: "shards_capacity",
  3. });
  4. console.log(response);

Console

  1. GET _health_report/shards_capacity

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

Console-Result

  1. {
  2. "cluster_name": "...",
  3. "indicators": {
  4. "shards_capacity": {
  5. "status": "yellow",
  6. "symptom": "Cluster is close to reaching the configured maximum number of shards for data nodes.",
  7. "details": {
  8. "data": {
  9. "max_shards_in_cluster": 1000,
  10. "current_used_shards": 988
  11. },
  12. "frozen": {
  13. "max_shards_in_cluster": 3000
  14. }
  15. },
  16. "impacts": [
  17. ...
  18. ],
  19. "diagnosis": [
  20. ...
  21. }
  22. }
  23. }
設定の現在の値 cluster.max_shards_per_node
クラスター全体のオープンシャードの現在の数

cluster settings APIを使用して、cluster.max_shards_per_node設定を更新します:

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "cluster.max_shards_per_node": 1200
  4. },
  5. )
  6. print(resp)

Ruby

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

Js

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

Console

  1. PUT _cluster/settings
  2. {
  3. "persistent" : {
  4. "cluster.max_shards_per_node": 1200
  5. }
  6. }

この増加は一時的なものであるべきです。長期的な解決策として、オーバーシャードされたデータティアにノードを追加するか、クラスターのシャード数を減らすことをお勧めします。変更が問題を解決したかどうかを確認するには、[shards_capacity]インジケーターの現在の状態を取得するために、ヘルスAPIの[data]セクションを確認できます:

Python

  1. resp = client.health_report(
  2. feature="shards_capacity",
  3. )
  4. print(resp)

Ruby

  1. response = client.health_report(
  2. feature: 'shards_capacity'
  3. )
  4. puts response

Js

  1. const response = await client.healthReport({
  2. feature: "shards_capacity",
  3. });
  4. console.log(response);

Console

  1. GET _health_report/shards_capacity

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

Console-Result

  1. {
  2. "cluster_name": "...",
  3. "indicators": {
  4. "shards_capacity": {
  5. "status": "green",
  6. "symptom": "The cluster has enough room to add new shards.",
  7. "details": {
  8. "data": {
  9. "max_shards_in_cluster": 1200
  10. },
  11. "frozen": {
  12. "max_shards_in_cluster": 3000
  13. }
  14. }
  15. }
  16. }
  17. }

長期的な解決策が整ったら、[cluster.max_shards_per_node]制限をリセットすることをお勧めします。

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "cluster.max_shards_per_node": None
  4. },
  5. )
  6. print(resp)

Ruby

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

Js

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

Console

  1. PUT _cluster/settings
  2. {
  3. "persistent" : {
  4. "cluster.max_shards_per_node": null
  5. }
  6. }

クラスターはフローズンノードのために設定された最大シャード数に近づいています。

cluster.max_shards_per_node.frozenクラスター設定は、フローズンティアに属するデータノードのみをカウントして、クラスターのオープンシャードの最大数を制限します。

この症状は、何らかのアクションを取る必要があることを示しています。そうしないと、新しいインデックスの作成やクラスターのアップグレードがブロックされる可能性があります。

変更がクラスターを不安定にしないと確信している場合は、クラスター更新設定APIを使用して、一時的に制限を増やすことができます:

Kibanaを使用する

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

Python

  1. resp = client.health_report(
  2. feature="shards_capacity",
  3. )
  4. print(resp)

Ruby

  1. response = client.health_report(
  2. feature: 'shards_capacity'
  3. )
  4. puts response

Js

  1. const response = await client.healthReport({
  2. feature: "shards_capacity",
  3. });
  4. console.log(response);

Console

  1. GET _health_report/shards_capacity

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

Console-Result

  1. {
  2. "cluster_name": "...",
  3. "indicators": {
  4. "shards_capacity": {
  5. "status": "yellow",
  6. "symptom": "Cluster is close to reaching the configured maximum number of shards for frozen nodes.",
  7. "details": {
  8. "data": {
  9. "max_shards_in_cluster": 1000
  10. },
  11. "frozen": {
  12. "max_shards_in_cluster": 3000,
  13. "current_used_shards": 2998
  14. }
  15. },
  16. "impacts": [
  17. ...
  18. ],
  19. "diagnosis": [
  20. ...
  21. }
  22. }
  23. }
フローズンノード全体で使用されているオープンシャードの現在の数
設定の現在の値 cluster.max_shards_per_node.frozen

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "cluster.max_shards_per_node.frozen": 3200
  4. },
  5. )
  6. print(resp)

Ruby

  1. response = client.cluster.put_settings(
  2. body: {
  3. persistent: {
  4. 'cluster.max_shards_per_node.frozen' => 3200
  5. }
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.cluster.putSettings({
  2. persistent: {
  3. "cluster.max_shards_per_node.frozen": 3200,
  4. },
  5. });
  6. console.log(response);

Console

  1. PUT _cluster/settings
  2. {
  3. "persistent" : {
  4. "cluster.max_shards_per_node.frozen": 3200
  5. }
  6. }

この増加は一時的なものであるべきです。長期的な解決策として、フローズンティアにノードを追加するか、クラスターのシャード数を減らすことをお勧めします。

  • 6. 変更が問題を解決したかどうかを確認するには、[shards_capacity]インジケーターの現在の状態を取得するために、ヘルスAPIの[data]セクションを確認できます:

Python

  1. resp = client.health_report(
  2. feature="shards_capacity",
  3. )
  4. print(resp)

Ruby

  1. response = client.health_report(
  2. feature: 'shards_capacity'
  3. )
  4. puts response

Js

  1. const response = await client.healthReport({
  2. feature: "shards_capacity",
  3. });
  4. console.log(response);

Console

  1. GET _health_report/shards_capacity

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

Console-Result

  1. {
  2. "cluster_name": "...",
  3. "indicators": {
  4. "shards_capacity": {
  5. "status": "green",
  6. "symptom": "The cluster has enough room to add new shards.",
  7. "details": {
  8. "data": {
  9. "max_shards_in_cluster": 1000
  10. },
  11. "frozen": {
  12. "max_shards_in_cluster": 3200
  13. }
  14. }
  15. }
  16. }
  17. }
  • 7. 長期的な解決策が整ったら、[cluster.max_shards_per_node.frozen]制限をリセットすることをお勧めします。

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "cluster.max_shards_per_node.frozen": None
  4. },
  5. )
  6. print(resp)

Ruby

  1. response = client.cluster.put_settings(
  2. body: {
  3. persistent: {
  4. 'cluster.max_shards_per_node.frozen' => nil
  5. }
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.cluster.putSettings({
  2. persistent: {
  3. "cluster.max_shards_per_node.frozen": null,
  4. },
  5. });
  6. console.log(response);

Console

  1. PUT _cluster/settings
  2. {
  3. "persistent" : {
  4. "cluster.max_shards_per_node.frozen": null
  5. }
  6. }

シャード容量インジケーターに従って、クラスターの現在の状態を確認します:

Python

  1. resp = client.health_report(
  2. feature="shards_capacity",
  3. )
  4. print(resp)

Ruby

  1. response = client.health_report(
  2. feature: 'shards_capacity'
  3. )
  4. puts response

Js

  1. const response = await client.healthReport({
  2. feature: "shards_capacity",
  3. });
  4. console.log(response);

Console

  1. GET _health_report/shards_capacity

Console-Result

  1. {
  2. "cluster_name": "...",
  3. "indicators": {
  4. "shards_capacity": {
  5. "status": "yellow",
  6. "symptom": "Cluster is close to reaching the configured maximum number of shards for frozen nodes.",
  7. "details": {
  8. "data": {
  9. "max_shards_in_cluster": 1000
  10. },
  11. "frozen": {
  12. "max_shards_in_cluster": 3000,
  13. "current_used_shards": 2998
  14. }
  15. },
  16. "impacts": [
  17. ...
  18. ],
  19. "diagnosis": [
  20. ...
  21. }
  22. }
  23. }
フローズンノード全体で使用されているオープンシャードの現在の数
設定の現在の値 cluster.max_shards_per_node.frozen

cluster settings APIを使用して、cluster.max_shards_per_node.frozen設定を更新します:

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "cluster.max_shards_per_node.frozen": 3200
  4. },
  5. )
  6. print(resp)

Ruby

  1. response = client.cluster.put_settings(
  2. body: {
  3. persistent: {
  4. 'cluster.max_shards_per_node.frozen' => 3200
  5. }
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.cluster.putSettings({
  2. persistent: {
  3. "cluster.max_shards_per_node.frozen": 3200,
  4. },
  5. });
  6. console.log(response);

Console

  1. PUT _cluster/settings
  2. {
  3. "persistent" : {
  4. "cluster.max_shards_per_node.frozen": 3200
  5. }
  6. }

この増加は一時的なものであるべきです。長期的な解決策として、フローズンティアにノードを追加するか、クラスターのシャード数を減らすことをお勧めします。変更が問題を解決したかどうかを確認するには、[shards_capacity]インジケーターの現在の状態を取得するために、ヘルスAPIの[data]セクションを確認できます:

Python

  1. resp = client.health_report(
  2. feature="shards_capacity",
  3. )
  4. print(resp)

Ruby

  1. response = client.health_report(
  2. feature: 'shards_capacity'
  3. )
  4. puts response

Js

  1. const response = await client.healthReport({
  2. feature: "shards_capacity",
  3. });
  4. console.log(response);

Console

  1. GET _health_report/shards_capacity

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

Console-Result

  1. {
  2. "cluster_name": "...",
  3. "indicators": {
  4. "shards_capacity": {
  5. "status": "green",
  6. "symptom": "The cluster has enough room to add new shards.",
  7. "details": {
  8. "data": {
  9. "max_shards_in_cluster": 1000
  10. },
  11. "frozen": {
  12. "max_shards_in_cluster": 3200
  13. }
  14. }
  15. }
  16. }
  17. }

長期的な解決策が整ったら、[cluster.max_shards_per_node.frozen]制限をリセットすることをお勧めします。

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "cluster.max_shards_per_node.frozen": None
  4. },
  5. )
  6. print(resp)

Ruby

  1. response = client.cluster.put_settings(
  2. body: {
  3. persistent: {
  4. 'cluster.max_shards_per_node.frozen' => nil
  5. }
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.cluster.putSettings({
  2. persistent: {
  3. "cluster.max_shards_per_node.frozen": null,
  4. },
  5. });
  6. console.log(response);

Console

  1. PUT _cluster/settings
  2. {
  3. "persistent" : {
  4. "cluster.max_shards_per_node.frozen": null
  5. }
  6. }