Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Руководство [8.17] ›Устранение неполадок

Достигнуто максимальное количество фрагментов на узел

Elasticsearch пытается использовать все доступные ресурсы, распределяя данные (фрагменты индексов) между узлами кластера.

Пользователи могут повлиять на это распределение данных, настроив системное значение cluster.routing.allocation.total_shards_per_node, чтобы ограничить количество фрагментов, которые могут быть размещены на одном узле в системе, независимо от индекса. Различные конфигурации, ограничивающие количество фрагментов, которые могут быть размещены на одном узле, могут привести к тому, что фрагменты не будут назначены из-за того, что в кластере недостаточно узлов для удовлетворения конфигурации.

Чтобы исправить эту проблему, выполните следующие действия:

Для назначения фрагментов нам необходимо увеличить количество фрагментов, которые могут быть размещены на одном узле в кластере. Мы добьемся этого, изучив системное cluster.routing.allocation.total_shards_per_node настройка кластера и увеличив заданное значение.

Используйте Kibana

  1. Войдите в консоль Elastic Cloud.
  2. На панели Сервис Elasticsearch щелкните имя вашей развертывания.

    Если имя вашей развертывания отключено, ваши экземпляры Kibana могут быть неисправны. В этом случае обратитесь в службу поддержки Elastic Support. Если в вашей развертывании нет Kibana, вам необходимо сначала включить его.

  3. Откройте навигационное меню развертывания (расположенное под логотипом Elastic в левом верхнем углу) и перейдите к Dev Tools > Console.

    Kibana Console
  4. Изучите cluster.routing.allocation.total_shards_per_node настройку кластера:

    resp = client.cluster.get_settings(
        flat_settings=True,
    )
    print(resp)
    response = client.cluster.get_settings(
      flat_settings: true
    )
    puts response
    const response = await client.cluster.getSettings({
      flat_settings: "true",
    });
    console.log(response);
    GET /_cluster/settings?flat_settings

    Ответ будет выглядеть следующим образом:

    {
      "persistent": {
        "cluster.routing.allocation.total_shards_per_node": "300" 
      },
      "transient": {}
    }

    Представляет текущее заданное значение для общего количества фрагментов, которые могут находиться на одном узле в системе.

  5. Увеличьте значение для общего количества фрагментов, которые могут быть назначены одному узлу, до большего значения:

    resp = client.cluster.put_settings(
        persistent={
            "cluster.routing.allocation.total_shards_per_node": 400
        },
    )
    print(resp)
    response = client.cluster.put_settings(
      body: {
        persistent: {
          'cluster.routing.allocation.total_shards_per_node' => 400
        }
      }
    )
    puts response
    const response = await client.cluster.putSettings({
      persistent: {
        "cluster.routing.allocation.total_shards_per_node": 400,
      },
    });
    console.log(response);
    PUT _cluster/settings
    {
      "persistent" : {
        "cluster.routing.allocation.total_shards_per_node" : 400 
      }
    }

    Новое значение для системной total_shards_per_node конфигурации увеличено с предыдущего значения 300 до 400. total_shards_per_node конфигурацию также можно установить на null, что соответствует отсутствию верхнего предела количества фрагментов, которые могут размещаться на одном узле в системе.

Для назначения фрагментов вы можете добавить больше узлов в свой кластер Elasticsearch и назначить целевой уровень узла индекса роли узла новым узлам.

Чтобы узнать, какой уровень нацелен на индекс для назначения, используйте API получения настроек индекса для получения заданного значения для настройки index.routing.allocation.include._tier_preference:

resp = client.indices.get_settings(
    index="my-index-000001",
    name="index.routing.allocation.include._tier_preference",
    flat_settings=True,
)
print(resp)
response = client.indices.get_settings(
  index: 'my-index-000001',
  name: 'index.routing.allocation.include._tier_preference',
  flat_settings: true
)
puts response
const response = await client.indices.getSettings({
  index: "my-index-000001",
  name: "index.routing.allocation.include._tier_preference",
  flat_settings: "true",
});
console.log(response);
GET /my-index-000001/_settings/index.routing.allocation.include._tier_preference?flat_settings

Ответ будет выглядеть следующим образом:

{
  "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 настройку кластера для индекса с неназначенными фрагментами:

    resp = client.cluster.get_settings(
        flat_settings=True,
    )
    print(resp)
    response = client.cluster.get_settings(
      flat_settings: true
    )
    puts response
    const response = await client.cluster.getSettings({
      flat_settings: "true",
    });
    console.log(response);
    GET /_cluster/settings?flat_settings

    Ответ будет выглядеть следующим образом:

    {
      "persistent": {
        "cluster.routing.allocation.total_shards_per_node": "300" 
      },
      "transient": {}
    }

    Представляет текущее заданное значение для общего количества фрагментов, которые могут находиться на одном узле в системе.

  2. Увеличьте значение для общего количества фрагментов, которые могут быть назначены одному узлу, до большего значения:

    resp = client.cluster.put_settings(
        persistent={
            "cluster.routing.allocation.total_shards_per_node": 400
        },
    )
    print(resp)
    response = client.cluster.put_settings(
      body: {
        persistent: {
          'cluster.routing.allocation.total_shards_per_node' => 400
        }
      }
    )
    puts response
    const response = await client.cluster.putSettings({
      persistent: {
        "cluster.routing.allocation.total_shards_per_node": 400,
      },
    });
    console.log(response);
    PUT _cluster/settings
    {
      "persistent" : {
        "cluster.routing.allocation.total_shards_per_node" : 400 
      }
    }

    Новое значение для системной total_shards_per_node конфигурации увеличено с предыдущего значения 300 до 400. total_shards_per_node конфигурацию также можно установить на null, что соответствует отсутствию верхнего предела количества фрагментов, которые могут размещаться на одном узле в системе.

Если вы используете Elasticsearch Cloud Hosted, вы можете использовать AutoOps для мониторинга вашего кластера. AutoOps значительно упрощает управление кластером, предоставляя рекомендации по производительности, видимость использования ресурсов, обнаружение проблем в реальном времени и пути решения проблем. Для получения дополнительной информации см. Мониторинг с помощью AutoOps.

© 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/increase-cluster-shard-limit.html

Spec-Zone.ru

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