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

标签 java cassandra nosql

上周末,我们开始在 Cassandra 中看到错误。本质上,提示它无法将足够的节点聚集在一起以实现 SERIAL 一致性。

这似乎是 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:
ALTER KEYSPACE my_keyspace WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
并重新启动 cassandra。没变。

也刚跑nodetool cleanup keyspace_name基于下面的答案。也没有变化。

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

Java 应用程序 -> 单个 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,您将永远无法满足仲裁一致性。

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

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

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

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

关于java - Cassandra:单节点集群中没有足够的副本错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28956038/

相关文章:

java - Cassandra 绑定(bind)语句和内存泄漏

python - Pycassa col_fam.get_indexed_slices(clause) 有什么问题

mysql - Mysql 服务器上的分片

arrays - MongoDB:排序数组

java - XMPP、openfire 和机器人问题

java - 通过eclipse添加项目到weblogic时出现SAXNotRecognizedException

cassandra - 如何仅使用分区键更新 cassandra 中的行?

java - 获取二维数组的最大值

java - AtomicInteger 与同步的 getter/setter

java - 如果缺少一台主机,Datastax Java 驱动程序将无法连接