Cassandra:单节点集群中没有足够的副本错误

时间:2015-03-10 04:11:54

标签: java cassandra nosql

周末,我们开始在Cassandra看到错误。基本上,抱怨它无法获得足够的节点以保持SERIAL的一致性。

这似乎是AWS vpn跨地区的问题。因此,为了简化,我删除了另一个节点(当时只有两个节点)。我通过从最后剩余节点的cassandra.yaml中删除种子来完成此操作:

seed_provider:
...
- seeds: "single node ip"

我还在旧节点上运行nodetool removenode(显示死机状态)。

所以拓扑很简单。 Application是一个Java应用程序,它通过Java API连接到Cassandra节点。

以下是我现在看到的错误:

Caused by: com.datastax.driver.core.exceptions.UnavailableException: Not enough replica available for query at consistency QUORUM (2 required but only 1 alive)
        at com.datastax.driver.core.Responses$Error$1.decode(Responses.java:45)
        at com.datastax.driver.core.Responses$Error$1.decode(Responses.java:34)
        at com.datastax.driver.core.Message$ProtocolDecoder.decode(Message.java:182)
        at org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:66)
        ... 21 more

与以前完全相同的错误,除了我们之前有QUORUM的{​​{1}}节点之外。


我刚尝试将复制因子设置为1:

SERIAL

并重新启动cassandra。没有变化。

还根据下面的答案运行ALTER KEYSPACE my_keyspace WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };。也没有变化。


为了清楚起见,拓扑就是这样:

Java App - >单个Cassandra节点

仍然看到:nodetool cleanup keyspace_name

3 个答案:

答案 0 :(得分:6)

您提到丢弃了一个节点。鉴于您正在使用QUORUM并且它需要2个副本,我们可以假设您具有2或3的复制因子。您现在拥有多少个节点以及您的复制因子是什么?根据你的问题,我认为你表示你剩下1个,但我不确定。如果您只有1个节点且RF为2或3,那么您将永远无法满足仲裁一致性。

你可以alter your replication factor来解决这个问题,即:

ALTER KEYSPACE keyspace_name WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };

如果这样做,您还应该在每个节点上运行nodetool cleanup keyspace_name以获取以前的复制数据。

另一种方法是添加足够的节点,以帮助您满足复制因子的QUORUM一致性级别。

答案 1 :(得分:0)

使用单节点群集时将QUORUM更改为

答案 2 :(得分:0)

除了所有

检查cassandra日志。 “日志/调试...”

如果节点侧的逻辑删除过多。你应该清理墓碑。例如 日志输出:

*“ ReadCommand.java:569-读取1000条实时行和1272327逻辑删除单元格以进行查询SELECT * FROM” *

还要检查日志级别,