使用DataStax Java驱动程序连接到Cassandra时的ConnectionException 1.0.5

使用DataStax Java驱动程序连接到Cassandra时的ConnectionException 1.0.5

问题描述:

我有一个3个cassandra节点(db-stats-01,db-stats-02,db-stats-03),根据nodetool status使用DataStax Java驱动程序连接到Cassandra时的ConnectionException 1.0.5

客户基本上是这样做的:

Builder builder = Cluster.builder(); 
builder.addContactPoint(node); 
context = getSSLContext(); 
String[] cipherSuites = SSLOptions.DEFAULT_SSL_CIPHER_SUITES; 

builder.withSSL(new SSLOptions(context, cipherSuites)).build(); 

和失败与下面的异常的最后一行:

Sep 12 14:31:26 localhost daemon: Defuncting connection to db-stats-01/192.168.105.1 
Sep 12 14:31:26 localhost com.datastax.driver.core.ConnectionException: [db-stats-01/192.168.105.1] Unexpected error during transport initialization (com.datastax.driver.core.ConnectionException: [db-stats-01/192.168.105.1] Operation Timeouted) 
Sep 12 14:31:26 localhost  at com.datastax.driver.core.Connection.initializeTransport(Connection.java:182) 
Sep 12 14:31:26 localhost  at com.datastax.driver.core.Connection.<init>(Connection.java:132) 
Sep 12 14:31:26 localhost  at com.datastax.driver.core.Connection.<init>(Connection.java:60) 
Sep 12 14:31:26 localhost  at com.datastax.driver.core.Connection$Factory.open(Connection.java:419) 
Sep 12 14:31:26 localhost  at com.datastax.driver.core.ControlConnection.tryConnect(ControlConnection.java:205) 
Sep 12 14:31:26 localhost  at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:168) 
Sep 12 14:31:26 localhost  at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:81) 
Sep 12 14:31:26 localhost  at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:794) 
Sep 12 14:31:26 localhost  at com.datastax.driver.core.Cluster$Manager.access$100(Cluster.java:721) 
Sep 12 14:31:26 localhost  at com.datastax.driver.core.Cluster.<init>(Cluster.java:82) 
Sep 12 14:31:26 localhost  at com.datastax.driver.core.Cluster.<init>(Cluster.java:67) 

有时,但不是每次,我得到了以下错误服务器端:

DEBUG [New I/O worker #1] 2014-09-12 14:36:14,337 Slf4JLogger.java (line 36) SSLEngine.closeInbound() raised an exception after a handshake failure. 
javax.net.ssl.SSLException: Inbound closed before receiving peer's close_notify: possible truncation attack? 
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:208) 
    at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1619) 
    at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1587) 
    at sun.security.ssl.SSLEngineImpl.closeInbound(SSLEngineImpl.java:1517) 
    at org.jboss.netty.handler.ssl.SslHandler.setHandshakeFailure(SslHandler.java:1407) 
    at org.jboss.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1293) 
    at org.jboss.netty.handler.ssl.SslHandler.decode(SslHandler.java:913) 
    at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:425) 
    at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303) 
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268) 
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255) 
    at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88) 
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:109) 
    at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:312) 
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:90) 
    at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 
DEBUG [New I/O worker #1] 2014-09-12 14:36:14,342 Slf4JLogger.java (line 36) Swallowing an exception raised while writing non-app data 
java.nio.channels.ClosedChannelException 
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.cleanUpWriteBuffer(AbstractNioWorker.java:434) 
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.writeFromUserCode(AbstractNioWorker.java:129) 
    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.handleAcceptedSocket(NioServerSocketPipelineSink.java:99) 
    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.eventSunk(NioServerSocketPipelineSink.java:36) 
    at org.jboss.netty.channel.Channels.write(Channels.java:725) 
    at org.jboss.netty.channel.Channels.write(Channels.java:686) 
    at org.jboss.netty.handler.ssl.SslHandler.wrapNonAppData(SslHandler.java:1153) 
    at org.jboss.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1246) 
    at org.jboss.netty.handler.ssl.SslHandler.channelDisconnected(SslHandler.java:656) 
    at org.jboss.netty.channel.Channels.fireChannelDisconnected(Channels.java:396) 
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.close(AbstractNioWorker.java:361) 
    at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:93) 
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:109) 
    at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:312) 
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:90) 
    at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 

H但是,大多数情况下,我甚至没有在服务器上看到这个错误,尽管服务器被设置为DEBUG。

我不怀疑连接问题,因为我看过tcpdump,并且看到数据包往返于客户端和服务器。此外,当我查看netstat -anp时,简要地在端口9042上建立了ESTABLISHED连接。

使用telnet,我可以验证服务器在9042听,当我通过telnet发送垃圾我得到一个不错的错误在服务器端抱怨非SSL记录:

ERROR [Native-Transport-Requests:85] 2014-09-12 14:40:23,747 ErrorMessage.java (line 222) Unexpected exception during request 
org.jboss.netty.handler.ssl.NotSslRecordException: not an SSL/TLS record: 640d0a64660d0a 

不确定还有什么要检查或我可能出错的地方。在我的客户端实施SSL之前,我根本没有看到这个问题,所以我的想法可能是相关的。其他其他信息:

[[email protected] ~]# rpm -qa | grep cassandra 
cassandra20-2.0.9-1.noarch 
[[email protected] ~]# java -version 
java version "1.7.0_67" 
Java(TM) SE Runtime Environment (build 1.7.0_67-b01) 
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode) 

SSL设置在某种程度上是错误的。我根据http://techdocs.acunu.com.s3.amazonaws.com/v5.0/admin/security/ssl.html重新生成了所有我的关键和信任商店,并且所有功能都按预期工作。

+1

该链接已死亡。是其他地方可用的内容吗? – LHWizard 2015-05-06 13:12:09