SolrCloud是在三台机器上搭建的分布式索引,有三个索引集合,每台机器一个shard。
最近发现一个索引集合(itdaan)出现搜索很慢,试图查找原因。如是分别查看三台机器的请求数量。发现192.168.0.37的请求数量高于两外两台机器,但是三个shard的数据又分配比较均匀。花了两个周末,到现在也没找出问题所在。访问SolrCloud我是交由Solr本身自己的负载均衡,理论上不应该出现该问题。既然找不到原因,那我就先看看37为什么慢,看看是不是服务器本身的问题了。
1,请求数量(netstat -nat | grep -i "8983" | wc -l)
分别为 54 33 29
37这台机多一些,也没多太多。
2、查看机器的iowait(iostat -x 1)
(1) 192.168.0.37
avg-cpu: %user %nice %system %iowait %steal %idle 21.29 0.00 6.93 83.37 0.00 0.00 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util vda 0.00 0.00 930.00 0.00 151540.00 0.00 325.89 2.46 2.70 2.70 0.00 0.24 22.00
(2) 192.168.0.36
avg-cpu: %user %nice %system %iowait %steal %idle 9.00 0.00 3.50 11.50 0.00 76.00 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util vda 0.00 0.00 890.00 0.00 6644.00 0.00 14.93 1.76 2.00 2.00 0.00 0.04 4.00
(3)192.168.0.38
avg-cpu: %user %nice %system %iowait %steal %idle 11.06 0.00 2.01 7.54 0.00 79.40 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util vda 0.00 0.00 183.00 0.00 988.00 0.00 10.80 0.22 1.22 1.22 0.00 0.05 0.90
从上面可以看出iowait的值,37明显比其它两台机器的高,也就是说CPU很多资源都在等待io的读取权限;所以也就不奇怪cpu负载很高了,也就导致很多请求很慢。
还注意到一个很重要的指标就是rKB/s,其它两台机器的值都很低,而37却有几乎有147m/s的吞吐!一个小小的solr能搞出这么大的io负载,也是醉了。
为什么Solr会有如此高的IO呢?问题到底发生在哪里。因为我已经试图改变过访问方式,已经可以排除没有使用负载均衡的方式访问Solr。