Исключение в GridDB JAVA API - PullRequest
       22

Исключение в GridDB JAVA API

1 голос
/ 14 января 2020

Я установил GridDB в Ubuntu. Я использую 2 компьютера: первый компьютер используется как сервер GridDB, второй - как клиент java, и когда я пытаюсь подключиться к GriDB со второго компьютера, выдается исключение, но когда я запускаю код java на стороне сервера, он работает совершенно нормально. В чем проблема? Я использую учебник .

Вот простой java код:

import java.util.Arrays;
import java.util.Properties;

import com.toshiba.mwcloud.gs.Collection;
import com.toshiba.mwcloud.gs.GSException;
import com.toshiba.mwcloud.gs.GridStore;
import com.toshiba.mwcloud.gs.GridStoreFactory;
import com.toshiba.mwcloud.gs.Query;
import com.toshiba.mwcloud.gs.RowKey;
import com.toshiba.mwcloud.gs.RowSet;


// Operaton on Collection data
public class Sample1 {

    static class Person {
        @RowKey String name;
        boolean status;
        long count;
        byte[] lob;
    }

    public static void main(String[] args) throws GSException {

        // Get a GridStore instance
        Properties props = new Properties();
        props.setProperty("notificationAddress", "239.0.0.1");
        props.setProperty("notificationPort", "31999");
        props.setProperty("clusterName", "defaultCluster");
        props.setProperty("user", "admin");
        props.setProperty("password", "admin");
        GridStore store = GridStoreFactory.getInstance().getGridStore(props);

        // Create a Collection (Delete if schema setting is NULL)
        Collection<String, Person> col = store.putCollection("col01", Person.class);


    }

}

Вот исключение, когда я пытаюсь подключиться со второго компьютера:

com.toshiba.mwcloud.gs.common.GSConnectionException: [145028:JC_BAD_CONNECTION] Failed to connect (address=/127.0.1.1:10001, reason=Connection refused: connect)
    at com.toshiba.mwcloud.gs.subnet.NodeConnection.<init>(NodeConnection.java:142)
    at com.toshiba.mwcloud.gs.subnet.NodeConnectionPool.resolve(NodeConnectionPool.java:163)
    at com.toshiba.mwcloud.gs.subnet.NodeResolver.updateConnectionAndClusterInfo(NodeResolver.java:644)
    at com.toshiba.mwcloud.gs.subnet.NodeResolver.prepareConnectionAndClusterInfo(NodeResolver.java:529)
    at com.toshiba.mwcloud.gs.subnet.NodeResolver.getPartitionCount(NodeResolver.java:205)
    at com.toshiba.mwcloud.gs.subnet.GridStoreChannel$5.execute(GridStoreChannel.java:2106)
    at com.toshiba.mwcloud.gs.subnet.GridStoreChannel.executeStatement(GridStoreChannel.java:1675)
    at com.toshiba.mwcloud.gs.subnet.GridStoreChannel.executeResolver(GridStoreChannel.java:1912)
    at com.toshiba.mwcloud.gs.subnet.GridStoreChannel.resolvePartitionId(GridStoreChannel.java:2103)
    at com.toshiba.mwcloud.gs.subnet.SubnetGridStore.putContainer(SubnetGridStore.java:968)
    at com.toshiba.mwcloud.gs.subnet.SubnetGridStore.putCollection(SubnetGridStore.java:1024)
    at com.toshiba.mwcloud.gs.subnet.SubnetGridStore.putCollection(SubnetGridStore.java:787)
    at com.toshiba.mwcloud.gs.subnet.SubnetGridStore.putCollection(SubnetGridStore.java:98)
    at pac.Main.main(Main.java:39)
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at com.toshiba.mwcloud.gs.subnet.NodeConnection.<init>(NodeConnection.java:129)
    ... 13 more

Ответы [ 2 ]

1 голос
/ 16 января 2020

239.0.0.1 - адрес многоадресной рассылки. И часто для выполнения многоадресной рассылки необходимо выполнить некоторые дополнительные действия с ОС, настроить маршрутизатор.

Поэтому имеет смысл проверить, включена ли многоадресная рассылка: https://serverfault.com/questions/294207/how-can-i-test-multicast-udp-connectivity-between-two-servers

А также вы можете проверить, что IP / порт, с которым зарегистрирован узел GridDB в кластере, доступно. IP-адрес можно получить с помощью следующей команды:

$ gs_stat -u admin/admin
1 голос
/ 15 января 2020

Причина: java. net .ConnectException: соединение отклонено: connect

Проблема заключается в том, что сервер не принимает соединения от второго компьютера. Это может быть связано с рядом вещей. Наиболее вероятными являются:

  • Ваш сервер не прослушивает запросы на свой внешний IP-адрес. (Например, БД может прослушивать только 127.0.0.1.) На сервере проверьте, какие службы прослушивают внешний IP-адрес сервера; например, https://www.tecmint.com/find-listening-ports-linux/.

  • Ваш клиент может быть настроен для соединения с неправильным сервером или использования неправильного порта.

  • Межсетевые экраны. (Хотя нормальным поведением брандмауэра будет отбрасывание пакетов подключения, что приведет к другому исключению.)

Существуют и другие возможности, но приведенного выше должно быть достаточно для начала работы.


Если вышеупомянутое не выявило проблему, вам нужно прибегнуть к таким вещам, как:

  • Проверьте, что происходит при подключении к этой базе данных сервер / порт с помощью инструмента диагностики TCP c. Подключается ли он на уровне TCP?

  • Используйте анализатор сетевых пакетов, чтобы увидеть, что происходит с пакетами TCP, когда клиент пытается подключиться к базе данных.

  • Проверьте таблицы маршрутов и таблицы IP на наличие странных правил маршрутизации. Если вы используете виртуальную машину, проверьте и на уровне гипервизора.

...