背景
昨天周五的时候,突然发现Es的建索引插件,执行后没有返回,后来等待好久,才返回,整个建索引耗时70多秒,平时都是2万+/秒,差异太大了,简直就算是无法工作。
目前环境是这样子:es 6.3.1 版本,一共 36个主机,72个节点即一个主机上部署两个节点,这是我们另外一套的es集群。
找问题
1)首先怀疑是集群问题,去查了下集群,绿色的正常。
2)功能验证:新建个测试的index,没问题,插入数据正常。
4)各种网络ping、telnet测试,ok的,网络没问题。
5)日志检查,客户端没有报错,服务器端有日志:
stop throttling indexing: numMergesInFlight=5, maxNumMerges=6
这种问题是因为段合并的速度敢不上建索引的速度引起的,不过我看了下时间对不上。
在此吐槽下,es6.3.1 怎么无法更改合并段的最大速率限制,如果更改不了那么段合并慢的话,还怎么提升建索引性能,还不能不合并,有知道方法的告知。
后面还有个错误:
java.nio.channels.ClosedChannelException: null
at io.netty.channel.AbstractChannel$AbstractUnsafe.write(...)(Unknown Source) ~[?:?]
看起来就是es服务器端发送客户端的时候抛异常了,我怀疑是超时被客户端断开了,本来想改超时参数的,查了半天也没找到,放弃。
6)我在想肯定有一台主机或一个节点造成的影响整个集群慢,但是没有好的办法找到。
7)实在是没招了,遂叫维护的同事重启,结果半天有shard没有分配,去那台主机看了下,好像io挺严重,去索引目录看最新时间的索引目录(同事这招厉害),进入到index目录底下,ls卡死,基本判定是磁盘坏了,后面主机都无法登陆了。
至于上面建索引只索引没问题,是因为我建的索引用默认的shard,没有达到一个分配一个shard,这样刚好错过了有问题的主机造成的,以后测试还是多少个节点建多少个shard,可以准确测试出哪里有问题。
网友评论