Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Troubleshooting ›Fix data nodes out of disk

Decrease the disk usage of data nodes

In order to decrease the disk usage in your cluster without losing any data, you can try reducing the replicas of indices.

Reducing the replicas of an index can potentially reduce search throughput and data redundancy. However, it can quickly give the cluster breathing room until a more permanent solution is in place.

Use Kibana

  1. Log in to the Elastic Cloud console.
  2. On the Elasticsearch Service panel, click the name of your deployment.

    If the name of your deployment is disabled your Kibana instances might be unhealthy, in which case please contact Elastic Support. If your deployment doesn’t include Kibana, all you need to do is enable it first.

  3. Open your deployment’s side navigation menu (placed under the Elastic logo in the upper left corner) and go to Stack Management > Index Management.
  4. In the list of all your indices, click the Replicas column twice to sort the indices based on their number of replicas starting with the one that has the most. Go through the indices and pick one by one the index with the least importance and higher number of replicas.

    Reducing the replicas of an index can potentially reduce search throughput and data redundancy.

  5. For each index you chose, click on its name, then on the panel that appears click Edit settings, reduce the value of the index.number_of_replicas to the desired value and then click Save.

    Reducing replicas
  6. Continue this process until the cluster is healthy again.

In order to estimate how many replicas need to be removed, first you need to estimate the amount of disk space that needs to be released.

  1. First, retrieve the relevant disk thresholds that will indicate how much space should be released. The relevant thresholds are the high watermark for all the tiers apart from the frozen one and the frozen flood stage watermark for the frozen tier. The following example demonstrates disk shortage in the hot tier, so we will only retrieve the high watermark:

    resp = client.cluster.get_settings(
        include_defaults=True,
        filter_path="*.cluster.routing.allocation.disk.watermark.high*",
    )
    print(resp)
    response = client.cluster.get_settings(
      include_defaults: true,
      filter_path: '*.cluster.routing.allocation.disk.watermark.high*'
    )
    puts response
    const response = await client.cluster.getSettings({
      include_defaults: "true",
      filter_path: "*.cluster.routing.allocation.disk.watermark.high*",
    });
    console.log(response);
    GET _cluster/settings?include_defaults&filter_path=*.cluster.routing.allocation.disk.watermark.high*

    The response will look like this:

    {
      "defaults": {
        "cluster": {
          "routing": {
            "allocation": {
              "disk": {
                "watermark": {
                  "high": "90%",
                  "high.max_headroom": "150GB"
                }
              }
            }
          }
        }
      }
    }

    The above means that in order to resolve the disk shortage we need to either drop our disk usage below the 90% or have more than 150GB available, read more on how this threshold works here.

  2. The next step is to find out the current disk usage; this will indicate how much space should be freed. For simplicity, our example has one node, but you can apply the same for every node over the relevant threshold.

    resp = client.cat.allocation(
        v=True,
        s="disk.avail",
        h="node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards",
    )
    print(resp)
    response = client.cat.allocation(
      v: true,
      s: 'disk.avail',
      h: 'node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards'
    )
    puts response
    const response = await client.cat.allocation({
      v: "true",
      s: "disk.avail",
      h: "node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards",
    });
    console.log(response);
    GET _cat/allocation?v&s=disk.avail&h=node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards

    The response will look like this:

    node                disk.percent disk.avail disk.total disk.used disk.indices shards
    instance-0000000000           91     4.6gb       35gb    31.1gb       29.9gb    111
  3. The high watermark configuration indicates that the disk usage needs to drop below 90%. Consider allowing some padding, so the node will not go over the threshold in the near future. In this example, let’s release approximately 7GB.
  4. The next step is to list all the indices and choose which replicas to reduce.

    The following command orders the indices with descending number of replicas and primary store size. We do this to help you choose which replicas to reduce under the assumption that the more replicas you have the smaller the risk if you remove a copy and the bigger the replica the more space will be released. This does not take into consideration any functional requirements, so please see it as a mere suggestion.

    resp = client.cat.indices(
        v=True,
        s="rep:desc,pri.store.size:desc",
        h="health,index,pri,rep,store.size,pri.store.size",
    )
    print(resp)
    response = client.cat.indices(
      v: true,
      s: 'rep:desc,pri.store.size:desc',
      h: 'health,index,pri,rep,store.size,pri.store.size'
    )
    puts response
    const response = await client.cat.indices({
      v: "true",
      s: "rep:desc,pri.store.size:desc",
      h: "health,index,pri,rep,store.size,pri.store.size",
    });
    console.log(response);
    GET _cat/indices?v&s=rep:desc,pri.store.size:desc&h=health,index,pri,rep,store.size,pri.store.size

    The response will look like:

    health index                                                      pri rep store.size pri.store.size
    green  my_index                                                     2   3      9.9gb          3.3gb
    green  my_other_index                                               2   3      1.8gb        470.3mb
    green  search-products                                              2   3    278.5kb         69.6kb
    green  logs-000001                                                  1   0      7.7gb          7.7gb
  5. In the list above we see that if we reduce the replicas to 1 of the indices my_index and my_other_index we will release the required disk space. It is not necessary to reduce the replicas of search-products and logs-000001 does not have any replicas anyway. Reduce the replicas of one or more indices with the index update settings API:

    Reducing the replicas of an index can potentially reduce search throughput and data redundancy.

    resp = client.indices.put_settings(
        index="my_index,my_other_index",
        settings={
            "index.number_of_replicas": 1
        },
    )
    print(resp)
    response = client.indices.put_settings(
      index: 'my_index,my_other_index',
      body: {
        'index.number_of_replicas' => 1
      }
    )
    puts response
    const response = await client.indices.putSettings({
      index: "my_index,my_other_index",
      settings: {
        "index.number_of_replicas": 1,
      },
    });
    console.log(response);
    PUT my_index,my_other_index/_settings
    {
      "index.number_of_replicas": 1
    }

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/decrease-disk-usage-data-node.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API