spring boot连接ES异常报错:None of the configured nodes are available

一、问题描述

某次监控项目里,后端数据分析组件启动时,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`"

猜你喜欢

转载自blog.csdn.net/ximenjianxue/article/details/124796517
今日推荐