一个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. 脚本需要现写,而且特别容易出错
综上,

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



