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

标签 c++ cassandra cassandra-3.0

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

dc1 有 2 个节点,dc 2 有 1 个节点。 复制策略:网络拓扑,dc1:2,dc2:1 Cassandra :3.0.14 瑞尔 6

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

最佳答案

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

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

关于c++ - 当 3 个节点中的 2 个出现故障时,无法在 Cassandra 中写入条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48145621/

相关文章:

c++ - 在 GDI+ 中以特定角度绘制字符串时 AntiAlias 失败

apache-spark - Spark Cassandra Java 集成问题

java - Spark Cassandra 连接器基本简单程序出现 Spark 日志记录错误

cassandra - 如何启动新节点

cassandra - Cassandra CQL 中 Varchar 和文本类型有什么区别

c++ - 我可以防止某些函数在 C++ 中被继承吗?

c++ - C++ 中的复数或单数命名空间名称

c++ - 问题 : String writes over another string

cassandra - Spark Cassandra 连接器的正确使用

cassandra - 在 RHEL 中将 Cassandra 从 2.2 升级到 3.0