无法通过9300端口连接远程es集群

问题描述: 利用docker在远程主机上部署了一套es节点,在本地电脑上可以通过kibana连接成功,访问ip:9200可以访问成功,通过java客户端连接9300端口,操作失败报错内容为:
NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{o_MdofxbQCiafOWQNe0dVQ}{ip}{123.206.xxx.xxx:9300}] ]
解决:
1. 通过telnet ip 9300发现网络不通。elasticsearch连接远程服务器需要设置network.address参数。修改elasticsearch.yml将network.address设置为0.0.0.0
network.address: 0.0.0.0
增加该配置后,启动docker 报错:
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解决:
sudo sysctl -w vm.max_map_count=655360
并用以下命令查看是否修改成功
sysctl -a | grep “vm.max_map_count”
修改配置文件
sudo vim /etc/sysctl.conf
加入:
vm.max_map_count=262144
docker启动成功后,通过java客户端连接依然报错
NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{o_MdofxbQCiafOWQNe0dVQ}{ip}{123.206.xxx.xxx:9300}] ]
原来在java代码中使用嗅探技术,java客户端会去嗅探es集群中的所有节点以便客户端使用,但在嗅探时发生错误造成操作失败。ps:为什么会嗅探失败暂未解决。
解决:
修改java代码将嗅探关闭,采用手动添加节点的方式后操作成功。
java代码:
@PostConstruct
public void initialize() throws Exception {
    Settings esSettings = Settings.builder()
            .put("cluster.name", esClusterName)
            // TODO 关闭网络嗅探 ,自动嗅探时会报错 原因没搞明白
            .put("client.transport.sniff", false).build();
    client = new PreBuiltTransportClient(esSettings);
    String[] esHosts = esHost.trim().split(",");
    // 循环添加配置中的各个es节点
    for (String host : esHosts) {
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host),
                esPort));
    }
}
参考文章:https://blog.csdn.net/Gamer_gyt/article/details/52960941
https://blog.csdn.net/kevinxxw/article/details/62091142
项目源码:https://github.com/iqijun/elasticsearchDemo

创作不易,转载请注明文章来源为www.full-satcker.com:邢桂帅 » 无法通过9300端口连接远程es集群

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址