データノードのディスク使用量を減少させる

クラスター内のディスク使用量をデータを失うことなく減少させるために、インデックスのレプリカを減らすことを試みることができます。

インデックスのレプリカを減らすことで、検索スループットとデータの冗長性を減少させる可能性があります。しかし、より恒久的な解決策が整うまで、クラスターに呼吸の余地を与えることができます。

Kibanaを使用する

  • 1. Elastic Cloudコンソールにログインします。
  • 2. Elasticsearch Serviceパネルで、デプロイメントの名前をクリックします。
    デプロイメントの名前が無効になっている場合、Kibanaインスタンスが正常でない可能性があります。その場合は、Elastic Supportに連絡してください。デプロイメントにKibanaが含まれていない場合は、最初に有効にするだけで済みます。
  • 3. デプロイメントのサイドナビゲーションメニュー(左上のElasticロゴの下に配置されています)を開き、Stack Management > Index Managementに移動します。
  • 4. すべてのインデックスのリストで、Replicas列を2回クリックして、レプリカの数に基づいてインデックスをソートします。最も多くのレプリカを持つインデックスから始めます。インデックスを確認し、重要度が低く、レプリカの数が多いインデックスを1つずつ選択します。
    インデックスのレプリカを減らすことで、検索スループットとデータの冗長性を減少させる可能性があります。
  • 5. 選択した各インデックスの名前をクリックし、表示されるパネルでEdit settingsをクリックし、index.number_of_replicasの値を希望の値に減少させてからSaveをクリックします。
    レプリカの減少
  • 6. クラスターが再び正常になるまでこのプロセスを続けます。

削除する必要のあるレプリカの数を見積もるためには、まず解放する必要のあるディスクスペースの量を見積もる必要があります。

  • 1. 最初に、どれだけのスペースを解放する必要があるかを示す関連するディスクの閾値を取得します。関連する閾値は、凍結されたものを除くすべての層の高水準と、凍結層の凍結洪水段階の水準です。以下の例は、ホット層でのディスク不足を示しているため、高水準のみを取得します。

Python

  1. resp = client.cluster.get_settings(
  2. include_defaults=True,
  3. filter_path="*.cluster.routing.allocation.disk.watermark.high*",
  4. )
  5. print(resp)

Ruby

  1. response = client.cluster.get_settings(
  2. include_defaults: true,
  3. filter_path: '*.cluster.routing.allocation.disk.watermark.high*'
  4. )
  5. puts response

Js

  1. const response = await client.cluster.getSettings({
  2. include_defaults: "true",
  3. filter_path: "*.cluster.routing.allocation.disk.watermark.high*",
  4. });
  5. console.log(response);

Console

  1. GET _cluster/settings?include_defaults&filter_path=*.cluster.routing.allocation.disk.watermark.high*

応答は次のようになります:

Console-Result

  1. {
  2. "defaults": {
  3. "cluster": {
  4. "routing": {
  5. "allocation": {
  6. "disk": {
  7. "watermark": {
  8. "high": "90%",
  9. "high.max_headroom": "150GB"
  10. }
  11. }
  12. }
  13. }
  14. }
  15. }
  16. }

上記は、ディスク不足を解決するために、ディスク使用量を90%未満にするか、150GB以上の空き容量を持つ必要があることを意味します。この閾値の動作については、こちらで詳しく読むことができます。

  • 2. 次のステップは、現在のディスク使用量を確認することです。これにより、どれだけのスペースを解放する必要があるかが示されます。簡単のために、私たちの例では1つのノードがありますが、関連する閾値を超えるすべてのノードに同じことを適用できます。

Python

  1. resp = client.cat.allocation(
  2. v=True,
  3. s="disk.avail",
  4. h="node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards",
  5. )
  6. print(resp)

Ruby

  1. response = client.cat.allocation(
  2. v: true,
  3. s: 'disk.avail',
  4. h: 'node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards'
  5. )
  6. puts response

Js

  1. const response = await client.cat.allocation({
  2. v: "true",
  3. s: "disk.avail",
  4. h: "node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards",
  5. });
  6. console.log(response);

Console

  1. GET _cat/allocation?v&s=disk.avail&h=node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards

応答は次のようになります:

Console-Result

  1. node disk.percent disk.avail disk.total disk.used disk.indices shards
  2. instance-0000000000 91 4.6gb 35gb 31.1gb 29.9gb 111
  • 3. 高水準の設定は、ディスク使用量が90%未満に下がる必要があることを示しています。ノードが近い将来に閾値を超えないように、ある程度の余裕を持たせることを検討してください。この例では、約7GBを解放します。
  • 4. 次のステップは、すべてのインデックスをリストし、どのレプリカを減らすかを選択することです。
    次のコマンドは、レプリカの数とプライマリストレージサイズが降順でインデックスを並べ替えます。これは、レプリカが多いほど、コピーを削除した場合のリスクが小さく、レプリカが大きいほど解放されるスペースが大きくなるという仮定の下で、どのレプリカを減らすかを選択するのに役立ちます。これは、機能要件を考慮していないため、あくまで提案としてご覧ください。

Python

  1. resp = client.cat.indices(
  2. v=True,
  3. s="rep:desc,pri.store.size:desc",
  4. h="health,index,pri,rep,store.size,pri.store.size",
  5. )
  6. print(resp)

Ruby

  1. response = client.cat.indices(
  2. v: true,
  3. s: 'rep:desc,pri.store.size:desc',
  4. h: 'health,index,pri,rep,store.size,pri.store.size'
  5. )
  6. puts response

Js

  1. const response = await client.cat.indices({
  2. v: "true",
  3. s: "rep:desc,pri.store.size:desc",
  4. h: "health,index,pri,rep,store.size,pri.store.size",
  5. });
  6. console.log(response);

Console

  1. GET _cat/indices?v&s=rep:desc,pri.store.size:desc&h=health,index,pri,rep,store.size,pri.store.size

応答は次のようになります:

Console-Result

  1. health index pri rep store.size pri.store.size
  2. green my_index 2 3 9.9gb 3.3gb
  3. green my_other_index 2 3 1.8gb 470.3mb
  4. green search-products 2 3 278.5kb 69.6kb
  5. green logs-000001 1 0 7.7gb 7.7gb
  • 5. 上記のリストでは、インデックスmy_indexmy_other_indexのレプリカを1に減らすと、必要なディスクスペースが解放されることがわかります。search-productsのレプリカを減らす必要はなく、logs-000001にはそもそもレプリカがありません。 インデックス更新設定APIを使用して、1つまたは複数のインデックスのレプリカを減らします:
    インデックスのレプリカを減らすことで、検索スループットとデータの冗長性を減少させる可能性があります。

Python

  1. resp = client.indices.put_settings(
  2. index="my_index,my_other_index",
  3. settings={
  4. "index.number_of_replicas": 1
  5. },
  6. )
  7. print(resp)

Ruby

  1. response = client.indices.put_settings(
  2. index: 'my_index,my_other_index',
  3. body: {
  4. 'index.number_of_replicas' => 1
  5. }
  6. )
  7. puts response

Js

  1. const response = await client.indices.putSettings({
  2. index: "my_index,my_other_index",
  3. settings: {
  4. "index.number_of_replicas": 1,
  5. },
  6. });
  7. console.log(response);

Console

  1. PUT my_index,my_other_index/_settings
  2. {
  3. "index.number_of_replicas": 1
  4. }