赞
踩
某次监控项目里,后端数据分析组件启动时,catalina日志报错无法连接ES,显示所有ES当前状态不可用,报错如下:
2022-05-16 10:18:57.667 [localhost-startStop-1] ERROR c.u.a.q.QuartzJobBaseLineBean -
org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [{#transport#-1}{192.168.1.23}{192.168.1.23:9300}, {#transport#-2}{192.168.1.70}{192.168.1.70:9300}, {#transport#-3}{192.168.1.74}{192.168.1.74:9300}]
at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:290) ~[elasticsearch-2.3.4.jar:2.3.4]
at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:207) ~[elasticsearch-2.3.4.jar:2.3.4]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_221]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_221]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_221]
1、版本不一致引起的问题
spring-beans-3.1.1,源环境elasticsearch-2.3.4,新环境ES 7.0.1,spring整合ES需要对应的版本皮本,因为请求接口和方式不一样了,本例中明显应该是版本不一致所引起的问题。
我们来看一下spring-data-elasticsearch 和Elasticsearch 版本对应关系,更多参看:版本对应关系,elastic官方网址
现场环境:
SpringBoot连接ElasticSearch有以下几种方式:
TransportClient,9300端口,在 7.x 中已经被弃用,据说在8.x 中将完全删除;
restClient,9200端口;
high level client,新推出的连接方式,基于restClient。使用的版本需要保持和ES服务端的版本一致。
Spring boot 2的spring-boot-starter-data-elasticsearch支持的Elasticsearch版本是2.X,Elasticsearch已迭代到7.X.X版本,建议使用high-level-client进行链接。现场spring与es 2.3.4集成,这样Java客户端就可通过9300端口与集群交互,使用Elasticsearch传输协议(Elasticsearch Transport Protocol)。请一定注意版本兼容问题。这关系到很多maven依赖。
2、如果你的java代码连接方式为下面的代码,要在配置文件中存在此结点。
cluster.name在es配置文件(elasticsearch-2.3.3\config\elasticsearch.yml)存在。如下图所示:
可注释掉cluster.name尝试,或修改为一致的。
3、采用ES 2.3.4后,重新启动项目后正常,效果如下:
1)京东图书获取信息存储示例
SpringBoot+Elasticsearch7.7.0实战。
2)elasticsearch历史数据清理
1>清除30天前数据
#! /bin/bash
echo "Begin @ `date +%Y%m%d%H%M%S`"
d7=$(date +%Y.%m.%d --date '31 days ago')
curl -XDELETE "http://localhost:9200/logstash-$d7?pretty"
echo "End @ `date +%Y%m%d%H%M%S`"
#示例2
#! /bin/bash
echo "Begin @ `date +%Y%m%d%H%M%S`"
for i in {31..30};
do
d7=$(date +%Y.%m.%d --date "$i days ago")
curl -XDELETE "http://localhost:9200/logstash-$d7?pretty"
done
echo "End @ `date +%Y%m%d%H%M%S`"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。