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端口沒開通訪問權限,防火牆限制了;
4、沒有使用默認的應用名稱,導致cluster name不一致;cluster.name 配置的,和代碼使用的必須一致。
下面給一個連接實例:
@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;
}