集群管理器任务节流
对于许多集群状态更新,例如定义映射或创建索引,节点会将任务提交给集群管理器。集群管理器为这些任务维护一个待处理任务队列,并在单线程环境中运行它们。当节点发送数万个资源密集型任务(例如 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
}
}
}
}