【问题标题】:Error on Cassandra server: Unable to gossip with any seedsCassandra 服务器上的错误:无法使用任何种子进行八卦
【发布时间】:2014-08-19 15:13:54
【问题描述】:

我正在向单节点 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: 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'' 尝试过,结果是一样的。我用过telnet 和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 相同的方式失败。种子节点的日志是干净的,但其他节点重复记录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,直到八卦失败。我认为日志条目与失败有关。为什么一个记录这个而另一个不记录,我不知道。它们都是运行相同 jdk 版本的 debian。

编辑:

在两个节点上安装 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 的说明,我已经非常小心地为两台服务器创建了证书。

【问题讨论】:

    标签: cassandra cassandra-2.0


    【解决方案1】:

    现在可以使用未加密或加密的通信。在两台服务器上安装 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
    

    【讨论】:

      猜你喜欢
      • 2014-01-08
      • 2015-12-22
      • 2015-02-07
      • 1970-01-01
      • 2016-05-18
      • 2017-01-27
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多