Исключение в GridDB JAVA API
Я установил 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 ответа
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
Вызвано: java.net.ConnectException: соединение отклонено: соединение
Проблема в том, что сервер не принимает соединения от второй машины. Это могло быть связано с несколькими причинами. Наиболее вероятны:
Ваш сервер не прослушивает запросы на свой внешний IP-адрес. (Например, БД может прослушивать только 127.0.0.1.) На сервере проверьте, какие службы прослушивают внешний IP-адрес сервера; например https://www.tecmint.com/find-listening-ports-linux/.
Ваш клиент может быть настроен на разговор с неправильным сервером или на использование неправильного порта.
Межсетевые экраны. (Хотя обычным поведением брандмауэра будет отбрасывание пакетов подключения, что приведет к другому исключению.)
Есть и другие возможности, но для начала вам должно быть достаточно всего вышеперечисленного.
Если вышеперечисленное не выявило проблему, вам нужно будет прибегнуть к таким вещам, как:
Проверьте, что происходит, когда вы подключаетесь к этому серверу / порту базы данных с помощью диагностического инструмента TCP. Он подключается на уровне TCP?
Используйте сниффер сетевых пакетов, чтобы увидеть, что происходит с TCP-пакетами, когда клиент пытается подключиться к базе данных.
Проверьте свои таблицы маршрутизации и таблицы IP на предмет странных правил маршрутизации. Если вы используете виртуальную машину, проверьте также на уровне гипервизора.