2016-03-02 25 views
1

我有一個運行在google-compute-engine(VMs)中的elasticsearch集羣,並且我嘗試從我的Java程序進行連接。Java Elasticsearch客戶端:在Google Cloud VM中從本地連接到ES時拋出ConnectException

谷歌雲中的ES instante具有external-ip內部IP。 我已配置external-ip進行連接,並且所有防火牆設置都可以連接。

仍然看起來,internal-ip在將myd數據寫入ES時正在客戶端的某處使用。

10.240.0.237是內部IP

Caused by: java.net.ConnectException: Connection timed out: no further information: /10.240.0.237:9300 
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) 
    at sun.nio.ch.SocketChannelImpl.finishConnect(Unknown Source) 
    at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.connect(NioClientBoss.java:152) 
    at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.processSelectedKeys(NioClientBoss.java:105) 
    at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.process(NioClientBoss.java:79) 
    at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:337) 
    at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.run(NioClientBoss.java:42) 
    at org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) 
    at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) 

代碼

public class ESClient { 
     final static Node[] esNodes = new Node[1]; 
     static String indexName = "sa-sonarshock-log"; 
     public static Client getClient(){ 
      if(esNodes[0] == null){ 
       esNodes[0] = _setupNode(); 
      } 
      return esNodes[0].client(); 
     } 
     public static Node _setupNode(){ 
      Settings settings = ImmutableSettings.settingsBuilder() 
        .put("cluster.name", "es-tifc-retro-testing") 
        .put("http.enabled", false) 
        .put("transport.tcp.port", "9300-9400") 
        .put("discovery.zen.ping.multicast.enabled", false) 
        .put("discovery.zen.ping.unicast.hosts", "estifcretrotest-es-tifc-retro-testing-1-vm") 
        .build();  

      return nodeBuilder().settings(settings).client(true).node(); 
     } 
     public static Map<String, Object> putJsonDocument(String title, String content, Date postDate, 
       String[] tags, String author){ 
      Map<String, Object> jsonDocument = new HashMap<String, Object>(); 
      jsonDocument.put("title", title); 
      jsonDocument.put("conten", content); 
      jsonDocument.put("postDate", postDate); 
      jsonDocument.put("tags", tags); 
      jsonDocument.put("author", author); 
      return jsonDocument; 
     } 
     public static void main(String[] args) { 
      Client esClient = getClient(); 
      CreateIndexRequestBuilder createIndexRequestBuilder = esClient.admin().indices().prepareCreate(indexName); 
      createIndexRequestBuilder.execute().actionGet(); 
      esClient.prepareIndex(indexName, "default", "1") 
      .setSource(putJsonDocument("ElasticSearch: Java API", 
             "ElasticSearch provides the Java API, all operations " 
             + "can be executed asynchronously using a client object.", 
             new Date(), 
             new String[]{"elasticsearch"}, 
             "Remis Haroon")).execute().actionGet(); 
      esNodes[0].close(); 
     } 
} 
+0

我懷疑它與elasticsearch有什麼關係,看起來像一個網絡錯誤。你在這個特定的主機:端口上嘗試過ssh,telnet或nc嗎?例如,nc 10.240.0.237 9300 -v會告訴您是否可以在此端口上連接主機。 – devlearn

+0

@devlearn,這不是網絡問題(當然),因爲我不知道ES-server的內部IP [這是10.240.0.237]。在錯誤日誌中顯示 –

+0

您是否嘗試連接到給予主機和端口通過其他方式然後彈性搜索? – devlearn

回答

0

它看起來像您所連接的端口9300,但我想你想的端口9200

相關問題