我只是想学习Cassnadra,我正在设置两个节点集群的简单练习,但是有困难 - 它到目前为止已经工作了。 Cassandra版本:2.1.1。
主机操作系统:Centos 6.5 64位
Java:8(Oracle)
节点数:2
节点地址:192.168.0.41和192.168.0.43(静态)
在两个方框的防火墙上打开端口:7000,9042,9160,7199
我做了以下设置群集:
将两个方框上的cluster_name更改为" MyCluster",在cassandra.yaml和表格中如下所述:
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我设置了#34;种子:192.168.0.43"
在43我设置了#34;种子:192.168.0.43" (与41相同)
每个节点单独工作(当另一个节点关闭时),它启动并响应
nodetool status
很好并继续运行,我也可以连接cqlsh并运行
describe keyspaces;
也有效。 但是,当我同时运行两个节点时,其中一个节点会在一两分钟后死亡。
确切的症状是:节点仍然响应cqlsh命令描述密钥空间很好,所以它有点活着,但是当尝试做nodetool状态时,会在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部分,它已经死了#34;
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
知道可能出现什么问题吗? 谢谢
答案 0 :(得分:6)
参考:How do you fix node token collision issues when starting up Cassandra nodes in a cluster on VMWare?
"确保删除位置信息目录,其中包含有关群集的数据"
我删除了以下文件夹,然后工作正常
答案 1 :(得分:0)
看来你的配置是正确的。让我们尝试以下方法:
首先开始43(种子节点)
43次完成后,开始41。
答案 2 :(得分:0)
我不确定递归种子是一件好事。 尝试在43 上删除种子"我设置"种子:192.168.0.43""。
答案 3 :(得分:0)
我也是Cassandra的新手,我也遇到了与你上面描述的完全相同的错误。
我的环境:
主机操作系统:Centos 6.5 64位
Cassandra:2.1.2,原始二进制包(未安装rpm)
Java 7(Oracle)
防火墙已关闭
同一局域网中的两个节点
我也尝试了很多次,但这个问题无法解决。最后,我决定删除当前的Cassandra二进制文件,并从一个全新的提取包中开始。
令人惊讶的是,这有效。
然后我重新完成所有配置并启动Cassandra,这次没有问题。启动两个节点并成功形成集群。
我知道这很难被称为"解决方案"对这个问题,但我只是想在这里分享我的经验。我想知道可能有一些缓存信息导致了这个问题?
答案 4 :(得分:0)
这是因为有关集群的元数据仍然存在。因此,请清除默认目录下的本地和对等文件:metadata_directory:/ var / lib / cassandra / metadata 要么 cassandra.yaml中提到的元数据目录的路径。 然后启动cassandra服务。