【问题标题】:Elasticsearch - NoNodeAvailableExceptionElasticsearch - NoNodeAvailableException
【发布时间】:2015-11-13 11:35:54
【问题描述】:

尝试使用 ES 2 的 Java API 连接到 Elasticsearch 2 时出现以下错误。代码如下:

Settings settings = Settings.settingsBuilder().put("cluster.name", Receptor.clusterName).build();
TransportClient transportClient = TransportClient.builder().settings(settings).build();
Client c = null;
try {
     c = transportClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(Receptor.es_ip), 9300));
} catch (UnknownHostException e) {
     System.err.println(Util.getTimestampStr() + "UnknownHostException error.");
     e.printStackTrace();
}

CreateIndexRequestBuilder createIndexRequestBuilder = c.admin().indices().prepareCreate(indexName);
createIndexRequestBuilder.addMapping(documentName, json);
createIndexRequestBuilder.execute().actionGet();

我能够在 transportClient.connectedNodes() 上获取我的 ES 节点,但是当我尝试添加新映射时,我得到 NoNodeAvailableException 异常。此代码适用于以前版本的 Elasticsearch。知道出了什么问题吗?

NoNodeAvailableException[None of the configured nodes are available:
[]]     at
org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:280)
    at
org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:197)
    at
org.elasticsearch.client.transport.support.TransportProxyClient.execute(TransportProxyClient.java:55)
    at
org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:272)
    at
org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:347)
    at
org.elasticsearch.client.support.AbstractClient$IndicesAdmin.execute(AbstractClient.java:1177)
    at
org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:85)
    at
org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:59)

【问题讨论】:

  • 如果您在尝试访问的集群中配置节点,例如in this post,您是否看到任何改进?另外,我很想知道您使用什么 IP 连接到节点,相对于 ES 节点报告在启动时绑定的 IP(类似于启动时日志中的 [INFO ][transport ] [main_node_2_0] publ ish_address {127.0.0.1:9300}, bound_addresses {127.0.0.1:9300}, {[::1]:9300})。跨度>
  • 你玩过elasticsearch.yml文件中的配置吗? minimum_master_nodes 有什么东西吗?
  • 您正在尝试将在主机[Receptor.es_ip] 中运行的外部elasticsearch 客户端与端口9300 通信,请确保elasticsearch 是否正在运行
  • 我在与 Elasticseearch 节点相同的主机上运行 Java 程序。我正在运行与以前版本的 ES (1.7.2) 相同的 Java 程序,没有问题。我有一个运行良好的 python 脚本,但我的 Java 程序没有。 ES 当然在运行。
  • @AndreiStefan 解决了我的问题,解决方案在他链接的帖子中。

标签: java elasticsearch


【解决方案1】:

@AndreiStefan 感谢the post he linked,为我的问题提供了解决方案。解决方案很简单:

network.bind_host: 0

谢谢你们。

【讨论】:

  • 执行我应该在哪里添加这个?在 elasticsearch.yml 中?
  • 是的,确实如此。正如documentationother posts 所示。请记住,这是针对 Elasticsearch 2.x 的,不确定它是否适用于更高版本。
【解决方案2】:

问题可能出在您使用的设置中。

而不是通过这三个步骤创建客户端:

TransportClient transportClient = TransportClient.builder().settings(settings).build();
Client c = null;
try {
 c = transportClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(Receptor.es_ip), 9300));
} catch (UnknownHostException e) {
 System.err.println(Util.getTimestampStr() + "UnknownHostException error.");
 e.printStackTrace();
}

尝试像这样创建它:

Client client = new TransportClient()
            .addTransportAddress(new InetSocketTransportAddress(
                    InetAddress.getByName(Receptor.es_ip),
                    9300));

如果您想要更多数据,请查看类似问题的旧答案:Elastic search problems

【讨论】:

  • 我的解决方案有什么问题,我只是提供集群名称。我一直在将该代码与以前版本的 Elasticsearch 及其 API 一起使用。
【解决方案3】:

如果您在 elasticsearch.yml 中使用 network.host: _site_sniffed TransportClient 连接,则此问题可能是由于网络问题,即托管 es 节点的机器中有多个站点本地地址可用。

如果您禁用嗅探配置,并且 NoNodeAvailableException 消失,那么您应该仔细检查网络配置。

获取节点统计信息

GET /_nodes

并检查结果以找到transport配置,即

"transport": {
    "bound_address": [
      "192.168.1.84:9300",
      "172.29.0.1:9300"
    ],
    "publish_address": "172.29.0.1:9300",
    "profiles": {}
  },

如果有多个站点本地地址,则嗅探到 TransportClient 将连接到的 network.publish_host 可能是一个意外地址,因为

如果未指定,则默认为 network.host 中的“最佳”地址,按 IPv4/IPv6 堆栈首选项排序,然后按可达性排序。

要解决它,只需指定network.publish_host

network.publish_host: $DESIRED_IP_ADDRESS

在 elasticsearch.yml 中。

【讨论】:

  • 谢谢 - 那是我的问题 - 集群名称不是我想的那样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 1970-01-01
  • 2017-11-01
  • 2018-06-08
  • 2017-06-27
  • 2018-04-13
  • 2018-09-01
相关资源
最近更新 更多