com.datastax.driver.core.TransportException: [/xx.xxx.x.xxx:9042] 无法连接

Posted

技术标签:

【中文标题】com.datastax.driver.core.TransportException: [/xx.xxx.x.xxx:9042] 无法连接【英文标题】:com.datastax.driver.core.TransportException: [/xx.xxx.x.xxx:9042] Cannot connect 【发布时间】:2016-01-14 10:51:54 【问题描述】:

我在 Cassandra 集群中有 2 个节点,IP:端口 aa.aaa.a.aaa:9043(node) 和 xx.xxx.x.xxx:9043。当我尝试使用以下配置进行连接时 **PoolingOptions poolingOptions = new PoolingOptions(); poolingOptions.setCoreConnectionsPerHost(HostDistance.LOCAL, 2) .setMaxConnectionsPerHost(HostDistance.LOCAL, 4) .setCoreConnectionsPerHost(HostDistance.REMOTE, 2) .setMaxConnectionsPerHost(HostDistance.REMOTE, 4) .setMaxRequestsPerConnection(HostDistance.LOCAL, 200) .setMaxRequestsPerConnection(HostDistance.REMOTE, 200);

    cluster = Cluster.builder()
            .addContactPointsWithPorts(socketAddressList)
            .withPoolingOptions(poolingOptions)
            .withRetryPolicy(DefaultRetryPolicy.INSTANCE)
            .withLoadBalancingPolicy(new TokenAwarePolicy(new DCAwareRoundRobinPolicy())).build();
    Session session = cluster.connect(cassandraDB);** 

我收到以下异常 16/01/14 09:52:45 INFO core.NettyUtil: 在类路径中没有找到 Netty 的本机 epoll 传输,默认为 NIO。 16/01/14 09:52:46 WARN core.Cluster: ***您在联系点中列出了 /xx.xxx.x.xxx:9043,但在启动时无法访问它* 16/01/14 09:52:47 INFO policies.DCAwareRoundRobinPolicy:对 DCAwareRoundRobinPolicy 使用数据中心名称“名称”(如果不正确,请使用 DCAwareRoundRobinPolicy 构造函数提供正确的数据中心名称)ent.Futures$CombinedFuture setExceptionAndMaybeLog 严重:输入未来失败。 com.datastax.driver.core.Connection$1.operationComplete(Connection.java:156) 在 com.datastax.driver.core.Connection$1.operationComplete(Connection.java:139) 在 io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:680) 在 io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:603) 在 io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:563) 在 io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:424) 在 io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:268) 在 io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:284) 在 io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:528) 在 io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized (NioEventLoop.java:468) 在 io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382) 在 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354) 在 io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111) 在 java.lang.Thread.run(Thread.java:745) 原因:java.net.ConnectException:连接被拒绝:/xx.xxx.x.xxx:9042 在 sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) 在 sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:744) 在 io.netty.channel.socket.nio.NiosocketChannel.doFinishConnect(NioSocketChannel.java:224) 在 io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:281) ... 6 更多

16/01/14 09:52:47 错误 core.Session: 创建池到 /xx.xxx.x.xxx:9042 时出错 在 com.datastax.driver.core.Connection$1.operationComplete(Connection.java:156) 在 com.datastax.driver.core.Connection$1.operationComplete(Connection.java:139) 在 io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:680) 在 io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:603) 在 io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:563) 在 io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:424) 在 io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:268) 在 io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:284) 在 io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:528) 在 io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized (NioEventLoop.java:468) 在 io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382) 在 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354) 在 io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111) 在 java.lang.Thread.run(Thread.java:745) 原因:java.net.ConnectException:连接被拒绝:/xx.xxx.x.xxx:9042 在 sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) 在 sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:744) 在 io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:224) 在 io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:281)**

我的问题是:

    为什么它试图连接端口 9042,而我在代码和配置文件中没有使用此端口?

cassandra 版本:Cassandra 2.2.1

【问题讨论】:

【参考方案1】:

为什么它试图连接端口 9042,而我在代码和配置文件中没有使用此端口?

9042 是 CQL 二进制协议的默认端口。

您能告诉我们您传递给集群构建器的变量 socketAddressList 的内容吗?

您使用端口 9043 而不是默认的 9042 端口有什么原因吗?

【讨论】:

私有静态列表 socketAddressList = new ArrayList();socketAddressList.add(new InetSocketAddress(cassandraHosts.get("HOST_1"), cassandraPort)); socketAddressList.add(new InetSocketAddress(cassandraHosts.get("HOST_2"), cassandraPort)); HOST_1=xx.xxx.x.xxx, HOST_2=aa.aaa.a.aa, cassandraPort=9043。 没有具体原因。 好吧,这样不行。要将端口设置为 9043,您需要调用方法 .withPort(9043)。集群构建器会忽略联系点列表中提供的地址,它使用默认端口,即 9042。请参阅:github.com/datastax/java-driver/blob/2.1/driver-core/src/main/…

以上是关于com.datastax.driver.core.TransportException: [/xx.xxx.x.xxx:9042] 无法连接的主要内容,如果未能解决你的问题,请参考以下文章

com.datastax.driver.core.exceptions.InvalidQueryException:未配置的表用户”

com.datastax.driver.core.exceptions.InvalidQueryException:未配置的表 schema_keyspaces

java.lang.NoClassDefFoundError:无法初始化类 com.datastax.driver.core.Cluster

com.datastax.driver.core.TransportException: [/xx.xxx.x.xxx:9042] 无法连接

引起:com.datastax.driver.core.exceptions.InvalidQueryException:预计日期为 8 或 0 字节长 (13)

为啥 Spark Cassandra 连接器因 NoSuchMethodError: com.datastax.driver.core.TableMetadata.getIndexes()Ljava/