我有一个 2 节点的 cassandra 集群,复制因子为 2,AutoBootStrap=true。启动期间一切正常,两个节点都能看到对方。让我们称这些节点为 A 和 B。
B从不同步设置K2...(已经超过12小时了)
为什么节点 B 看不到 K2 集...有人知道吗?
添加信息 :
好吧……这就是问题所在。
read_consistency_level 默认设置为 1。
因此,当我们向节点 B 询问集合 K2 时,它没有它(因为复制因子 = 2,它应该有),它立即返回“未找到”错误。
但是,如果我们使用读取一致性为 QUORUM 或 ALL,那么 B 将被迫询问 A,然后 A 返回正确的值并且 B 同步该键(将其保存在本地)。
这会导致另一个问题 - 这意味着当节点 B 出现时,它不会同步来自节点 A 的所有数据,即使经过很长时间也是如此。现在,如果节点 A 出现故障,我们如何访问未同步的数据? (我刚刚测试过我们不能)
我想必须有一种方法可以强制同步数据。我在终端输出中看到 INFO,当 B 出现时,发生了从 A 到 B 的 15 行的暗示切换,但 B 在本地没有这些行(因为我们仍然无法从 B 以一致性级别 ONE 读取它)。这里发生了什么?
最佳答案
cassandra 有 3 种方式同步节点宕机时发生的更新:
关于replication - Cassandra 数据复制问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3827441/