配置项作用 #
cluster.persistent_tasks.allocation.enable 配置项控制是否允许持久化任务(Persistent Tasks)分配到集群节点。持久化任务是指在集群状态中维护的长期运行任务,如机器学习作业、滚动升级任务等。
配置项类型 #
该配置项为动态配置,可以在运行时通过集群设置 API 进行修改。
默认值 #
all(允许所有持久化任务分配)
是否必需 #
可选配置项(有默认值)
取值范围 #
all - 允许所有持久化任务分配
none - 禁止所有持久化任务分配
配置格式 #
# 默认配置(允许分配)
cluster.persistent_tasks.allocation.enable: all
# 禁止持久化任务分配
cluster.persistent_tasks.allocation.enable: none
# 恢复默认
cluster.persistent_tasks.allocation.enable: all
相关配置项 #
| 配置项 | 默认值 | 说明 |
|---|---|---|
cluster.persistent_tasks.allocation.enable | all | 任务分配开关 |
cluster.persistent_tasks.allocation.recheck_interval | 30s | 重新检查间隔 |
工作原理 #
持久化任务分配控制:
┌─────────────────────────────────────────────────────────────────┐
│ 持久化任务分配流程 │
└─────────────────────────────────────────────────────────────────┘
持久化任务需要分配
│
▼
检查 enable 配置
│
├── all(默认)
│ │
│ ├── 执行分配决策器
│ │
│ ├── 检查节点条件
│ │
│ └── 分配任务到合适节点
│
└── none
│
└── 拒绝所有分配请求
│
└── 任务保持未分配状态
使用场景 #
1. 默认配置(推荐) #
cluster.persistent_tasks.allocation.enable: all
适用场景:
- 所有标准集群配置
- 需要运行持久化任务
- 机器学习、滚动操作等功能
2. 禁用任务分配 #
cluster.persistent_tasks.allocation.enable: none
适用场景:
- 维护模式
- 暂停所有持久化任务
- 集群迁移准备
- 资源受限时临时禁用
常见持久化任务类型 #
1. 机器学习任务
- 异常检测作业
- 数据帧分析作业
2. 数据管理任务
- 滚动升级操作
- 索引生命周期管理
3. 集群管理任务
- 跟踪告警任务
- Watcher 任务
4. 跨集群复制任务
- 复制跟随者任务
推荐设置建议 #
| 场景 | 推荐值 | 说明 |
|---|---|---|
| 正常运行 | all | 允许所有任务 |
| 维护模式 | none | 暂停任务分配 |
| 资源受限 | none | 节省资源 |
| 任务调试 | none | 禁用新任务 |
操作流程示例 #
# 1. 准备维护 - 禁用任务分配
PUT /_cluster/settings
{
"transient": {
"cluster.persistent_tasks.allocation.enable": "none"
}
}
# 2. 等待正在运行的任务完成
GET /_tasks?detailed=true&actions=*:*&pretty
# 3. 执行维护操作
# (维护操作...)
# 4. 维护完成 - 恢复任务分配
PUT /_cluster/settings
{
"transient": {
"cluster.persistent_tasks.allocation.enable": "all"
}
}
动态配置示例 #
# 禁用持久化任务分配
PUT /_cluster/settings
{
"transient": {
"cluster.persistent_tasks.allocation.enable": "none"
}
}
# 启用持久化任务分配
PUT /_cluster/settings
{
"transient": {
"cluster.persistent_tasks.allocation.enable": "all"
}
}
# 永久设置
PUT /_cluster/settings
{
"persistent": {
"cluster.persistent_tasks.allocation.enable": "all"
}
}
监控建议 #
# 查看当前配置
GET /_cluster/settings?filter_path=*.cluster.persistent_tasks.allocation.enable
# 查看持久化任务状态
GET /_persistent/_status
# 查看运行中的任务
GET /_tasks?group_by=parents&pretty
# 查看未分配的任务
GET /_persistent/_status?filter_path=**.unassigned
故障排查 #
任务无法分配 #
# 检查是否禁用了任务分配
GET /_cluster/settings?filter_path=*.cluster.persistent_tasks.allocation.enable
# 如果返回 "none",则任务分配被禁用
# 需要恢复为 "all"
PUT /_cluster/settings
{
"transient": {
"cluster.persistent_tasks.allocation.enable": null
}
}
与其他配置的配合 #
持久化任务分配相关配置:
1. cluster.persistent_tasks.allocation.enable
- 控制是否允许任务分配
- 主开关
2. cluster.persistent_tasks.allocation.recheck_interval
- 控制重新检查未分配任务的间隔
- 与 enable 配合使用
3. 节点角色配置
- 只有特定角色的节点才执行特定任务
- 需要配置正确的 node.roles
注意事项 #
- 动态更新:此配置为动态配置,可在线修改
- 不影响运行任务:设置为 none 不会中断正在运行的任务
- 阻止新分配:只会阻止新任务的分配
- 维护使用:主要用于维护场景
- 保持默认:正常生产环境应保持 all
- 定期检查:禁用后记得恢复





