之前一直都是通过yum安装es,最近使用docker-compose部署了一个单节点es,java调用9300端口的时候,总是报错:None of the configured nodes are available,网上找了很多文档,都说cluster.name不一致导致,或者端口不正确,但是程序和es的name都是一致,端口也是正确的。
都有点想放弃的时候,终于找到一篇有用的文章,被坑了两周的问题,终于得到了解决。
主要原因:spring-boot项目中使用了client.transport.sniff为true,使客户端去嗅探整个集群的状态,把集群中其它机器的ip地址加到客户端中。这样做的好处是,一般你不用手动设置集群里所有集群的ip到连接客户端,它会自动帮你添加,并且自动发现新加入集群的机器。
处理方式:
1、把client.transport.sniff修改为false关闭嗅探;或者直接使用addTransportAddress方法把集群中其它机器的ip地址加到客户端中。
2、修改ES服务器配置,将publish_host改为服务器的ip而不是docker分配的内部IP
elasticsearch.yml
cluster.name: elasticsearch network.host: 0.0.0.0 network.publish_host: 192.168.1.200 http.port: 9200 discovery.type: single-node