【问题标题】:Cassandra: Not enough replica error in single node clusterCassandra:单节点集群中没有足够的副本错误
【发布时间】:2015-03-10 04:11:53
【问题描述】:

周末,我们开始在 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)

【问题讨论】:

  • 请详细描述拓扑。

标签: java cassandra nosql


【解决方案1】:

您提到您删除了一个节点。假设您使用的是 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 一致性级别。

【讨论】:

  • 我的想法也是如此 - 基于错误消息“没有足够的副本可用于一致性 QUORUM 的查询(需要 2 个但只有 1 个活着)”。 RF 2 很可能总共有 2 个节点。我会说再添加一个替换节点并立即在两个节点上运行 nodetool repair -pr。并且永远不会有 RF = 节点数
  • 我确实将复制设置为 1,在看到您的回答后,运行 cleanup。错误仍然存​​在...
  • 好像不对,RF 为 1,quorum 只需要 1 个副本。你确定你做了正确的调整吗? 'describe keyspace keyspace_name' 将显示您配置的 RF。
  • 我知道,这似乎很奇怪。当我描述我得到的键空间时:CREATE KEYSPACE my_keyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = true;
  • @AndyTolbert - 没错,如果我没记错的话,是 cache 键空间保留了网络拓扑,复制因子为 2。感谢您的提醒。我会尽快添加答案(除非你想:P)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    除此之外,

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

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

    *"ReadCommand.java:569 - 读取 1000 个活动行和 1272327 个墓碑单元以进行查询 SELECT * FROM "*

    还要检查日志级别,

    【讨论】:

      猜你喜欢
      • 2015-06-03
      • 2012-05-02
      • 2013-11-03
      • 2015-01-13
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      相关资源
      最近更新 更多