我已经在Ubuntu上安装了GridDB。我使用两台计算机:第一台计算机用作GridDB服务器,第二台计算机用作java客户端,当我尝试从第二台计算机连接到GriDB时,它将引发Exception,但是当我在服务器端运行Java代码时,它可以正常工作。有什么问题?我用这个tutorial。
这里是简单的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
原因:java.net.ConnectException:连接被拒绝:connect
问题是服务器不接受来自第二台计算机的连接。这可能是由于许多原因造成的。最可能是:
您的服务器未在其外部IP地址上侦听请求。 (例如,DB可能仅在127.0.0.1上进行侦听。)在服务器上,检查哪些服务在服务器的外部IP地址上进行侦听;例如https://www.tecmint.com/find-listening-ports-linux/。
您的客户端可能配置为与错误的服务器对话,或使用错误的端口。
防火墙。 (尽管正常的防火墙行为是丢弃连接数据包,从而导致另一个异常。)
还有其他可能性,但是以上内容足以让您入门。
如果以上方法仍未发现问题,则需要采取以下措施:
检查以查看使用TCP诊断工具连接到该数据库服务器/端口时会发生什么。它是否在TCP级别连接?
使用网络数据包嗅探器查看客户端尝试连接到数据库时TCP数据包发生了什么。
检查您的路由表和IP表以了解奇怪的路由规则。如果您使用的是虚拟机,请在虚拟机监控程序级别进行检查。
239.0.0.1是多播地址。通常,它需要对OS和路由器设置执行一些其他步骤才能启用多播。
因此,检查多播是否已启用是有意义的:https://serverfault.com/questions/294207/how-can-i-test-multicast-udp-connectivity-between-two-servers