SpringBoot项目连接ElasticSearch时报错:None of the configured nodes are available
在项目中用到了ElasticSearch,后台使用org.elasticsearch.client.transport.TransportClient连接,使用本机的es测试没问题,但是用部署到公司服务器上的es创建索引报错:None of the configured nodes are available
网上找了好多种解决方案都不适用,最后无意中看到了client.transport.sniff这个参数的介绍,把它设置成false,或者在连接的时候不加这个参数就可以了。看来我们不能只一味地面向百度编程,还要理解每个参数的意思才行。client.transport.sniff为true时,客户端会自动去嗅探整个集群的状态,把集群中其它机器的ip地址加到客户端中。一般你不用手动设置集群里所有集群的ip到连接客户端,它会自动帮你添加,并且自动发现新加入集群的机器,但是要注意的一点,当ES服务器监听(publish_address )使用内网服务器IP,而访问(bound_addresses )使用外网IP时,不要设置client.transport.sniff为true。不设置client.transport.sniff时,默认为false(关闭客户端去嗅探整个集群的状态)。因为在自动发现时会使用内网IP进行通信,导致无法连接到ES服务器。因此此时需要直接使用addTransportAddress方法把集群中其它机器的ip地址加到客户端中(此段话转自“Kevin-林”)。
总结一下,再遇到此类问题的解决方案:
1:检查es集群名称是否正确,检查es的ip和端口号是否正确,端口号是9300tcp协议端口号
2:阿里云等服务器是否已将9300端口号增加到安全组
3:es是否启用了用户名密码登录:.put(xpack.security.user, 用户名:密码)
4:client.transport.sniff参数是否设置正确