![](/img/trans.png)
[英]NoNodeAvailableException[None of the configured nodes are available] in Elasticsearch 5.1.2
[英]NoNodeAvailableException : None of the configured nodes are available
我正在嘗試從我的 Java Web 服務中的 Elastic Search 進行搜索,這是我現在的使用方式:
Client client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.10.150"), 9200));
SearchResponse searchResponse = client.prepareSearch().execute().actionGet();
第一行可以正常工作,但當它轉到第二行時,將發生下面的異常:
NoNodeAvailableException[沒有配置的節點可用:[{#transport#-1}{TskPSVeBRR6CvCzP9EVhkQ}{192.168.10.150}{192.168.10.150:9200}]]
不管我用9200還是9300設置端口,結果都是一樣的。
另外,我嘗試使用NEST從我的.Net程序中進行搜索,並且它運行得很好。 這是我嘗試的方法:
var node = new Uri("http://192.168.10.150:9200");
var settings = new ConnectionSettings(node).DefaultIndex("iod-2017.03.08.*");
_EsClient = new ElasticClient(settings);
var index = String.Format("iod-{0}.{1:00}.{2:00}.*", item.TriggerTime.Year, item.TriggerTime.Month, item.TriggerTime.Day);
var uniqueId = item.UniqueId.ToString();
var result = _EsClient.Search<logs>(s => s.Index(index).Query(q => q.Match(t => t.Field(l => l.id).Query(uniqueId))));
我的 Java 程序是否有任何錯誤(防火牆、庫版本、調用 API 的方法等)? 我當前的Java版本是1.8.0.121 , Elastic Search和Transport Client的版本都是5.2 。 謝謝!
正如評論中所討論的,
如果您使用的集群名稱不是elasticsearch
,那么您需要在設置中更新相同的名稱。
Settings settings = Settings.builder()
.put("cluster.name", "myClusterName").build();
我遇到了同樣的問題,我的集群名稱和一切都是正確的,但我的彈性集群使用的是 X-Pack Security。 而也正是因為如此。
這是解決方案 - https://www.elastic.co/guide/en/x-pack/current/java-clients.html
從文檔來看,
// on startup
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host1"), 9300))
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host2"), 9300));
如果您是從解壓文件中安裝elasticsearch(例如:elasticsearch-5.4.0.tar.gz),請嘗試通過yum 或其他RPM 工具安裝。 https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.html它幫助我解決了這個問題。
在執行程序之前,請確保您運行了ElasticSearch -> config folder下的elasticSearch.bat批處理文件。 還要確保在運行批處理文件的控制台中看到“已啟動”記錄。
您可以通過點擊 URL localhost:9200來檢查彈性搜索是否成功啟動。 你應該看到一個看起來像這樣的頁面:
{
"name" : ...,
"cluster_name" : "elasticsearch",
"cluster_uuid" : ...,
"version" : {
"number" : "5.5.2",
...
"build_snapshot" : false,
"lucene_version" : "6.6.0"
},
"tagline" : "You Know, for Search"
}
添加集群名稱作為連接 URI 上的參數:
http://<elasticsearch_host>:9200
cluster_name
值並將其作為參數添加到連接 URI: elasticsearch://<elasticsearch_host>:9300?cluster.name=<cluster_name_value>
此異常指向 elasticSearch 傳輸客戶端無法與 elasticsearch 服務器建立連接。
根本原因可能是服務器的端口名稱或 IP/主機名或集群名稱或身份驗證不正確。
打開 elasticSearch.yaml 文件並正確驗證所有詳細信息。 使用以下配置參數忽略 clusterName 驗證。
client.transport.ignore_cluster_name = true
創建傳輸客戶端的完整代碼片段是:
Settings settingsBuilder = Settings.builder()
.put("cluster.name", DBPropertyUtil.getPropertyByName("es.cluster")).put("client.transport.sniff", true).put("client.transport.ignore_cluster_name", true).build();
//.put("client.transport.sniff", true).put("path.home", ".").build();
Client client = new PreBuiltTransportClient(settingsBuilder)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), port));
根據您的服務器指定主機和端口。 這段代碼對我來說很好用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.