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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。