【问题标题】:Cassandra error: No nodes present in the clusterCassandra 错误:集群中不存在节点
【发布时间】:2015-01-13 23:20:48
【问题描述】:

我只是想学习 Cassnadra,我正在做设置两个节点集群的简单练习,但是有困难 - 到目前为止它还没有奏效。 Cassandra 版本:2.1.1。

主机操作系统:Centos 6.5 64 位

Java:8(甲骨文)

节点数:2

节点地址:192.168.0.41 和 192.168.0.43(静态)

两个盒子的防火墙上打开的端口:7000、9042、9160、7199

我做了以下设置集群:

在 cassandra.yaml 和表中将两个框上的 cluster_name 更改为“MyCluster”,如下所述:

cassandra - Saved cluster name Test Cluster != configured name

将listen_address分别更改为192.168.0.41和192.168.0.43。

将 rpc_address 分别更改为 192.168.0.41 和 192.168.0.43。

在 41 上我设置了“种子:192.168.0.43”

在 43 上我设置了“种子:192.168.0.43”(与 41 上相同)

每个节点自己工作(当另一个节点宕机时),它启动并响应

nodetool status

没事继续跑,我也可以连接cqlsh运行

describe keyspaces;

这也有效。 但是当我同时运行两个节点时,其中一个会在一两分钟后死掉。

确切的症状是:节点仍然响应 cqlsh 命令 describe keyspaces fine,所以它有点活着,但是当尝试执行 nodetool status 时,nodetool 输出上会打印以下错误:

error: No nodes present in the cluster. Has this node finished starting up?
-- StackTrace --
java.lang.RuntimeException: No nodes present in the cluster. Has this node finished starting up?
    at org.apache.cassandra.dht.Murmur3Partitioner.describeOwnership  
         (Murmur3Partitioner.java:130)
         ....

另一个节点继续正常运行,并且作为集群中唯一的节点,它一直报告自己拥有 100% 的所有权。

这是 43 的 system.log 部分,大约在它“死亡”的时候:

WARN  [GossipStage:1] 2014-11-17 04:33:30,163 TokenMetadata.java:198 - Token -7592767110844961279 changing ownership from /192.168.0.43 to /192.168.0.41
WARN  [GossipStage:1] 2014-11-17 04:33:30,163 TokenMetadata.java:198 - Token -7240492143116021720 changing ownership from /192.168.0.43 to /192.168.0.41
WARN  [GossipStage:1] 2014-11-17 04:33:30,163 TokenMetadata.java:198 - Token -8434936427655644773 changing ownership from /192.168.0.43 to /192.168.0.41
WARN  [GossipStage:1] 2014-11-17 04:33:30,163 TokenMetadata.java:198 - Token -1656745619022636889 changing ownership from /192.168.0.43 to /192.168.0.41
WARN  [GossipStage:1] 2014-11-17 04:33:30,163 TokenMetadata.java:198 - Token -7470625165291146007 changing ownership from /192.168.0.43 to /192.168.0.41
INFO  [HANDSHAKE-/192.168.0.41] 2014-11-17 04:33:30,230 OutboundTcpConnection.java:427 - Handshaking version with /192.168.0.41
INFO  [GossipTasks:1] 2014-11-17 04:33:49,179 Gossiper.java:906 - InetAddress /192.168.0.41 is now DOWN
INFO  [HANDSHAKE-/192.168.0.41] 2014-11-17 04:33:50,190 OutboundTcpConnection.java:427 - Handshaking version with /192.168.0.41
INFO  [SharedPool-Worker-1] 2014-11-17 04:34:30,224 Gossiper.java:892 - InetAddress /192.168.0.41 is now UP
INFO  [CompactionExecutor:5] 2014-11-17 04:41:01,178 CompactionManager.java:521 - No files to compact for user defined compaction
INFO  [CompactionExecutor:6] 2014-11-17 04:51:01,187 CompactionManager.java:521 - No files to compact for user defined compaction

知道有什么问题吗? 谢谢

【问题讨论】:

  • 实验次数后观察,无论顺序如何,第一个启动的节点都是“死亡”的节点。
  • 你找到解决办法了吗,我也有同样的问题?

标签: cassandra cassandra-2.0


【解决方案1】:

看来你的配置是正确的。让我们尝试以下方法:

先启动43(种子节点)

43启动完成后,启动41。

【讨论】:

  • 已启动 43。确保它正在运行并响应。等了2分钟。再次检查了 43 - 一切都很好。 Started 41. 确保它正在运行并响应。大约 15 秒后,再次检查 43 后,它已因上述症状死亡。 41 继续作为集群中唯一的节点运行
  • @henry 你能检查(并发布相关部分)/var/log/cassandra/system.log 的结尾吗?这应该为节点 43 出现问题的原因提供更多线索。
  • @henry 我在该日志 sn-p 中看不到任何明显的原因。两个想法:1)非常低的内存,导致 Cassandra 在没有有意义的错误的情况下关闭 - 这 2 个节点有多少内存? 2) 清除所有 Cassandra 数据并重新启动 43,然后 41(假设这是一个开发系统并且可以安全删除)
  • @henry 也许在第二个节点启动时,使用nodetoolnetstats检查第一个节点是否正在向其传输数据
  • @GQuintana 我运行了“nodetool netstats”它返回“模式:正常。不发送任何流。”再加上一些统计数据。这告诉我们什么?谢谢
【解决方案2】:

我不确定递归种子是不是一件好事。 尝试在 43 上移除种子“我设置了“种子:192.168.0.43””。

【讨论】:

  • 我试图将 43 的种子设置为空 - 同样的问题
【解决方案3】:

我也是 Cassandra 的新手,我也遇到了与您上面描述的完全相同的错误。

我的环境:

主机操作系统:Centos 6.5 64 位

Cassandra:2.1.2,原始二进制包(未安装 rpm)

Java 7 (甲骨文)

防火墙关闭

同一局域网中的两个节点

我也试过很多次,但这个问题就是无法解决。最后,我决定删除当前的 Cassandra 二进制文件,并从一个全新的提取包开始。

令人惊讶的是,这行得通。

然后我重新进行所有配置并启动 Cassandra,这次没有问题发生。两个节点都启动,集群组建成功。

我知道这很难被称为这个问题的“解决方案”,但我只想在这里分享我的经验。我想知道可能是某些缓存信息导致了这个问题?

【讨论】:

    【解决方案4】:

    参考:How do you fix node token collision issues when starting up Cassandra nodes in a cluster on VMWare?

    “确保删除 Location Info 目录,其中包含有关集群的数据”

    我删除了以下文件夹然后它工作正常

    1. /home/db/cassandra/apache-cassandra-2.1.2/data/data
    2. /home/db/cassandra/apache-cassandra-2.1.2/data/commitlog
    3. /home/db/cassandra/apache-cassandra-2.1.2/data/saved_caches

    【讨论】:

    • 我刚刚删除了data文件夹,然后设置了cassandra用户创建文件夹的权限
    • 我还必须擦除 hints 子目录。
    【解决方案5】:

    这是因为关于集群的元数据仍然存在。所以清除默认目录下local和peer的文件: metadata_directory: /var/lib/cassandra/metadata 要么 cassandra.yaml 中提到的元数据目录的路径。 然后启动 cassandra 服务。

    【讨论】:

      猜你喜欢
      • 2016-08-14
      • 2012-05-02
      • 1970-01-01
      • 2020-04-12
      • 2017-10-27
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      相关资源
      最近更新 更多