【问题标题】:Cassandra - data loss on a dead node with CF = 1Cassandra - CF = 1 的死节点上的数据丢失
【发布时间】:2017-04-07 04:16:28
【问题描述】:

我是 Cassandra 的新手,对配置为使用周期性模式(10 秒)的提交日志有疑问。

假设我们有一个节点处理 CF = 1 和 RF = 3 的请求。如果该节点处于提交日志尚未刷新到磁盘并且数据的复制也处于挂起状态,我们会如果节点在这种状态下崩溃,是否会丢失数据?

另外一个后续问题,根据RF=3,哪个节点负责将数据复制到其他节点上?是协调节点还是其他处理请求的节点取决于一致性级别?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    我认为以下链接可能对您有用: https://www.ecyrd.com/cassandracalculator/

    是的,在这种情况下可能会丢失数据,因为数据不会到达其他节点,因此不存在副本。好像数据不存在一样。问题是这个窗口实际上非常小,因为使用 RF 3,其他节点将在几毫秒内收到插入(除非节点上的负载非常重)。

    所有 RF 请求(每个客户端请求)都由协调器处理。此外,如果当协调器需要复制时节点可能不存在,它会将数据存储在提示中。

    所以总结一下,数据丢失是可能的,但概率真的很小。

    【讨论】:

    • 后续问题只是为了理解。如果数据节点和协调节点不同,并且在刷新提交日志之前,确认 CF=1 的数据节点宕机/崩溃,由于协调节点已经发送,数据有可能被复制到剩余的两个数据节点复制请求。对吗?
    • 谢谢,马尔科。 @Chris - 两个答案都是正确的。我选择这个主要是因为有额外的信息。
    【解决方案2】:

    使用 CL=ONE 时,当协调器崩溃并不干净地关闭时,在将突变发送到副本并刷新提交日志之前,可能会出现数据丢失的窗口。它的窗口很小,不太可能,但如果有问题,请使用本地仲裁或批处理模式。

    协调器将向所有副本发送数据并存储任何未确认的提示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-14
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      相关资源
      最近更新 更多