Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›REST API ›API кластера

API создания или обновления желаемых узлов

Данная функция предназначена для косвенного использования службой Elasticsearch Service, Elastic Cloud Enterprise и Elastic Cloud на Kubernetes. Прямое использование не поддерживается.

Новая справка по API

Для получения самых последних данных о работе API обратитесь к API кластера.

Создает или обновляет желаемые узлы.

Запрос

resp = client.perform_request(
    "PUT",
    "/_internal/desired_nodes/<history_id>/<version>",
    headers={"Content-Type": "application/json"},
    body={
        "nodes": [
            {
                "settings": {
                    "node.name": "instance-000187",
                    "node.external_id": "instance-000187",
                    "node.roles": [
                        "data_hot",
                        "master"
                    ],
                    "node.attr.data": "hot",
                    "node.attr.logical_availability_zone": "zone-0"
                },
                "processors": 8,
                "memory": "58gb",
                "storage": "2tb"
            }
        ]
    },
)
print(resp)
const response = await client.transport.request({
  method: "PUT",
  path: "/_internal/desired_nodes/<history_id>/<version>",
  body: {
    nodes: [
      {
        settings: {
          "node.name": "instance-000187",
          "node.external_id": "instance-000187",
          "node.roles": ["data_hot", "master"],
          "node.attr.data": "hot",
          "node.attr.logical_availability_zone": "zone-0",
        },
        processors: 8,
        memory: "58gb",
        storage: "2tb",
      },
    ],
  },
});
console.log(response);
PUT /_internal/desired_nodes/<history_id>/<version>
{
    "nodes" : [
        {
            "settings" : {
                 "node.name" : "instance-000187",
                 "node.external_id": "instance-000187",
                 "node.roles" : ["data_hot", "master"],
                 "node.attr.data" : "hot",
                 "node.attr.logical_availability_zone" : "zone-0"
            },
            "processors" : 8.0,
            "memory" : "58gb",
            "storage" : "2tb"
        }
    ]
}

Параметры запроса

master_timeout
(Необязательно, единицы измерения времени) Период ожидания узла мастера. Если узел мастера недоступен до истечения таймаута, запрос завершится ошибкой. По умолчанию 30s. Также можно задать значение -1, чтобы указать, что запрос никогда не должен таймаутиться.
dry_run
(Необязательно, логическое значение) Если true, то запрос моделирует обновление и возвращает ответ со значением поля dry_run, установленным в true.

Описание

Этот API создает или обновляет желаемые узлы. Внешние оркестраторы могут использовать этот API, чтобы сообщить Elasticsearch о топологии кластера, включая будущие изменения, такие как добавление или удаление узлов. Используя эту информацию, система может принимать более эффективные решения.

Можно выполнить обновление в режиме «сухого запуска», добавив параметр запроса ?dry_run. Это позволит проверить результат запроса, но фактически не выполнит обновление.

Примеры

В этом примере создается новая версия желаемых узлов с историей Ywkh3INLQcuPT49f6kcppA. Этот API принимает только монотонно возрастающие версии.

resp = client.perform_request(
    "PUT",
    "/_internal/desired_nodes/Ywkh3INLQcuPT49f6kcppA/100",
    headers={"Content-Type": "application/json"},
    body={
        "nodes": [
            {
                "settings": {
                    "node.name": "instance-000187",
                    "node.external_id": "instance-000187",
                    "node.roles": [
                        "data_hot",
                        "master"
                    ],
                    "node.attr.data": "hot",
                    "node.attr.logical_availability_zone": "zone-0"
                },
                "processors": 8,
                "memory": "58gb",
                "storage": "2tb"
            }
        ]
    },
)
print(resp)
const response = await client.transport.request({
  method: "PUT",
  path: "/_internal/desired_nodes/Ywkh3INLQcuPT49f6kcppA/100",
  body: {
    nodes: [
      {
        settings: {
          "node.name": "instance-000187",
          "node.external_id": "instance-000187",
          "node.roles": ["data_hot", "master"],
          "node.attr.data": "hot",
          "node.attr.logical_availability_zone": "zone-0",
        },
        processors: 8,
        memory: "58gb",
        storage: "2tb",
      },
    ],
  },
});
console.log(response);
PUT /_internal/desired_nodes/Ywkh3INLQcuPT49f6kcppA/100
{
    "nodes" : [
        {
            "settings" : {
                 "node.name" : "instance-000187",
                 "node.external_id": "instance-000187",
                 "node.roles" : ["data_hot", "master"],
                 "node.attr.data" : "hot",
                 "node.attr.logical_availability_zone" : "zone-0"
            },
            "processors" : 8.0,
            "memory" : "58gb",
            "storage" : "2tb"
        }
    ]
}

API возвращает следующий результат:

{
  "replaced_existing_history_id": false,
  "dry_run": false
}

Кроме того, можно указать диапазон процессоров. Это полезно в средах, где узлы Elasticsearch могут быть развернуты на хостах, где гарантируется, что число процессоров, которые может использовать процесс Elasticsearch, будет не меньше нижнего предела и не больше верхнего предела. Это распространенный сценарий в развертываниях Linux, где используется cgroups.

resp = client.perform_request(
    "PUT",
    "/_internal/desired_nodes/Ywkh3INLQcuPT49f6kcppA/101",
    headers={"Content-Type": "application/json"},
    body={
        "nodes": [
            {
                "settings": {
                    "node.name": "instance-000187",
                    "node.external_id": "instance-000187",
                    "node.roles": [
                        "data_hot",
                        "master"
                    ],
                    "node.attr.data": "hot",
                    "node.attr.logical_availability_zone": "zone-0"
                },
                "processors_range": {
                    "min": 8,
                    "max": 10
                },
                "memory": "58gb",
                "storage": "2tb"
            }
        ]
    },
)
print(resp)
const response = await client.transport.request({
  method: "PUT",
  path: "/_internal/desired_nodes/Ywkh3INLQcuPT49f6kcppA/101",
  body: {
    nodes: [
      {
        settings: {
          "node.name": "instance-000187",
          "node.external_id": "instance-000187",
          "node.roles": ["data_hot", "master"],
          "node.attr.data": "hot",
          "node.attr.logical_availability_zone": "zone-0",
        },
        processors_range: {
          min: 8,
          max: 10,
        },
        memory: "58gb",
        storage: "2tb",
      },
    ],
  },
});
console.log(response);
PUT /_internal/desired_nodes/Ywkh3INLQcuPT49f6kcppA/101
{
    "nodes" : [
        {
            "settings" : {
                 "node.name" : "instance-000187",
                 "node.external_id": "instance-000187",
                 "node.roles" : ["data_hot", "master"],
                 "node.attr.data" : "hot",
                 "node.attr.logical_availability_zone" : "zone-0"
            },
            "processors_range" : {"min": 8.0, "max": 10.0},
            "memory" : "58gb",
            "storage" : "2tb"
        }
    ]
}

© 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/update-desired-nodes.html

Spec-Zone.ru

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