cassandra - 事务之间节点死亡/离线时的 Cassandra 一致性问题
问题描述
我有一个场景
假设我们在一个集群中有 6 个节点,复制因子为 3。现在我们正在使用 quorum 进行编写,所以假设协调器看到有 3 个节点在数据需要去的地方,但是当它将数据发送到 3 个节点 n1 时, n2,n3。n1 和 n2 停止工作,因此写入操作将失败,因为 quorum 未满足,但 n3 将具有此失败 upsert 的数据,因为 cassandra 没有回滚。
在此之后 n1 和 n2 出现但具有较旧的数据。
现在如果读取完成,在读取修复中,n3 上存在的最新数据(失败的 upsert)将被复制到 n1 和 n2 我的理解是否正确?
解决方案
是的,你是对的。
如果针对该记录运行读取修复,则将从 n3 复制数据。这将取决于您的配置read_repair_chance
以及查询记录的频率。
如果不经常查询记录,则不太可能运行读取修复,您将不得不等待修复运行。
如果你没有nodetool repair
按时跑步,你应该开始这样做!
请注意,如果您QOURUM
在修复之前保持一致性阅读,您仍将获得旧值。
推荐阅读
- java - 张量流字节缓冲区
- ansible - 如何使用 Ansible 将命令的输出读入两列
- javascript - 如何用 JS 播放动画
- autocomplete - 如何使用 Antd Autocomplete 更改显示建议的数量?
- kotlin - Google Calendar API v3 未保存活动地点和与会者
- java - 无法在华为设备上多次播放音乐文件
- javascript - JavaScript 解析 (JSON)
- javascript - 从 XRegExp 获取匹配
- python - 如果知道中心点,如何计算网格的角点
- python - 根据 2 个数据框(日期时间)获取前后天数