当节点重新同步数据时,cassandra可以保证复制因子吗?

时间:2015-08-19 02:17:52

标签: cassandra cassandra-2.0

假设我有一个3节点集群。

我写信给节点#1。

如果该群集中的节点#2出现故障,然后重新启动并重新同步来自其他节点的数据,并且我继续写入节点#1,那么数据是否会同步复制到节点#2?也就是说,该写入的复制因子是同步还是在重新同步后的队列后面?

由于 史蒂夫

2 个答案:

答案 0 :(得分:3)

是的,因为您正在以一致性级别进行读写,可以处理1个节点变得不可用。

考虑以下情况:

  1. 您有一个3节点群集,其密钥空间为“ks”,复制因子为3。
  2. 您正在Consistency Level的'QUORUM'
  3. 写作
  4. 您正在以“QUORUM”的一致性级别阅读。
  5. 节点2停机10分钟。
  6. 当节点关闭时,读取和写入可以成功继续,因为“QUORUM”仅需要2(3/2 + 1 = 2)个节点可用。当节点2关闭时,节点1和节点3都为节点2维护'hints'
  7. 节点2上线。节点1和3发送他们在节点2关闭到节点2时记录的提示。
  8. 如果发生读取且协调cassandra节点检测到节点缺少数据/不一致,则可能执行'read repair'

    如果节点2长时间停机,则节点1和节点3可能不会保留所有发往它的提示。在这种情况下,运营商应考虑按计划运行repairs

    另请注意,在执行读取操作时,如果Cassandra在摘要请求期间发现数据不匹配,它将始终将具有最新时间戳的数据视为正确的数据(请参阅'Why cassandra doesn't need vector clocks')。

答案 1 :(得分:0)

Node2将立即开始接受新写入以及其他人为此节点存储的任何提示。最好在节点恢复后在节点上运行读取修复,这将确保数据与其他节点一致。

请注意,每个列都有一个存储时间戳,这将有助于cassandra确定运行节点修复时最新的数据。