mty*_*son 2 java cassandra nosql
在周末,我们开始在Cassandra看到错误.从本质上讲,抱怨它无法获得足够的节点以实现SERIAL一致性.
这似乎是AWS vpn跨地区的问题.因此,为了简化,我删除了另一个节点(当时只有两个节点).我通过从最后剩下的节点的cassandra.yaml中删除种子来做到这一点:
seed_provider:
...
- seeds: "single node ip"
Run Code Online (Sandbox Code Playgroud)
我也跑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
Run Code Online (Sandbox Code Playgroud)
哪个是与以前完全相同的错误,除了QUORUM我们SERIAL之前拥有的节点.
我刚刚尝试将复制因子设置为1:
ALTER KEYSPACE my_keyspace WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
并重新启动cassandra.没变.
还nodetool cleanup keyspace_name根据下面的答案运行.也没有变化.
为了清楚起见,拓扑是这样的:
Java App - >单个Cassandra节点
还在看: Not enough replica available for query at consistency QUORUM (2 required but only 1 alive)
你提到你删除了一个节点.鉴于您正在使用QUORUM并且它需要2个副本,我们可以假设您具有2或3的复制因子.您现在拥有多少个节点以及您的复制因子是什么?根据你的问题,我认为你表示你有1个,但我不确定.如果您只有1个节点且RF为2或3,那么您将永远无法满足仲裁一致性.
您可以将复制因子更改为1以解决此问题,即:
ALTER KEYSPACE keyspace_name WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
Run Code Online (Sandbox Code Playgroud)
如果这样做,您还应该nodetool cleanup keyspace_name在每个节点上运行以获取以前的复制数据.
另一种方法是添加足够的节点,以帮助您满足复制因子的QUORUM一致性级别.