我正在向单节点cassandra集群添加第二个节点,并在第二个节点上获取堆栈跟踪:
ERROR 18:13:42,841 Exception encountered during startup java.lang.RuntimeException: Unable to gossip with any seeds at org.apache.cassandra.gms.Gossiper.doShadowRound(Gossiper.java:1193) at org.apache.cassandra.service.StorageService.checkForEndpointCollision(StorageService.java:446) at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:655) at org.apache.cassandra.service.StorageService.initServer(StorageService.java:611) at org.apache.cassandra.service.StorageService.initServer(StorageService.java:504) at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:378) at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:496) at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:585) java.lang.RuntimeException: Unable to gossip with any seeds at org.apache.cassandra.gms.Gossiper.doShadowRound(Gossiper.java:1193) at org.apache.cassandra.service.StorageService.checkForEndpointCollision(StorageService.java:446) at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:655) at org.apache.cassandra.service.StorageService.initServer(StorageService.java:611) at org.apache.cassandra.service.StorageService.initServer(StorageService.java:504) at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:378) at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:496) at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:585) Exception encountered during startup: Unable to gossip with any seeds ERROR 18:13:42,885 Exception in thread Thread[StorageServiceShutdownHook,5,main] java.lang.NullPointerException at org.apache.cassandra.gms.Gossiper.stop(Gossiper.java:1270) at org.apache.cassandra.service.StorageService$1.runMayThrow(StorageService.java:572) at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) at java.lang.Thread.run(Thread.java:744)
同样的问题还有其他SO问题,但没有一个答案对我有用:
Apache Cassandra:无法用任何种子闲聊
新的cassandra节点不能用种子八卦
Datastax Enterprise正在崩溃,无法用任何种子错误闲聊
我在两个节点上运行Cassandra 2.0.8和jdk 1.7.0_51.一个节点托管在DigitalOcean,另一个托管在Linode.我尝试将它们配置为cassandra-rackdc.properties中的相同数据中心和不同的数据中心,它没有任何区别.我试过listen_address和broadcast_address空白和硬编码,没有任何区别.我确实限制了密码套件列表,以阻止大量关于丢失密码套件的日志消息.从库存cassandra.yaml,我更改了以下条目,不包括与并发写入和压缩相关的条目.为了这个问题,只要配置中有硬编码的IP地址,我就用它替换掉了.每个盒子都有一个防火墙,但我已经尝试禁用防火墙.我也尝试过''internode_encryption:none'',结果是一样的.我使用telnet和netcat确认每个主机可以连接到另一个端口7000和7001.
在原主机上:
- seeds: "" listen_address: broadcast_address: endpoint_snitch: GossipingPropertyFileSnitch internode_encryption: all cipher_suites: [TLS_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA]
在新主持人上:
- seeds: "" listen_address: broadcast_address: endpoint_snitch: GossipingPropertyFileSnitch internode_encryption: all cipher_suites: [TLS_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA]
编辑:
此外,使用netstat我可以看到新服务器成功建立到原始服务器的端口7001的TCP连接.
编辑:
好的,第二天.我已在两台机器上升级到java 1.7.0_60.八卦现在可以使用了internode_encryption: none
.我非常怀疑新结果与JDK的变化有关; 它更可能与擦洗目录等中的一些疏忽有关.
我已经在每个配置文件中注释了列出密码的行.八卦仍然以同样的方式失败internode_encryption: all
.种子节点的日志是干净的,但另一个节点Filtering out TLS_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA as it isnt supported by the socket
重复记录,直到八卦失败.我认为日志条目与失败有关.为什么一个人记录这个而另一个没记录,我不知道.他们都是debian运行相同的jdk版本.
编辑:
在两个节点上安装JCE使得过滤警告消失.此时仍然没有加密的节点间通信.
编辑:
启用调试后,种子节点会记录:
DEBUG 22:44:57,409 Error reading the socket d862c40[SSL_NULL_WITH_NULL_NULL: Socket[addr=/10.128.139.94,port=60611,localport=7001]] javax.net.ssl.SSLHandshakeException: no cipher suites in common
我已经按照http://www.datastax.com/documentation/cassandra/2.0/cassandra/security/secureSSLCertificates_t.html?scroll=task_ds_c14_xjy_2k上的说明仔细创建了两台服务器的证书.