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