Elasticsearch中任务管理怎么做?

一个ES集群研发在清理数据时使用了delete_by_query,导致集群性能严重受影响,影响了正常的业务。为了快速恢复集群正常状态,考虑把还在进行的delete_by_query任务清除掉。

先查看当前集群的任务

复制代码
GET _cat/tasks?v

发现delete_by_query的任务300多个,而且有的任务已经执行了20多分钟。 (当时图没截下来有点可惜)

确定要取消这些任务,因为比较紧,一着急反而采用了一个比较笨也比较慢的方法:

通过grep过滤出delete_by_query的任务,并获取taskid列表

复制代码
curl  localhost:9200/_cat/tasks?v | grep 'delete/byquery'  | awk '{print $2}'   > tasks.txt

根据获取的id列表,调api取消任务

复制代码
for i in `cat tasks.txt`
do
	  curl localhost:9200/_tasks/$i/_cancel
done

然后再查看task列表,发现所有delete_by_query的任务都被取消掉了。

上面这个过程哪里消耗时间了?

复制代码
1. 需要找到一个可以执行Shell 命令的机器,并且还能连到该ES集群,往往维护的集群与维护者本地网络是不通的,而ES提供的kibana又不能执行shell命令。这里可能会消耗一些时间。
1. 脚本需要现写,而且特别容易出错

综上,感觉ES本身不可能没有考虑到类似的批量取消功能,又返回去查了官方文档。于是上述过程可以优化成下面的过程:

查看要取消任务类型或关键字过滤任务:

复制代码
GET  _cat/tasks?v

从返回数据中提取要取消任务Action列的关键字

批量取消,根据action关键字

复制代码
POST _tasks/_cancel?actions=*byquery

这一条命令等同第一种方法中的shell脚本实现的内容,且可以直接在kibana执行,不需要shell环境。唯一欠缺可能就是无法根据id精准操作指定的任务。在关键字匹配范围内的任务都会被取消,使用的关键字一定要准确。

最后,遇到问题不确定是否有更好的解决方法,可以去看官方文档,可以解决90%的问题。

相关推荐
酌量9 小时前
nvidia orin agx刷机忘记CUDA runtime,安装torch和cuda
linux·笔记·ubuntu·torch·cuda·agx
R_.L9 小时前
【云服务器】VSCode连接云服务器
服务器·vscode
满天星83035779 小时前
【MySQL】表的基本查询(上)
linux·服务器·数据库·mysql
alan07219 小时前
【小团队私有化git搭建】
大数据·elasticsearch·搜索引擎
yuanlaile9 小时前
Linux Docker、Swarm、K8s分布式部署全集解析
linux·docker·kubernetes·k8s实战
皮卡蛋炒饭.9 小时前
库制作与原理
linux·学习
PyHaVolask9 小时前
Linux实用工具与技巧
linux·运维·chrome
不才小强10 小时前
Linux开发环境搭建指南
linux·运维·服务器
syjy210 小时前
(含下载)WP Mail SMTP Pro WordPress插件使用教程
运维·服务器·wordpress·wordpress插件
海参崴-10 小时前
三足鼎立:Linux、苹果macOS与微软Windows的前世今生及核心差异
linux·microsoft·macos