Java客户端找不到主节点:MasterNotDiscoveredException等待[1m]

我正在使用vagrant,并使用debian软件包在其上安装了ES:

elasticsearch-1.1.1.deb

在我的Web应用程序中,我正在使用jar:

org.elasticsearch elasticsearch 1.1.1

我正在创建我的客户,例如:

val node = nodeBuilder.client(true).node
val client: Client = node.client 

当我尝试索引时,出现错误:

val response = client.prepareIndex("articles", "article", article.id.toString).setSource(json).execute.actionGet

我得到的错误是:

[MasterNotDiscoveredException: waited for [1m]]

我可以通过以下步骤来查看我的ES实例运行正常:

http://localhost:9200

我从README文件中运行了一些测试查询,它们运行良好,但是由于某种原因,它现在也不起作用:

http://localhost:9200/twitter/user/kimchy?pretty=true

我收到错误:

{
  "error" : "ClusterBlockException[blocked by: [SERVICE_UNAVAILABLE/1/state not recovered / initialized];[SERVICE_UNAVAILABLE/2/no master];]",
  "status" : 503
}

我的流浪者文件2个端口打开以进行弹性搜索:

  config.vm.network "forwarded_port", guest: 9200, host: 9200 # ES
  config.vm.network "forwarded_port", guest: 9300, host: 9300 # ES

似乎是什么问题?

注意:我的Web应用程序未使用elasticsearch.yml文件,因为它只是根据我的理解连接到默认的localhost:9200.

解决方法:

通常,您必须从外部通过http连接到ES(通常,但是还有其他可用协议),然后再使用REST / JSON.因此,您的Web应用程序应使用scala / java ES客户端(请参见http://www.elasticsearch.org/guide/en/elasticsearch/client/community/current/clients.html),然后通过http连接到在端口9200上运行ES的主机.端口9300仅用于节点间通信(ES是分布式集群系统).但是,还有另一种与ES进行远程通信的方式:启动一个加入集群的节点,然后通过内部客户端查询该节点.但:

在上述问题中,您尝试通过内部Java客户端(内部传输)连接到ES,该内部Java客户端启动节点,然后尝试加入集群.失败是因为可以找到主节点.可能是由于网络问题.尝试在类路径中包含elasticsearch.yml或使用REST,如上所述.还有第三个选项:TransportClient-外观http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/client.html#transport-client

另请参见http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-transport.htmlhttp://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-http.htmlhttp://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-memcached.html

上一篇:linux – Vagrant – 如何挂载virtualbox共享文件夹? (“vboxsf”不可用)


下一篇:php – Netbeans Xdebug Vagrant连接超时