I get the following error when trying to connect to Elasticsearch 2 using the Java API for ES 2. This is the code:
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();
I'm able to get my ES node on the transportClient.connectedNodes() but when I try to add a new mapping I get the NoNodeAvailableException exception. This code worked with previous versions of Elasticsearch. Any idea of what's wrong?
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)
@AndreiStefan gave the solution to my problem thanks to the post he linked. The solution was as straightforward as:
network.bind_host: 0
Thank you guys.
The problem might be in the settings that you are using.
Instead of creating the Client in these three steps:
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();
}
Try creating it like this:
Client client = new TransportClient()
.addTransportAddress(new InetSocketTransportAddress(
InetAddress.getByName(Receptor.es_ip),
9300));
If you want more data check this old answer to a similar question: Elastic search problems
This problem could due to the network problem, if you are using network.host: _site_
in elasticsearch.yml AND sniffed TransportClient
connection, i.e. multiple site-local addresses are available within the machine hosting es node.
If you disable the sniff configuration, and the NoNodeAvailableException disappears, then you should double check the network configuration.
Get the nodes stat
GET /_nodes
and check in the result to find transport
configuration, i.e.
"transport": {
"bound_address": [
"192.168.1.84:9300",
"172.29.0.1:9300"
],
"publish_address": "172.29.0.1:9300",
"profiles": {}
},
If there are multiple site-local addresses, the network.publish_host
that sniffed TransportClient will connect to, might be an unexpected address, because
If not specified, this defaults to the “best” address from network.host, sorted by IPv4/IPv6 stack preference, then by reachability.
To solve it, simple specify the network.publish_host
network.publish_host: $DESIRED_IP_ADDRESS
in elasticsearch.yml.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With