【问题标题】:Unable to write entries in Cassandra when 2 out of 3 nodes down当 3 个节点中有 2 个关闭时,无法在 Cassandra 中写入条目
【发布时间】:2018-06-17 03:44:35
【问题描述】:

我通过 C++ 在 Cassandra 中插入数据。我有 2 个数据中心,共有 3 个节点分布在 2 个数据中心(dc1 和 dc2)中。因为我正在做一些实验,所以我在 2 个节点上停止了 Cassandra。现在,当我尝试将数据写入剩余的一个节点时,我会收到诸如“没有可用主机”之类的错误。由于在 C++ 程序中,我没有提到 write 语句的任何一致性,那么为什么它不起作用。我读过默认写入一致性是本地一致性,因此即使只有三分之一的节点启动,我也应该能够写入数据。

dc1 有 2 个节点,dc 2 有 1 个节点。 复制策略:网络拓扑,dc1:2,dc2:1 卡桑德拉:3.0.14 RHEL 6

编辑:在我更改了两件事并重新启动集群后,问题得到了解决: 1.我配置了cassandra-topology.properties。最初它没有设置正确的值。 2.我同步了3个节点之间的时间。 我不知道哪一个(如果不是两个)解决了这个问题。

【问题讨论】:

  • 你使用什么复制因子?
  • 它可能从架构级别采用默认一致性级别。请与您的 CQL 语句分享更多详细信息。
  • 你关闭了哪两个节点?
  • 我关闭了哪 2 个节点并不重要。如果只有一个节点启动,即需要 2 个节点才能输入数据,我将无法输入数据。
  • @VishalSharma 但是您在每个 DC 上使用什么射频?

标签: c++ cassandra cassandra-3.0


【解决方案1】:

RF 对这个问题无关紧要。这取决于写CL。我假设你写的 CL 是 LOCAL_ONE。由于您只有 1 个上行节点,它可能位于 dc1 或 dc2 上。如果您的上节点在 dc1 中,由于 dc1 有两个节点,哈希环由这两个节点共享。因此,Cassandra 应该确定在 dc1 中写入哪个节点。 Cassandra 计算数据分区键的哈希值。如果 up-node 是该分区的所有者,则写入成功,否则写入失败。

如果您的上节点在 dc2 中,由于 dc2 只有 1 个节点,因此该节点拥有所有数据。所以写应该总是成功的。

【讨论】:

  • 所以你不同意之前的回答?另外,根据您的说法,每个数据中心都拥有整个哈希环?
  • 是的,我不同意前面的答案,是的,每个数据中心都拥有整个哈希环。它们甚至可能具有不同的复制因子。
【解决方案2】:

如果您要写入的密钥空间设置为 RF > 1,则意味着数据必须写入超过 1 个副本(超过 1 个节点),并且由于只有 1 个节点保持活动状态,因此不满足 RF设置。

我认为这是您看到错误的原因。

【讨论】:

  • 即使我把一致性作为一个/本地的?
  • 是的,因为 CL=one 满足客户端但不满足整个 Cassandra 集群的 RF 设置。将 CL 视为客户端最低条件设置,将 RF 视为服务器端最低条件设置。
  • 使用 local_one 它应该可以工作,但这取决于您的本地 dc。@VishalSharma 确切知道您关闭了哪些节点会很有趣。
猜你喜欢
  • 2021-11-30
  • 1970-01-01
  • 2016-04-10
  • 1970-01-01
  • 2021-08-25
  • 2015-09-04
  • 2016-11-26
  • 2012-11-29
  • 2018-05-08
相关资源
最近更新 更多