Клиент Java Elasticsearch: выдает ConnectException при подключении с локального компьютера к ES в Google Cloud VM

У меня есть кластер elasticsearch, работающий в google-compute-engine (VM), и я пытаюсь подключиться из своей программы Java.

ES Instante в облаке Google имеет внешний и внутренний IP-адреса. Я настроил внешний IP-адрес для подключения, и все настройки брандмауэра включены для подключения.

Тем не менее, похоже, что внутренний 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();
        }
}

person Remis Haroon - رامز    schedule 02.03.2016    source источник
comment
Сомневаюсь, что это как-то связано с elasticsearch, похоже на сетевую ошибку. Вы пробовали ssh, telnet или nc на этом конкретном хосте: порт? Например, nc 10.240.0.237 9300 -v сообщит вам, доступен ли хост на этом порту.   -  person devlearn    schedule 02.03.2016
comment
@devlearn, это не проблема с сетью (точно), так как я не знал внутренний IP-адрес ES-сервера [который равен 10.240.0.237]. отображается в журнале ошибок   -  person Remis Haroon - رامز    schedule 03.03.2016
comment
Вы пытались подключиться к данному хосту и порту другими способами, кроме эластичного поиска?   -  person devlearn    schedule 03.03.2016
comment
@devlearn, да, я могу подключиться через браузер   -  person Remis Haroon - رامز    schedule 03.03.2016
comment
Вы имеете в виду, что вы попали на порт 9300 через http с помощью браузера? И он показывает, что это не HTTP-порт? Если это так, я бы посоветовал вам проверить, есть ли в вашем браузере какие-либо настройки прокси, и если это не так, и порт 9300 отвечает, попробуйте использовать этот конкретный порт в построителе узлов вместо диапазона.   -  person devlearn    schedule 03.03.2016
comment
@devlearn, нет, я попробовал порт 9200, и это сработало, что доказывает, что нет проблем с доступом n/w   -  person Remis Haroon - رامز    schedule 03.03.2016
comment
Ваш код явно требует подключения к диапазону 9300-9400, поэтому использование браузера на порту 9200 ничего не доказывает на стороне сети. Укажите в браузере точный порт (например, 9300) и попробуйте. Тайм-аут соединения обычно происходит, когда сокет не может быть открыт на удаленной стороне. Так что есть вероятность, что у вас есть брандмауэр где-то между конечными точками.   -  person devlearn    schedule 03.03.2016


Ответы (1)


Похоже, вы подключаетесь к порту 9300, но я думаю, вам нужен порт 9200.

person deepseadiving    schedule 14.10.2016