【问题标题】:elasticsearch 5.5.3 Java client API NoNodeAvailableException with dockerelasticsearch 5.5.3 Java 客户端 API NoNodeAvailableException 与 docker
【发布时间】:2018-04-13 11:45:54
【问题描述】:

我从Install Elasticsearch with Docker下载了图片 并运行以下命令启动:

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

使用Transport Client 访问它。

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

我什么也没做,但出现 NoNodeAvailableException 错误:

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 ][o.e.n.Node               ] [] initializing ...
my-elastic               | [2017-11-01T07:45:52,178][INFO ][o.e.e.NodeEnvironment    ] [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 ][o.e.e.NodeEnvironment    ] [h-M1oJa] heap size [1.9gb], compressed ordinary object pointers [true]
my-elastic               | [2017-11-01T07:45:52,184][INFO ][o.e.n.Node               ] 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 ][o.e.n.Node               ] 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 ][o.e.n.Node               ] 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 ][o.e.p.PluginsService     ] [h-M1oJa] loaded module [aggs-matrix-stats]
my-elastic               | [2017-11-01T07:45:54,225][INFO ][o.e.p.PluginsService     ] [h-M1oJa] loaded module [ingest-common]
my-elastic               | [2017-11-01T07:45:54,225][INFO ][o.e.p.PluginsService     ] [h-M1oJa] loaded module [lang-expression]
my-elastic               | [2017-11-01T07:45:54,225][INFO ][o.e.p.PluginsService     ] [h-M1oJa] loaded module [lang-groovy]
my-elastic               | [2017-11-01T07:45:54,225][INFO ][o.e.p.PluginsService     ] [h-M1oJa] loaded module [lang-mustache]
my-elastic               | [2017-11-01T07:45:54,225][INFO ][o.e.p.PluginsService     ] [h-M1oJa] loaded module [lang-painless]
my-elastic               | [2017-11-01T07:45:54,226][INFO ][o.e.p.PluginsService     ] [h-M1oJa] loaded module [parent-join]
my-elastic               | [2017-11-01T07:45:54,226][INFO ][o.e.p.PluginsService     ] [h-M1oJa] loaded module [percolator]
my-elastic               | [2017-11-01T07:45:54,226][INFO ][o.e.p.PluginsService     ] [h-M1oJa] loaded module [reindex]
my-elastic               | [2017-11-01T07:45:54,226][INFO ][o.e.p.PluginsService     ] [h-M1oJa] loaded module [transport-netty3]
my-elastic               | [2017-11-01T07:45:54,226][INFO ][o.e.p.PluginsService     ] [h-M1oJa] loaded module [transport-netty4]
my-elastic               | [2017-11-01T07:45:54,226][INFO ][o.e.p.PluginsService     ] [h-M1oJa] no plugins loaded
my-elastic               | [2017-11-01T07:45:57,851][INFO ][o.e.d.DiscoveryModule    ] [h-M1oJa] using discovery type [zen]
my-elastic               | [2017-11-01T07:45:59,062][INFO ][o.e.n.Node               ] initialized
my-elastic               | [2017-11-01T07:45:59,062][INFO ][o.e.n.Node               ] [h-M1oJa] starting ...
my-elastic               | [2017-11-01T07:45:59,376][INFO ][o.e.t.TransportService   ] [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 ][o.e.c.s.ClusterService   ] [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 ][o.e.h.n.Netty4HttpServerTransport] [h-M1oJa] publish_address {172.18.0.8:9200}, bound_addresses {[::]:9200}
my-elastic               | [2017-11-01T07:46:02,591][INFO ][o.e.n.Node               ] [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。

【问题讨论】:

  • publish_address {127.0.0.1:9300} -- 可能是传输客户端尝试向自己发送请求?
  • 如何配置publish_address
  • 尝试将network.host设置为容器的IP地址,我看到是192.168.99.100
  • 什么是network.host?我在哪里可以配置它?你能给我这方面的信息吗?
  • docker run 中使用-e "network.host=0.0.0.0" 仍然不起作用。日志现在是[o.e.t.TransportService ] [Y5H-_ML] publish_address {172.17.0.2:9300}, bound_addresses {[::]:9300}

标签: docker elasticsearch spring-boot


【解决方案1】:

在 elasticsearch.yml 上配置 network.host: 0.0.0.0

常见错误:

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

参考资料:

network.host

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

network.bind_host

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

network.publish_host

发布主机是节点向集群中其他节点通告的单一接口,以便这些节点可以连接到它。目前一个 Elasticsearch 节点可能绑定多个地址,但只发布一个。如果未指定,则默认为 network.host 中的“最佳”地址,按 IPv4/IPv6 堆栈首选项排序,然后按可达性排序。如果您设置的 network.host 会导致多个绑定地址但依赖于特定地址进行节点到节点通信,则应显式设置 network.publish_host。

Network Settings

network.host

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

默认为 本地

HTTP-Settings

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。

【讨论】:

    猜你喜欢
    • 2017-06-27
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    相关资源
    最近更新 更多