elasticsearch 5.5.3 Java客户端API NoNodeAvailableException与docker

我使用Docker从Install Elasticsearch下载了映像,然后运行以下命令启动:

docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:5.5.3 

使用传输客户端来访问它。

 Settings settings = Settings.builder() .put("cluster.name", "docker-cluster").build(); TransportClient client = new PreBuiltTransportClient(settings); client.addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress(my-elastic, 9300))); 

我什么都没做,但是我得到了一个N​​oNodeAvailableException错误:

 NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{9VJdNJv9S7O3Pchx2z2wEg}{my-elastic}{192.168.99.100:9300}]] 

我该怎么办才能解决这个问题?

启动日志:

 my-elastic | [2017-11-01T07:45:52,040][INFO ][oenNode ] [] initializing ... my-elastic | [2017-11-01T07:45:52,178][INFO ][oeeNodeEnvironment ] [h-M1oJa] using [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/sda1)]], net usable_space [8.3gb], net total_space [17.8gb], spins? [possibly], types [ext4] my-elastic | [2017-11-01T07:45:52,179][INFO ][oeeNodeEnvironment ] [h-M1oJa] heap size [1.9gb], compressed ordinary object pointers [true] my-elastic | [2017-11-01T07:45:52,184][INFO ][oenNode ] node name [h-M1oJa] derived from node ID [h-M1oJaUTY-G0ezl-89-cw]; set [node.name] to override my-elastic | [2017-11-01T07:45:52,185][INFO ][oenNode ] version[5.5.2], pid[1], build[b2f0c09/2017-08-14T12:33:14.154Z], OS[Linux/4.4.52-boot2docker/amd64], JVM[Oracle Corporation/OpenJDK 64-Bit Server VM/1.8.0_141/25.141-b15] my-elastic | [2017-11-01T07:45:52,185][INFO ][oenNode ] JVM arguments [-Xms2g, -Xmx2g, -XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -Djdk.io.permissionsUseCanonicalPath=true, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Dlog4j.skipJansi=true, -XX:+HeapDumpOnOutOfMemoryError, -Des.path.home=/usr/share/elasticsearch] my-elastic | [2017-11-01T07:45:54,225][INFO ][oepPluginsService ] [h-M1oJa] loaded module [aggs-matrix-stats] my-elastic | [2017-11-01T07:45:54,225][INFO ][oepPluginsService ] [h-M1oJa] loaded module [ingest-common] my-elastic | [2017-11-01T07:45:54,225][INFO ][oepPluginsService ] [h-M1oJa] loaded module [lang-expression] my-elastic | [2017-11-01T07:45:54,225][INFO ][oepPluginsService ] [h-M1oJa] loaded module [lang-groovy] my-elastic | [2017-11-01T07:45:54,225][INFO ][oepPluginsService ] [h-M1oJa] loaded module [lang-mustache] my-elastic | [2017-11-01T07:45:54,225][INFO ][oepPluginsService ] [h-M1oJa] loaded module [lang-painless] my-elastic | [2017-11-01T07:45:54,226][INFO ][oepPluginsService ] [h-M1oJa] loaded module [parent-join] my-elastic | [2017-11-01T07:45:54,226][INFO ][oepPluginsService ] [h-M1oJa] loaded module [percolator] my-elastic | [2017-11-01T07:45:54,226][INFO ][oepPluginsService ] [h-M1oJa] loaded module [reindex] my-elastic | [2017-11-01T07:45:54,226][INFO ][oepPluginsService ] [h-M1oJa] loaded module [transport-netty3] my-elastic | [2017-11-01T07:45:54,226][INFO ][oepPluginsService ] [h-M1oJa] loaded module [transport-netty4] my-elastic | [2017-11-01T07:45:54,226][INFO ][oepPluginsService ] [h-M1oJa] no plugins loaded my-elastic | [2017-11-01T07:45:57,851][INFO ][oedDiscoveryModule ] [h-M1oJa] using discovery type [zen] my-elastic | [2017-11-01T07:45:59,062][INFO ][oenNode ] initialized my-elastic | [2017-11-01T07:45:59,062][INFO ][oenNode ] [h-M1oJa] starting ... my-elastic | [2017-11-01T07:45:59,376][INFO ][oetTransportService ] [h-M1oJa] publish_address {127.0.0.1:9300}, bound_addresses {[::1]:9300}, {127.0.0.1:9300} my-elastic | [2017-11-01T07:46:02,520][INFO ][oecsClusterService ] [h-M1oJa] new_master {h-M1oJa}{h-M1oJaUTY-G0ezl-89-cw}{dYFfXS4vToOMMfAEWy57ig}{127.0.0.1}{127.0.0.1:9300}, reason: zen-disco-elected-as-master ([0] nodes joined) my-elastic | [2017-11-01T07:46:02,588][INFO ][oehnNetty4HttpServerTransport] [h-M1oJa] publish_address {172.18.0.8:9200}, bound_addresses {[::]:9200} my-elastic | [2017-11-01T07:46:02,591][INFO ][oenNode ] [h-M1oJa] started 

我可以用Postman访问http://192.168.99.100:9200 。

 { "name": "-v9MHhY", "cluster_name": "docker-cluster", "cluster_uuid": "Ig6tY10oSc6hAbpLqo9fcg", "version": { "number": "5.5.3", "build_hash": "9305a5e", "build_date": "2017-09-07T15:56:59.599Z", "build_snapshot": false, "lucene_version": "6.6.0" }, "tagline": "You Know, for Search" } 

telnet 192.168.99.100:9200是可以的。
telnet 192.168.99.100:9300是可以的。
telnet可以访问这两个端口。

而我正在使用spring boot2.0.0M5。 elasticsearch的默认版本是5.5.3。

在elasticsearch.yml上configurationnetwork.host: 0.0.0.0

常见错误:

  • 忘了在机器上定义network.host
  • cluster.name更改
  • port 9300防火墙问题

参考文献:

network.host

常用networking设置中介绍的network.host设置是同时设置绑定主机和发布主机的快捷方式。 在高级用例中,例如在代理服务器后运行时,可能需要将这些设置设置为不同的值:

network.bind_host

这指定节点应该绑定到哪个networking接口以侦听传入的请求。 节点可以绑定到多个接口,例如两个网卡,或一个站点本地地址和一个本地地址。 默认为network.host。

network.publish_host

发布主机是节点通告给集群中其他节点的单一接口,以便这些节点能够连接到它。 目前一个Elasticsearch节点可能被绑定到多个地址,但只发布一个。 如果未指定,则默认为network.host中的“最佳”地址,按IPv4 / IPv6堆栈优先级sorting,然后按可访问性sorting。 如果您设置的network.host导致多个绑定地址,但依赖于特定的地址进行节点到节点的通信,则应明确设置network.publish_host。

networking设置

network.host

节点将绑定到此主机名或IP地址,并将此主机发布(通告)到集群中的其他节点。 接受IP地址,主机名,特殊值或这些的任意组合的数组。

默认为本地

HTTP-设置

http.bind_host

将HTTP服务绑定到的主机地址。 默认为http.host(如果设置)或network.bind_host。

http.publish_host

HTTP客户端要发布的主机地址。 默认为http.host(如果设置)或network.publish_host。

http.host

用于设置http.bind_host和http.publish_host默认值为http.host或network.host。