线上Elastcisearch遇到的问题 org.elasticsearch.transport.ReceiveTimeoutTransportException
记录
本着使用ES能够快速方便的获取数据,线下搜索模块使用了ES,结果一直报错:
org.elasticsearch.transport.ReceiveTimeoutTransportException: [][10.2.2.121:9200][cluster:monitor/nodes/liveness] request_id [5814] timed out after [5000ms]
at org.elasticsearch.transport.TransportService$TimeoutHandler.run(TransportService.java:698)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [{#transport#-1}{10.2.2.121}{10.2.2.121:9200}]
翻译下说是找不到可用的节点,查阅各种原因:
1、首先我们有三个环境,开发,测试,预生产,这些都是没问题的,怀疑是生产环境的问题,因为代码是没问题的。其实这里从一开始定查找问题的方向就错了。一开始应该是先看生产的配置文件,可是太过自信了。是个坑。
1、开始怀疑是环境的问题
1.1、查看ES的安装环境
1.2、JDK环境,java -version,翻过一篇帖子有说是关于版本的问题,看了下其他环境的,相差不大,都是1.8jdk版本。
1.3、怀疑是ES服务端启动多个的问题,使用linux命令查看:ps aux | grep elasticsearch,结果没有问题,只启动了一个
1.4、ES里面的客户端连接和服务端连接不是交给ES服务端去控制的,而且将这种连接委托给操作系统,说是默认keepalive这个会返回给客户端,具体我不是很明白,因为是英文帖子,翻译看不懂,只知道说要去更改keepalive的存活时间,也就是更改Linux的内核
1.5、更改之后,依旧报错,不是这个的问题,之后查看Linux的内存,说是内存不足也会导致这个问题,free -h,发现内存充足
1.6、怀疑到这里,基本上环境那边都不知道要去看哪里了。从安装路径,启动配置,包括linux的配置这些,都查了个遍,没有问题。
这时候,突然我翻到一篇帖子,就三个处理结果,导致我去仔仔细细看了生产的配置环境
https://blog.****.net/u013401685/article/details/17931041
帖子就写了三个问题:1、端口不对,2、jar包冲突,3、集群名字。
之后发现,端口写错了。程序之间jar包的通讯是通过9300来连接的。而9200是作为Http协议去连接的。ES集群之间的通讯也是通过9300去连接的。
9200是应用于这里:
9300是应用于这里:
怎么说,就是粗心大意导致的很多问题,还是不够细心,记录之。