NoNodeAvailableException[None of the configured nodes are available
这个报错,意思就是你要连接的节点不可用,连不上,一般有以下几个原因:
1、ES服务没启动,肯定连不上,可以访问下9200端口试下;
2、端口使用错了,在Java创建es的client连接,要使用9300端口(TCP端口,客户端连接使用此端口,在配置文件elasticsearch.yml里配置的,默认9300),不是9200(HTTP端口,RESTful api使用此端口);
3、9300端口没开通访问权限,防火墙限制了,可以使用telnet ip 9300 试试,或者尝试关闭es所在服务器防火墙试试;
4、没有使用默认的应用名称,导致cluster name不一致;cluster.name 配置的,和代码使用的必须一致。
5、es配置文件 elasticsearch.yml 里 network.host 配置的是 127.0.0.1 或 0.0.0.0 ,需要改成实际的ip,调用的时候也相应的使用此ip
6、使用了集群配置,但是部署的是单节点。需要在es配置文件 elasticsearch.yml 里,将discovery.zen.minimum_master_nodes 设置为1
7、安装的es版本与使用的jar包版本不一致,TransportClient需要版本一致才可以使用
下面给一个连接实例:
@Bean
public ElasticsearchTemplate elasticsearchTemplate(){
try {
//设置集群名称
Settings settings = Settings.builder()
.put("cluster.name", globalConfig.getEsClusterName())//必须与es配置文件里的cluster name 一致
.put("client.transport.sniff", true)
.build();
//构建TransportAddress
String hosts = globalConfig.getEsClusterHost();
int port = Integer.parseInt(globalConfig.getEsClusterPort());//9300
List<TransportAddress> addressList = new ArrayList<>();
if(!StringUtils.isEmpty(hosts)){
for(String host:hosts.split(",")){
addressList.add(new InetSocketTransportAddress(InetAddress.getByName(host),port));
}
}
//创建client
Client client = new PreBuiltTransportClient(settings).addTransportAddresses(
(TransportAddress[])addressList.toArray(new TransportAddress[addressList.size()]));
return new ElasticsearchTemplate(client);
}catch (Exception e){
e.printStackTrace();
}
return null;
}
maven引用如下
<elasticsearch>5.5.2</elasticsearch>
<!--elasticsearch client -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>${elasticsearch}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>${elasticsearch}</version>
<exclusions>
<exclusion>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport-netty4-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport-netty4-client</artifactId>
<version>${elasticsearch}</version>
</dependency>
<!-- IK分词器 -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch-analysis-ik</artifactId>
<version>${elasticsearch}</version>
</dependency>
</dependencies>