elasticsearch pending_tasks 数量多原因分析

现象:
es集群在创建天或者小时索引的时候出现很多的pending_tasks,整点的时候都会出现大部分index数据写入延时的现象,10分钟后又恢复正常,非数据写入高峰时出现延时

环境:
es版本6.2.4
3台独立主节点+18台数据节点
160个索引每个索引15个分片
有不少索引都是按照小时创建索引的

分析:

  • 首先弄清楚master节点与node节点分工,master节点会创建index,设置mapping,调度分片等;node节点主要就是写入数据

  • 其次从关键点pending_tasks着手,查看有多少pending_tasks任务,已经pending_task任务都是哪些

    发现URGENT任务为create index,HIGH任务为put mapping

  • 最后逻辑推理出上述现象的原因

    pending task 反应了master节点尚未执行的集群级别的更改任务(例如:创建索引,更新映射,分配分片)的列表。pending task的任务是分级别的(优先级排序:IMMEDIATE>URGENT>HIGH>NORMAL>LOW>LANGUID),只有当上一级别的任务执行完毕后才会执行下一级别的任务,这也说明了:当出现HIGH级别以上的pending task任务时,备份和创建索引等一些低级别任务虽然任务对资源占用不多,也将不会执行

结论:
任务产生比处理快就卡了,看看能提高主节点处理速度不,横向扩容主节点;或者调优,调优方向:日志源格式化,mapping用静态的,另外每小时创建那么多Index任务确实比较多是否有必要等
ES集群本来大部分就优化好了的,不需要再刻意优化,主要从使用习惯上考虑,如果不够就扩容