es 连接出错,错误信息如下:
[None of the configured nodes are available:[{#transport#-1}{Wn5UYXoTTIaPT4LZ3-RtZg}{???.???.?.???}{???.???.?.???:9200}]]
常见问题场景:
1)端口应该为 9300;
2)TransportClient 版本与 ES 版本不一致;
3)Client.transport.sniff 参数值为 false;如果值为 true 会报 NoNodeAvailableException 。当 ES 服务器监听使用内网服务器 IP 而访问使用外网 IP 时,如果将 client.transport.sniff 设置为 true,则在自动发现时会使用内网 IP 进行通信,导致无法连接到 ES 服务器;建议将参数设置为 false,然后直接使用 addTransportAddress 方法手动添加入口节点;
4)InetAddress.getByName() 方法中参数值,必须替换为您的 ES 实例基本信息界面中的内网地址(比如 192.168.1.115)。
举例说明:
public TransportClientgetESConnection() {
TransportClient client =null;
try {
Settings esSettings = Settings.builder()
.put("cluster.name", "elasticsearch_cluster")// 设置ES实例的名称
.put("client.transport.sniff", false)// 自动嗅探整个集群的状态,把集群中其他ES节点的ip添加到本地的客户端列表中
.build();
client =new PreBuiltTransportClient(esSettings);// 初始化 client 较老版本发生了变化,此方法有几个重载方法,初始化插件等。
// 此步骤添加 IP ,至少一个,其实一个就够了,因为添加了自动嗅探配置
client.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.115"), 9300));
}catch (UnknownHostException e) {
log.info("elasticsearch连接异常信息 : {}", e.getMessage());
}
return client;
}
作者:平面小狮子
链接:https://www.jianshu.com/p/c0b4e3048d21
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。