gpt4 book ai didi

java - Elasticsearch 5.1.2 中的 NoNodeAvailableException[配置的节点均不可用]

转载 作者:行者123 更新时间:2023-12-01 08:55:55 25 4
gpt4 key购买 nike

在 Google Compute Engine 上,我创建了 3 个虚拟机并在其上安装了 Elasticsearch 5.1.2。我安装了用于单播发现的GCE Discovery Plugin

从我的本地网络浏览器(Win7),我可以成功访问这些Elasticsearch节点。在 Google Cloud Platform 上,我添加了接受 tcp:9300、tcp:9200 的防火墙规则。

现在我想使用 Java 传输客户端 从本地 Java 应用程序与远程 Elasticsearch 节点进行通信。我确信 cluster.name 是正确的。

代码和错误如下:

public class NativeClient {

@SuppressWarnings({ "resource", "unchecked" })
public static Client createTransportClient() throws UnknownHostException {

Settings settings = Settings.builder().put("cluster.name", "elasticsearch").put("client.transport.sniff", true)
.build();

TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("104.100.100.96"), 9300));

return client;
}

private final Node node = null;
private final Client client = null;
}


public class IndicesOperations {
private final Client client;

public IndicesOperations(Client client) {
this.client = client;
}

public boolean checkIndexExists(String name){
IndicesExistsResponse response=client.admin().indices().prepareExists(name).execute().actionGet();
return response.isExists();
}

public static void main( String[] args ) throws InterruptedException, UnknownHostException {
Client client =NativeClient.createTransportClient();
IndicesOperations io=new IndicesOperations(client);
String myIndex = "test";
if(io.checkIndexExists(myIndex))
io.deleteIndex(myIndex);
io.createIndex(myIndex);
Thread.sleep(1000);
io.closeIndex(myIndex);
io.openIndex(myIndex);
io.deleteIndex(myIndex);
}
}


Exception in thread "main" NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{lu8DzekbSWOrNEgFgXxpgQ}{104.100.100.96}{104.100.100.96:9300}]]
at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:328)
at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:226)
at org.elasticsearch.client.transport.TransportProxyClient.execute(TransportProxyClient.java:59)
at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:345)
at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:403)
at org.elasticsearch.client.support.AbstractClient$IndicesAdmin.execute(AbstractClient.java:1226)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:80)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:54)
at com.packtpub.IndicesOperations.checkIndexExists(IndicesOperations.java:16)
at com.packtpub.IndicesOperations.main(IndicesOperations.java:49)

elasticsearch.yml

network.host: _gce_

cloud:
gce:
project_id: es-cloud
zone: asia-east1-b
discovery:
type: gce

编辑:

在谷歌计算引擎上部署我的java应用程序后,它可以访问在谷歌计算引擎上运行的elasticsearch实例。在此应用程序中,我刚刚修改了 InetAddress.getByName("10.140.0.2")。在本地计算机上部署时,我使用了该虚拟机的外部 IP

我还需要修改什么才能在本地计算机上运行它?

最佳答案

我将虚拟机的外部IP附加到elasticsearch.yml中的network.publish_host属性,然后我就可以访问远程虚拟机上运行的elasticsearch:

network.host: _gce_
network.publish_host: 104.100.100.96

cloud:
gce:
project_id: es-cloud
zone: asia-east1-b
discovery:
type: gce

我不太明白,但幸运的是它有效。

关于java - Elasticsearch 5.1.2 中的 NoNodeAvailableException[配置的节点均不可用],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42039301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com