集群更新设置 API

编辑

配置动态集群设置

请求

编辑

PUT /_cluster/settings

前提条件

编辑
  • 如果启用了 Elasticsearch 安全功能,您必须拥有 manage 集群权限才能使用此 API。

描述

编辑

您可以使用集群更新设置 API 在运行中的集群上配置和更新动态设置。您也可以使用 elasticsearch.yml 在未启动或关闭的节点上本地配置动态设置。

使用集群更新设置 API 进行的更新可以是持久的,这会在集群重启后仍然有效;也可以是临时的,这会在集群重启后重置。您还可以使用 API 将临时或持久设置赋值为 null 来重置它们。

如果您使用多种方法配置相同的设置,Elasticsearch 会按照以下优先级顺序应用设置:

  1. 临时设置
  2. 持久设置
  3. elasticsearch.yml 设置
  4. 默认设置值

例如,您可以应用临时设置来覆盖持久设置或 elasticsearch.yml 设置。但是,对 elasticsearch.yml 设置的更改不会覆盖已定义的临时或持久设置。

如果您使用 Elasticsearch Service,请使用用户设置功能来配置所有集群设置。此方法允许 Elasticsearch Service 自动拒绝可能破坏集群的不安全设置。

如果您在自己的硬件上运行 Elasticsearch,请使用集群更新设置 API 配置动态集群设置。仅将 elasticsearch.yml 用于静态集群设置和节点设置。该 API 不需要重启,并确保设置的值在所有节点上都相同。

我们不再建议使用临时集群设置。请改用持久集群设置。如果集群变得不稳定,临时设置可能会意外清除,从而导致潜在的不良集群配置。请参阅临时设置迁移指南

查询参数

编辑
flat_settings
(可选,布尔值)如果为 true,则以平面格式返回设置。默认为 false
include_defaults
(可选,布尔值)如果为 true,则返回所有默认集群设置。默认为 false
master_timeout
(可选,时间单位)等待主节点的时间。如果在超时到期之前主节点不可用,则请求将失败并返回错误。默认为 30s。也可以设置为 -1,表示请求永远不会超时。
timeout
(可选,时间单位)在更新集群元数据后,等待集群中所有相关节点响应的时间。如果在超时到期之前未收到响应,则集群元数据更新仍然适用,但响应将指示该更新未完全确认。默认为 30s。也可以设置为 -1,表示请求永远不会超时。

示例

编辑

持久更新的示例

resp = client.cluster.put_settings(
    persistent={
        "indices.recovery.max_bytes_per_sec": "50mb"
    },
)
print(resp)
response = client.cluster.put_settings(
  body: {
    persistent: {
      'indices.recovery.max_bytes_per_sec' => '50mb'
    }
  }
)
puts response
const response = await client.cluster.putSettings({
  persistent: {
    "indices.recovery.max_bytes_per_sec": "50mb",
  },
});
console.log(response);
PUT /_cluster/settings
{
  "persistent" : {
    "indices.recovery.max_bytes_per_sec" : "50mb"
  }
}

临时更新的示例

我们不再建议使用临时集群设置。请改用持久集群设置。如果集群变得不稳定,临时设置可能会意外清除,从而导致潜在的不良集群配置。请参阅临时设置迁移指南

resp = client.cluster.put_settings(
    flat_settings=True,
    transient={
        "indices.recovery.max_bytes_per_sec": "20mb"
    },
)
print(resp)
response = client.cluster.put_settings(
  flat_settings: true,
  body: {
    transient: {
      'indices.recovery.max_bytes_per_sec' => '20mb'
    }
  }
)
puts response
const response = await client.cluster.putSettings({
  flat_settings: "true",
  transient: {
    "indices.recovery.max_bytes_per_sec": "20mb",
  },
});
console.log(response);
PUT /_cluster/settings?flat_settings=true
{
  "transient" : {
    "indices.recovery.max_bytes_per_sec" : "20mb"
  }
}

更新的响应会返回已更改的设置,如下面的临时示例的响应所示

{
  ...
  "persistent" : { },
  "transient" : {
    "indices.recovery.max_bytes_per_sec" : "20mb"
  }
}

此示例重置一个设置

resp = client.cluster.put_settings(
    transient={
        "indices.recovery.max_bytes_per_sec": None
    },
)
print(resp)
response = client.cluster.put_settings(
  body: {
    transient: {
      'indices.recovery.max_bytes_per_sec' => nil
    }
  }
)
puts response
const response = await client.cluster.putSettings({
  transient: {
    "indices.recovery.max_bytes_per_sec": null,
  },
});
console.log(response);
PUT /_cluster/settings
{
  "transient" : {
    "indices.recovery.max_bytes_per_sec" : null
  }
}

响应不包括已重置的设置

{
  ...
  "persistent" : {},
  "transient" : {}
}

您也可以使用通配符重置设置。例如,要重置所有动态的 indices.recovery 设置

resp = client.cluster.put_settings(
    transient={
        "indices.recovery.*": None
    },
)
print(resp)
response = client.cluster.put_settings(
  body: {
    transient: {
      "indices.recovery.*": nil
    }
  }
)
puts response
const response = await client.cluster.putSettings({
  transient: {
    "indices.recovery.*": null,
  },
});
console.log(response);
PUT /_cluster/settings
{
  "transient" : {
    "indices.recovery.*" : null
  }
}