cassandra 与恢复的节点同步

cassandra sync with recovered node

我正在尝试构建 cassandra 备份和恢复过程。

假设我有 2 个节点 A 和 B 以及 table C,副本因子为 2。 在 table C 中,我们有 ID=5 且 Name="Alex" 的行。 现在,节点 B 发生了一些不好的事情,我们需要将其关闭几分钟以进行恢复。 同时,当节点 B 关闭时,有人将 ID=5 的行从 Name="Alex" 更改为 Name="Alehandro"。

节点 B 再次启动,恢复了数据,并且 ID=5 的该节点行仍然包含 Name="Alex"。

当我尝试查找 ID=5 的行时会发生什么? 节点 A 会与节点 B 同步吗?

谢谢。

Cassandra 有多种方法可以将数据同步到因宕机或垃圾收集暂停等原因而错过写入的节点。这包括:

  • 提示 - 协调节点一段时间(默认 3 小时,可配置)将收集其他节点错过的所有写操作,当它回来时 - 这些操作将针对它重放
  • 修复 - 数据的显式同步,通过 nodetool repair 手动触发,或者可以使用 Reaper 等工具自动执行
  • 读取修复 - 如果您使用的一致性级别需要从多个节点(两个、LOCAL_QUORUM、QUORUM 等)读取,那么协调器节点将检测到差异,并将 return 具有最新时间戳的数据,如有必要,修复具有旧数据的节点上的数据

回答您的最后一个问题 - 当第二个节点返回时,如果提示尚未重播,您可以获得旧数据,并且您正在直接从该节点读取,并且您正在以一致性级别 ONE 或 LOCAL_ONE.

P.S。我建议仔细阅读 DSE Architecture Guide - 它涵盖了 Cassandra 的工作原理。