一、故障描述
2020-04-18 23:10
solrcloud集群报警,大量节点线程数>10000,读写慢请求非常多,搜索业务接口大量超时。
二、紧急处理&故障追踪
紧急处理:
线程数居高不下,判断无法自愈,果断采取紧急节点重启方案,快速恢复服务。
故障追踪:
1、猜测是读写请求慢,导致线程池大量创建线程,第一步需要jstack栈数据分析
solr使用jetty线程池
2、查看solr节点故障时间点的日志
solr大量实时写入报错,伴随大量zookeeper方面的报错
查看当时zookeeper集群监控,存在网卡异常峰值,且日志上有大量集体session断开
3、查看zookeeper和solr session超时设置
- 当前-DzkClientTimeout=15000
- solr源码默认值是45000
三、故障分析
总结轨迹
solr日志可以看到,先是zookeeper断开,update程序找不到leader报错,然后写入报错,读越来越慢。
分析
zookeeper网路抖动,造成solr和zookeeper session断开,solr update ZkStateReader误判leader找不到,重试,进而大量写超时。写和读都是通过jetty的QueueThreadPool,导致读慢,读写慢导致线程激增到10000+。
四、解决
- 排查zookeeper网络抖动原因(需要运维部门协作)
- 加大solr和zk的连接超时时间,使用默认的:-DzkClientTimeout=45000【1未做情况下,修改配置后至今稳定运行】