Cassandra数据复制问题

2024-01-01

我有一个 2 节点 cassandra 集群,复制因子为 2 并且 AutoBootStrap=true。启动期间一切正常,两个节点都能看到对方。我们将这些节点称为 A 和 B。

  1. 通过节点 A 将一组键和列(我们称之为 K1)添加到 cassandra。
  2. 连接到节点 A 并读回集合 K1。节点 B 上相同。成功 - 良好
  3. 终止节点 B 上的 Cassandra 进程。
  4. 将 K2 组添加到 A 组。
  5. 连接到节点 A 并读取集合 K2。好的
  6. 在节点 B 上重新启动 Cassandra 进程。
  7. 尝试读取 B 中的所有密钥...设置 K1 存在,设置 K2 缺失。 (即使30分钟后)
  8. 将 K3 添加到 A/B。
  9. 读取 A 中的所有键 - 返回集合 K1、K2、K3
  10. 从 B 读取所有密钥 - 返回集合 K1、K3。

B 从未同步设置 K2...(已经超过 12 小时) 为什么节点 B 看不到集合 K2...有人知道吗?


添加信息 :

好吧...这就是问题所在。 read_consistency_level 默认设置为 1。

因此,当我们向节点 B 请求集合 K2 时,它没有(由于复制因子 = 2 而应该有),它会立即返回“未找到”错误。

但是,如果我们使用 QUORUM 或 ALL 读取一致性,则 B 被迫询问 A,然后 A 返回正确的值,并且 B 同步该密钥(将其保存在本地)。

这导致了另一个问题 - 这意味着当节点 B 启动时,即使经过很长一段时间,它也不会同步节点 A 的所有数据。现在,如果节点 A 出现故障,我们如何访问未同步的数据? (我刚刚测试过不能)

我想一定有办法强制同步数据。我在终端输出中看到信息,当 B 出现时,发生了从 A 到 B 的 15 行的提示切换,但 B 本地没有这些行(因为我们仍然无法以一致性级别 ONE 从 B 读取它)。这里发生了什么?


cassandra 有 3 种方式同步节点关闭时发生的更新:

  1. 暗示交接。要求 A 上的故障检测器在写入 K2 之前识别出 B 已关闭。看http://wiki.apache.org/cassandra/HintedHandoff http://wiki.apache.org/cassandra/HintedHandoff
  2. 阅读修复。要求在请求 K2 进行修复时 B 处于启动状态。看http://wiki.apache.org/cassandra/ReadRepair http://wiki.apache.org/cassandra/ReadRepair
  3. 反熵修复。需要手动调用(“nodetool Repair”)。看http://wiki.apache.org/cassandra/AntiEntropy http://wiki.apache.org/cassandra/AntiEntropy
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cassandra数据复制问题 的相关文章

随机推荐