当节点重新同步其数据时,cassandra 能否保证复制因子?
Can cassandra guarantee the replication factor when a node is resyncing it's data?
假设我有一个 3 节点集群。
我正在写入节点 #1。
如果该集群中的节点 #2 出现故障,然后恢复并正在重新同步来自其他节点的数据,并且我继续写入节点 #1,数据是否会同步复制到节点 #2?也就是说,该写入的复制因子是同步执行的还是在队列后面 post resync?
谢谢
史蒂夫
是的,您正在以可以处理 1 个节点不可用的一致性级别进行读写。
考虑以下场景:
- 您有一个 3 节点集群,其密钥空间 'ks' 的复制因子为 3。
- 您正在 'QUORUM'
的 Consistency Level 写作
- 您阅读的一致性级别为 'QUORUM'。
- 节点 2 宕机 10 分钟。
- 读取和写入可以在节点关闭时成功继续,因为 'QUORUM' 只需要 2 (3/2+1=2) 个节点可用。当节点 2 关闭时,节点 1 和节点 3 都为节点 2 维护 'hints'。
- 节点 2 上线。节点 1 和 3 发送他们在节点 2 关闭时记录的提示到节点 2。
如果发生读取并且协调 cassandra 节点检测到节点缺失 data/not 一致,它可能会执行 'read repair'
如果节点 2 长时间宕机,节点 1 和节点 3 可能不会保留所有发往它的提示。在这种情况下,运营商应该考虑 运行 repairs 在计划的基础上。
另请注意,在进行读取时,如果 Cassandra 在摘要请求期间发现数据不匹配,它将始终将具有最新时间戳的数据视为正确的数据(参见 'Why cassandra doesn't need vector clocks')。
节点 2 将立即开始接收新的写入以及其他节点为此节点存储的任何提示。最好在节点备份后运行对其进行读取修复,这将确保数据与其他节点的准确性。
请注意,每一列都存储了一个时间戳,这将有助于 cassandra 在 运行 节点修复时确定哪些数据是最新的。
假设我有一个 3 节点集群。
我正在写入节点 #1。
如果该集群中的节点 #2 出现故障,然后恢复并正在重新同步来自其他节点的数据,并且我继续写入节点 #1,数据是否会同步复制到节点 #2?也就是说,该写入的复制因子是同步执行的还是在队列后面 post resync?
谢谢 史蒂夫
是的,您正在以可以处理 1 个节点不可用的一致性级别进行读写。
考虑以下场景:
- 您有一个 3 节点集群,其密钥空间 'ks' 的复制因子为 3。
- 您正在 'QUORUM' 的 Consistency Level 写作
- 您阅读的一致性级别为 'QUORUM'。
- 节点 2 宕机 10 分钟。
- 读取和写入可以在节点关闭时成功继续,因为 'QUORUM' 只需要 2 (3/2+1=2) 个节点可用。当节点 2 关闭时,节点 1 和节点 3 都为节点 2 维护 'hints'。
- 节点 2 上线。节点 1 和 3 发送他们在节点 2 关闭时记录的提示到节点 2。
如果发生读取并且协调 cassandra 节点检测到节点缺失 data/not 一致,它可能会执行 'read repair'
如果节点 2 长时间宕机,节点 1 和节点 3 可能不会保留所有发往它的提示。在这种情况下,运营商应该考虑 运行 repairs 在计划的基础上。
另请注意,在进行读取时,如果 Cassandra 在摘要请求期间发现数据不匹配,它将始终将具有最新时间戳的数据视为正确的数据(参见 'Why cassandra doesn't need vector clocks')。
节点 2 将立即开始接收新的写入以及其他节点为此节点存储的任何提示。最好在节点备份后运行对其进行读取修复,这将确保数据与其他节点的准确性。
请注意,每一列都存储了一个时间戳,这将有助于 cassandra 在 运行 节点修复时确定哪些数据是最新的。