cassandra - Cassandra 服务器上出现错误 : Unable to gossip with any seeds

标签 cassandra cassandra-2.0

我正在向单节点 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)

还有其他与此相同的问题,但没有一个答案对我有用:

Apache Cassandra: Unable to gossip with any seeds

new cassandra node can't gossip with seed

Datastax Enterprise is crashing with Unable to gossip with any seeds error

我在两个节点上运行 Cassandra 2.0.8 和 jdk 1.7.0_51。一个节点托管在 DigitalOcean,另一个节点托管在 Linode。我试过了 在 cassandra-rackdc.properties 中将它们配置为相同的数据中心和不同的数据中心,这不会导致 不同之处。我尝试过listen_address和broadcast_address空白并硬编码,没有区别。我确实限制了 密码套件列表,以阻止有关丢失密码套件的大量日志消息。从库存 cassandra.yaml 开始,我已经改变了 以下条目,不包括与并发写入和压缩相关的条目。对于这个问题,无论在哪里 配置中有一个硬编码的 IP 地址,我已将其替换为 .每个盒子都有防火墙,但我已经尝试过 防火墙已禁用。我也尝试过使用“internode_encryption:none”,结果是相同的。我用过远程登录 和 netcat 确认每台主机都可以连接到对方的端口 7000 和 7001。

在原始主机上:

- seeds: "<host1>"
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: "<host1>"
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。 Gossip 现在可与 internode_encryption: none 配合使用。我非常怀疑新的结果与JDK的变化有关;这更可能与清理目录等方面的粗心有关。

我已经注释了每个配置文件中列出密码的行。对于 internode_encryption: all,Gossip 仍然会以同样的方式失败。种子节点的日志是干净的,但其他节点会重复过滤掉 TLS_RSA_WITH_AES_256_CBC_SHA、TLS_DHE_RSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,因为套接字不支持它,直到 gossip 失败。我认为日志条目与失败有关。为什么一个记录这个而另一个不记录,我不知道。它们都是 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 中的说明非常仔细地为两台服务器创建了证书。 .

最佳答案

它现在可以使用未加密或加密的通信进行工作。在两台服务器上安装 JCE 扩展并更改证书生成后,加密通信开始工作。 preparing server certificates for Cassandra 2.0 的 Datastax 说明删除 Cassandra 1.2 instructions 中存在的参数。包括参数似乎会产生影响。附加参数是-keyalg RSA:

Seed server:
keytool -genkey -alias prod01 -keystore .keystore -keyalg RSA
keytool -export -alias prod01 -file prod01.cer -keystore .keystore -keyalg RSA

Other server:
keytool -genkey -alias prod00 -keystore .keystore -keyalg RSA
keytool -export -alias prod00 -file prod00.cer -keystore .keystore -keyalg RSA

然后,确保两台服务器都有两个证书,并使用它们在两台服务器上使用以下命令创建信任存储:

keytool -import -v -trustcacerts -alias prod00 -file prod00.cer -keystore .truststore
keytool -import -v -trustcacerts -alias prod01 -file prod01.cer -keystore .truststore
chmod go-rwx .keystore

关于cassandra - Cassandra 服务器上出现错误 : Unable to gossip with any seeds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24469966/

相关文章:

cassandra - 在 Cassandra 中,如何将数据保存在列名中,同时将列值保留为空?

java - 在 Cassandra 3.x 中禁用 thrift

docker - Cassandra中的数据库同步时间

java - 在Akka模型中共享Cassandra集群/ session

java - 从 Web 应用程序使用 Cassandra 驱动程序的正确方法是什么

cassandra - 网络感知告密者

cassandra - 如何在cassandra中使用cql查询获取系统日期

cassandra - Cassandra 1.1 批量加载期间出现异常

nosql - 在Cassandra中调整写入性能

java - Cassandra Java 驱动程序 - QueryBuilder API 与 PreparedStatements