当前位置: 首页 > 面试题库 >

客户端和主服务器之间的Elasticsearch MasterNotDiscoveredException

谭昊乾
2023-03-14
问题内容

简而言之,我有一个独立的ES主实例和一个在我的Java应用程序中创建的客户端节点。如果在客户端节点之前启动了独立ES实例,则客户端节点会正确发现独立ES实例。

我面临的问题是-如果由于某种原因,客户端节点在独立ES实例之前启动,我会看到“
MasterNotDiscoveredException”,这也是可预期的。但是,即使启动独立的ES实例后,我仍然会看到相同的异常。我应该更改一些配置以解决此问题吗?

我将ES 1.7.1与单播发现一起使用。

编辑

群集信息: 独立的ES实例和客户端节点共同组成一个群集。

客户端节点堆栈跟踪:

11:29:35,634 INFO  http [496648366, id=7BCBFQLCTWOO2, ide=tcp://172.17.78.80:61616] [Squidboy] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/172.17.78.80:9200]}
11:29:35,635 INFO  node [496648366, id=7BCBFQLCTWOO2, ide=tcp://172.17.78.80:61616] [Squidboy] started
11:30:10,279 ERROR ApplicationLifeCycle [299961584] System startup not complete after 120 seconds ...
11:30:14,706 WARN  ElasticSearchStatus [278792216] An Exception occurred during cluster health status update - java.util.concurrent.ExecutionException: org.elasticsearch.discovery.MasterNotDiscoveredException: waited for [30s]
        at org.elasticsearch.common.util.concurrent.BaseFuture$Sync.getValue(BaseFuture.java:292)
        at org.elasticsearch.common.util.concurrent.BaseFuture$Sync.get(BaseFuture.java:279)
        at org.elasticsearch.common.util.concurrent.BaseFuture.get(BaseFuture.java:117)
        at com.harry.elastic.node.ElasticSearchStatus.updateClusterHealth(ElasticSearchStatus.java:90)
        at com.harry.elastic.node.ElasticSearchStatus.access$000(ElasticSearchStatus.java:37)
        at com.harry.elastic.node.ElasticSearchStatus$1.run(ElasticSearchStatus.java:62)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.elasticsearch.discovery.MasterNotDiscoveredException: waited for [30s]
        at org.elasticsearch.action.support.master.TransportMasterNodeOperationAction$4.onTimeout(TransportMasterNodeOperationAction.java:164)
        at org.elasticsearch.cluster.ClusterStateObserver$ObserverClusterStateListener.onTimeout(ClusterStateObserver.java:231)
        at org.elasticsearch.cluster.service.InternalClusterService$NotifyTimeout.run(InternalClusterService.java:560)
        ... 3 more

客户端创建代码

private Node createEmbeddedClientNode() {
        ImmutableSettings.Builder settingsBuilder = ImmutableSettings.settingsBuilder()
                .put("discovery.zen.ping.multicast.enabled", false)
                .put("discovery.zen.ping.unicast.hosts", "localhost[9300-9400]");
        return nodeBuilder().settings(settingsBuilder).clusterName("harryService")
                .client(true).data(false).node();
    }

主发现配置

"discovery": {
    "zen": {
      "ping": {
        "multicast": {
          "enabled": false
        }
      }
    }

问题答案:

我通过在主节点中显式添加单播配置解决了该问题。

"discovery": {
    "zen": {
      "ping": {
        "multicast": {
          "enabled": false
        },
        "unicast": {
            "hosts": "localhost[9300-9400]"
        }
      }
    }
}


 类似资料:
  • 问题内容: 我用Node.js运行一个简单的http服务器: 我的index.html文件: 现在,我想在我的index.html文件中打印服务器端变量:temp。但是我不知道该怎么做。 也许有人可以帮助我从服务器到客户端交换变量。 问题答案: 正如您可以在@WebServer的答案中看到的那样,节点中有多种模板引擎。 我想给你一个使用其中一个的例子-EJS: 首先安装它: server.js:

  • 我有一个java服务器应用程序,可以通过与多个客户端通信。在这个通道上,客户端发送请求,服务器发送应答。现在我想添加一个功能,服务器可以将文件发送到客户端。我不想通过用于通信的套接字发送,所以在一个客户端和一个服务器之间使用更多套接字是个好主意吗?如果是,如何处理?我用过这样的东西吗? 还是有更好的办法?

  • 我必须用JS制作一个应用程序,用AES编码一条消息,并通过AJAX将其传递给服务器。然后,服务器会启动并使用Java对消息进行解码。 我的问题是:如何在JS中加密消息,并使用AES在Java中解密它?知道java和js之间的通信已经通过Web服务建立 客户端,我使用Crypto JS库(http://code.google.com/p/crypto-js/)。服务器端我使用Java提供的Ciphe

  • 编辑:最后,问题似乎来自io.emit()中缺少第二个参数。现在它起作用了,非常感谢:)

  • 问题内容: 我应该为“ .thrift”文件定义哪种服务,以便以后将其用于我的程序? 此文件传输应该在客户端和服务器之间,并且应该是“部分”。 StreamFileService.thrift: StreamFileClient.java: } StreamFileServer.java: } StreamFileServiceImpl: } 问题答案: 您的代码对我来说似乎还不错(未经测试),没

  • 我正在使用T.Rob的建议调试Websphere MQ服务器和客户机之间的SSL错误,并需要帮助理解SSL握手(SSL连接到MQ使用。NET MQ客户机SSLv3?)。 我的WMQ7.5客户机应用程序是C代码,使用密钥库(.kdb)。利用WebSphere管理员提供的CHLTAB。WMQ服务器运行Java,通道是用相互身份验证定义的。 本文指出,在SSL/TLS握手中,服务器总是发送其公共证书以响