gpt4 book ai didi

replication - Cassandra 数据复制问题

转载 作者:行者123 更新时间:2023-12-04 08:16:34 26 4
gpt4 key购买 nike

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

  • 通过节点 A 向 cassandra 添加一组键和列(我们称之为 K1 集)。
  • 连接到节点 A 并读回集 K1。在节点 B 上相同。成功 - 好
  • 杀死节点 B 上的 Cassandra 进程。
  • 通过 A 添加集合 K2。
  • 连接到节点 A 并读取集 K2。好
  • 在节点 B 上重新启动 Cassandra 进程。
  • 尝试从 B 读取所有 key ...设置 K1 存在,设置 K2 MISSING。 (即使在 30 分钟后)
  • 将 K3 添加到 A/B。
  • 从 A 读取所有键 - 返回集合 K1、K2、K3
  • 从 B 读取所有键 - 返回集合 K1、K3。

  • 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 种方式同步节点宕机时发生的更新:

  • 暗示交接。要求 A 上的故障检测器在您写入 K2 之前识别 B 已关闭。见 http://wiki.apache.org/cassandra/HintedHandoff
  • 阅读修复。要求 B 在请求 K2 进行修复时启动。见 http://wiki.apache.org/cassandra/ReadRepair
  • 反熵修复需要手动调用(“nodetool repair”)。见 http://wiki.apache.org/cassandra/AntiEntropy
  • 关于replication - Cassandra 数据复制问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3827441/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com