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

Java Cassandra:单节点群集中没有足够的副本错误,java,cassandra,nosql,Java,Cassandra,Nosql,周末,我们开始看到卡桑德拉的错误。从本质上说,它抱怨它无法获得足够的节点来实现串行一致性 这似乎是AWS vpn跨区域存在的问题。因此,为了简化,我删除了一个节点和另一个节点(当时只有两个节点)。为此,我从最后一个剩余节点的cassandra.yaml中删除了种子: seed_provider: ... - seeds: "single node ip" 我还在旧节点上运行了nodetool removenode(该节点显示死区状态) 所以拓扑结构非常简单。应用程序是一个Java应用程序,通过

周末,我们开始看到卡桑德拉的错误。从本质上说,它抱怨它无法获得足够的节点来实现串行一致性

这似乎是AWS vpn跨区域存在的问题。因此,为了简化,我删除了一个节点和另一个节点(当时只有两个节点)。为此,我从最后一个剩余节点的cassandra.yaml中删除了种子:

seed_provider:
...
- seeds: "single node ip"
我还在旧节点上运行了
nodetool removenode
(该节点显示死区状态)

所以拓扑结构非常简单。应用程序是一个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
的节点之前有
SERIAL


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

alterkeyspace my_KEYSPACE WITH REPLICATION={'class':'SimpleStrategy','REPLICATION_factor':1}

重新启动卡桑德拉。没有变化

还根据下面的答案运行了
nodetool cleanup keyspace\u name
。也没有变化


需要明确的是,拓扑结构如下所示:

Java应用程序->单个Cassandra节点


仍然看到:
在一致性仲裁中没有足够的副本可供查询(需要2个,但只有1个处于活动状态)
您提到您删除了一个节点。如果您使用的是仲裁,并且它需要2个副本,我们可以假设您的复制系数为2或3。您现在有多少个节点?您的复制系数是多少?根据你的问题,我想你是在暗示你还有1个,但我不确定。如果您只有1个节点,且RF为2或3,则永远无法满足仲裁一致性要求

您可以选择1来解决此问题,即:

ALTER KEYSPACE keyspace_name WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
如果执行此操作,还应在每个节点上运行
nodetool cleanup keyspace\u name
,以获取以前复制的数据


另一种选择是添加足够的节点,以帮助您使用复制因子达到仲裁一致性级别。

在使用单节点群集时将仲裁更改为一。

除了所有节点之外,

检查卡桑德拉日志。“日志/调试…”

如果节点侧的墓碑太多。你应该清理墓碑。例如 日志输出:

*“ReadCommand.java:569-从”*


还请检查日志级别,

请更详细地描述拓扑结构。我的想法也是一样——基于错误消息“一致性仲裁中没有足够的副本可供查询(需要2个,但只有1个活动)”。最有可能的是共有2个节点具有RF 2。我建议再添加一个替换节点,并立即在这两个节点上运行nodetool repair-pr。而且从未有过RF=number of nodesI我确实将复制设置为1,在看到您的答案后,运行
cleanup
。错误仍然存在…这似乎不正确,RF为1时,仲裁仅需要1个副本。你确定你做了正确的调整吗?”description keyspace keyspace_name'将显示您配置的射频。我知道,这看起来很奇怪。当我描述我得到的键空间时:
CREATE keyspace my_keyspace WITH replication={'class':'SimpleStrategy','replication_factor':'1'}和durable_writes=true
@AndyTolbert-没错,如果我没记错的话,是
缓存
键空间保持着网络拓扑,复制系数为2。谢谢你的提醒。我会尽快添加答案(除非你想:P)