【发布时间】:2015-08-20 11:40:01
【问题描述】:
假设我有一个 3 节点集群。
我正在写入节点 #1。
如果该集群中的节点 #2 出现故障,然后重新启动并重新同步来自其他节点的数据,并且我继续写入节点 #1,数据是否会同步复制到节点 #2?也就是说,该写入的复制因子是同步兑现还是在队列后重新同步之后?
谢谢 史蒂夫
【问题讨论】:
假设我有一个 3 节点集群。
我正在写入节点 #1。
如果该集群中的节点 #2 出现故障,然后重新启动并重新同步来自其他节点的数据,并且我继续写入节点 #1,数据是否会同步复制到节点 #2?也就是说,该写入的复制因子是同步兑现还是在队列后重新同步之后?
谢谢 史蒂夫
【问题讨论】:
是的,前提是您正在以可以处理 1 个节点变得不可用的一致性级别进行读写。
考虑以下场景:
如果发生读取并且协调 cassandra 节点检测到节点缺少数据/不一致,它可能会执行 'read repair'
如果节点 2 长时间停机,节点 1 和节点 3 可能无法保留所有指向它的提示。在这种情况下,操作员应考虑按计划运行repairs。
还要注意,在读取时,如果 Cassandra 在摘要请求期间发现数据不匹配,它将始终将具有最新时间戳的数据视为正确的数据(请参阅'Why cassandra doesn't need vector clocks')。
【讨论】:
Node2 将立即开始接受新的写入以及其他人为此节点存储的任何提示。备份后在节点上运行读取修复是个好主意,这将确保数据与其他节点一致。
请注意,每列都存储了一个时间戳,这将有助于 cassandra 在运行节点修复时确定哪些数据是最新的。
【讨论】: