当 3 个节点中的 2 个出现故障时,无法在 Cassandra 中写入条目

Unable to write entries in Cassandra when 2 out of 3 nodes down

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

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

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

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

我想这就是您看到的错误的原因。

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

如果你的up-node在dc2,因为dc2只有1个节点,那个节点拥有所有的数据。所以写应该总是成功的。