2017-02-13 238 views
1

我們有一個非常標準elasticsearch設置與3的主節點,6個數據節點和3個的客戶端節點。這裏是我們的連接代碼,用於從我們的Java應用程序連接到Elasticsearch客戶端。Elasticsearch客戶端不獲取結果

Settings settings = Settings.settingsBuilder() 
      .put("cluster.name", configuration.getString("clusterName")) 
      .put("client.transport.sniff", false) 
      .put("client.transport.ping_timeout", "5s") 
      .build(); 

    TransportClient client = TransportClient.builder().settings(settings).build(); 

    for (String hostname : (Collection<String>)configuration.get("hostnames")){ 
     try { 
      client = client.addTransportAddresses(
        new InetSocketTransportAddress(InetAddress.getByName(hostname), 9300) 
      ); 
      break; 
     } catch (UnknownHostException e) { 
      e.printStackTrace(); 
     } 
    } 

我們目前在主機名列表中有三個不同的主機。但是,只要此主機名列表中的單個客戶端發生故障,Elasticsearch傳輸客戶端就會停止響應。我已經經歷了上Elasticsearch現場運輸的客戶端文件不見了,還試圖尋找他們的Github上的問題,根據每當一個節點出現故障僅elasticsearch應該從節點列表中刪除,並繼續與其他節點的工作,但是對我們來說,事情就分解。任何人有任何想法可能是什麼問題? 我們現在使用elasticsearch 2.4.3。

回答

0

它看起來像你打破循環的單個節點已經被添加之後。嘗試刪除break語句:

for (String hostname : (Collection<String>)configuration.get("hostnames")){ 
     try { 
      client = client.addTransportAddresses(
        new InetSocketTransportAddress(InetAddress.getByName(hostname), 9300) 
      ); 
     } catch (UnknownHostException e) { 
      e.printStackTrace(); 
     } 
    } 
+0

真要命!它非常簡單。可能是我只是被困在一個盒子裏,我不能錯。 – Hardik127

+0

@ Hardik127適合我們最好的人!有時我們錯過了最愚蠢的事情。乾杯! – SureshS