java - 没有可用的节点elasticsearch

标签 java elasticsearch search

我在我的项目中使用elasticsearch。但是当在服务器上部署项目时,它给出了异常,我阅读了其他相同的问题,但没有找到解决方案: 我把端口改成了9300,还是没有解决。

NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{EEv7PPi1SYqxodHCtCrfEw}{192.168.0.253}{192.168.0.253:9200}]]
        at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:344)
        at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:242)
        at org.elasticsearch.client.transport.TransportProxyClient.execute(TransportProxyClient.java:59)

这是我的代码中的elasticsearch配置:

 public static void postConstruct() {
            try {
                Settings settings = Settings.builder()
                        .put("cluster.name","my-application").build();
                client = new PreBuiltTransportClient(settings)
                        .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(Bundle.application.getString("ELASTIC_ADDRESS")), Integer.parseInt(Bundle.application.getString("9200"))));
                try {
                    client.admin().indices().prepareCreate("tempdata").get();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
        }

我的项目中的elasticsearch bot版本和服务器上的版本是相同的。这就是我 curl 'http://x.x.x.x:9200/?pretty时得到的结果'

{
  "name" : "node-1",
  "cluster_name" : "my-application",
  "cluster_uuid" : "_na_",
  "version" : {
    "number" : "5.2.2",
    "build_hash" : "f9d9b74",
    "build_date" : "2017-02-24T17:26:45.835Z",
    "build_snapshot" : false,
    "lucene_version" : "6.4.1"
  },
  "tagline" : "You Know, for Search"
}

当我将端口更改为 9300 时,几秒钟后我看到的异常是这样的:

MasterNotDiscoveredException[null]
        at org.elasticsearch.action.support.master.TransportMasterNodeAction$AsyncSingleAction$4.onTimeout(TransportMasterNodeAction.java:211)
        at org.elasticsearch.cluster.ClusterStateObserver$ContextPreservingListener.onTimeout(ClusterStateObserver.java:307)
        at org.elasticsearch.cluster.ClusterStateObserver$ObserverClusterStateListener.onTimeout(ClusterStateObserver.java:237)
        at org.elasticsearch.cluster.service.ClusterService$NotifyTimeout.run(ClusterService.java:1157)

这是elasticsearch的日志,我不知道host1和host2是什么:

   [2018-07-16T15:40:59,476][DEBUG][o.e.a.a.i.g.TransportGetIndexAction] [gCJIhnQ] no known master node, scheduling a retry
[2018-07-16T15:41:29,478][DEBUG][o.e.a.a.i.g.TransportGetIndexAction] [gCJIhnQ] timed out while retrying [indices:admin/get] after failure (timeout [30s])
[2018-07-16T15:41:29,481][WARN ][r.suppressed             ] path: /bad-request, params: {index=bad-request}
org.elasticsearch.discovery.MasterNotDiscoveredException: null
        at org.elasticsearch.action.support.master.TransportMasterNodeAction$AsyncSingleAction$4.onTimeout(TransportMasterNodeAction.java:211) [elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.cluster.ClusterStateObserver$ContextPreservingListener.onTimeout(ClusterStateObserver.java:307) [elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.cluster.ClusterStateObserver$ObserverClusterStateListener.onTimeout(ClusterStateObserver.java:237) [elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.cluster.service.ClusterService$NotifyTimeout.run(ClusterService.java:1157) [elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:527) [elasticsearch-5.2.2.jar:5.2.2]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_91]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_91]

最佳答案

由于评论数量增加,这里有一些可能有用的提示。我假设您正在使用一个独立的elasticsearch实例,该实例使用ES_HOME/bin/elasticsearch作为服务器计算机上的主节点开始。

  1. 确保服务器上的elasticsearch配置为主节点。引用https://www.elastic.co/guide/en/elasticsearch/reference/6.3/modules-node.html有关elasticsearch中节点的更多详细信息。
  2. 确保服务器上的elasticsearch绑定(bind)到非环回地址。有关详细信息,请参阅https://www.elastic.co/guide/en/elasticsearch/reference/current/network.host.html
  3. 检查传输客户端版本是否与服务器版本兼容。
  4. 按照他们所说增加 mmap 计数 here 。在 Linux 中,运行以下命令:sysctl -w vm.max_map_count=262144
  5. 检查服务器上的传输端口号,可以从外部访问。默认为 9300-9400
  6. 检查服务器上的 elasticsearch 服务日志,确保其配置符合您的要求!

关于java - 没有可用的节点elasticsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51348420/

相关文章:

java - 跟踪 IBM WebSphere WLTC0032W : One or more local transaction resources were rolled back

python - 如何将某些行文本、可变位置移动到特定列

java - 需要使用 $select 和 $filter 实现 Elasticsearch 查询

elasticsearch - 在Elasticsearch 2.x中将query_string与bool过滤器结合

arrays - 查找在线性时间内出现超过 n/4 次的所有元素

Swift Firebase UISearchController 索引超出范围

java.util.Date 和 UTC 问题

java - 检查android手机存储中是否存在已知文档Uri

java - 如何使 servlet 仅处理来自特定网站的请求?

elasticsearch - 如何通过对象值字段过滤Elasticsearch