Link Search Menu Expand Document Documentation Menu

集群管理器任务节流

对于许多集群状态更新,例如定义映射或创建索引,节点会将任务提交给集群管理器。集群管理器为这些任务维护一个待处理任务队列,并在单线程环境中运行它们。当节点发送数万个资源密集型任务(例如 put-mapping 或快照任务)时,这些任务可能会在队列中堆积并使集群管理器不堪重负。这会影响集群管理器的性能,进而可能影响整个集群的可用性。

第一道防线是在调用节点中实现机制,以避免集群管理器上的任务过载。然而,即使有了这些机制,集群管理器仍需要一种内置方式来保护自己:集群管理器任务限流。

默认情况下,集群管理器使用预定义的限流阈值来决定是否拒绝任务。您可以修改这些限流阈值或禁用特定任务类型的限流。

集群管理器根据任务类型拒绝任务。对于任何传入任务,集群管理器会评估待处理任务队列中相同类型任务的总数。如果此数量超过该任务类型的阈值,集群管理器将拒绝传入任务。拒绝一个任务不会影响不同类型的任务。例如,如果集群管理器拒绝了一个 put-mapping 任务,它仍然可以接受后续的 create-index 任务。

当集群管理器拒绝一个任务时,节点会使用指数退避策略重试,以将任务重新提交给集群管理器。如果在超时期限内重试不成功,OpenSearch 将返回集群超时错误。

设置限流阈值

您可以通过在 cluster_manager.throttling.thresholds 对象中指定限流阈值并更新 OpenSearch 集群设置来设置限流。此设置是动态的,因此您无需重新启动集群即可更改此功能的行为。

默认情况下,所有任务类型都启用限流。要禁用特定任务类型的限流,请将其阈值设置为 -1

请求格式如下

PUT _cluster/settings
{
  "persistent": {
    "cluster_manager.throttling.thresholds" : {
      "<task-type>" : {
          "value" : <threshold>
      }
    }
  }
}

cluster_manager.throttling.thresholds 对象包含以下字段。

字段名 描述
<任务类型> 任务类型。有关有效任务类型的列表,请参阅支持的任务类型和默认阈值
<任务类型>.值 集群管理器待处理任务队列中 task-type 类型任务的最大数量。
有关每种任务类型的默认阈值,请参阅支持的任务类型和默认阈值

支持的任务类型和默认阈值

下表列出了所有支持的任务类型及其默认限流阈值。

任务类型 阈值
create-index 50
update-settings 50
cluster-update-settings 50
auto-create 200
delete-index 50
delete-dangling-index 50
create-data-stream 50
remove-data-stream 50
rollover-index 200
index-aliases 200
put-mapping 10000
create-index-template 50
remove-index-template 50
create-component-template 50
remove-component-template 50
create-index-template-v2 50
remove-index-template-v2 50
put-pipeline 50
delete-pipeline 50
put-search-pipeline 50
delete-search-pipeline 50
create-persistent-task 50
finish-persistent-task 50
remove-persistent-task 50
update-task-state 50
create-query-group 50
delete-query-group 50
update-query-group 50
put-script 50
delete-script 50
put-repository 50
delete-repository 50
create-snapshot 50
delete-snapshot 50
update-snapshot-state 5000
restore-snapshot 50
cluster-reroute-api 50

请求示例

以下请求将 put-mapping 任务类型的限流阈值设置为 100

PUT _cluster/settings
{
  "persistent": {
    "cluster_manager.throttling.thresholds": {
      "put-mapping": {
        "value": 100
      }
    }
  }
}

剩余 350 字符

有问题?

想要贡献?