集群更新设置 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

示例编辑

持久性更新的示例

resp = client.cluster.put_settings(
    body={"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
PUT /_cluster/settings
{
  "persistent" : {
    "indices.recovery.max_bytes_per_sec" : "50mb"
  }
}

瞬态更新的示例

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

resp = client.cluster.put_settings(
    flat_settings="true",
    body={"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
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(
    body={"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
PUT /_cluster/settings
{
  "transient" : {
    "indices.recovery.max_bytes_per_sec" : null
  }
}

响应中不包括已重置的设置

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

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

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