【问题标题】:What happens when Cassandra is unable to add new data to primary replica当 Cassandra 无法向主副本添加新数据时会发生什么
【发布时间】:2017-09-06 14:10:03
【问题描述】:

假设我们在 Cassandra 中有 3 个节点,具有不同的存储大小,RF=2 和 CL=QUORUM。

插入新数据,分区器将新密钥散列到节点 1。虽然节点 1 可用,但它没有更多存储空间,但其他 2 个节点有。 Cassandra 是否将数据写入节点 2 和 3?

如果是这样,这对您的读取路径有何影响?当用户查询该特定分区键时,它是否会散列到节点 1,找不到它,然后尝试令牌环中的所有其他附近节点?还是一起失败?

【问题讨论】:

    标签: cassandra nosql


    【解决方案1】:

    根据分区键将数据放入 C*,但此数据也定义了数据所属的副本。这意味着永远不会怀疑一条数据驻留在哪些节点上。

    如果 RF=2,则每个分区键将映射到集群中的两个节点。除非集群的拓扑发生变化,或者键空间的复制因子发生变化,否则此映射不会发生变化。

    当您插入一条数据时,您指定了一个一致性级别。这是必须从集群接收到的副本确认数量,才能将请求视为成功。

    在您的情况下,Quorum 等同于 ALL(Quorum = 1/2 * RF + 1 == 2 == ALL)。这意味着如果任何一个副本关闭或无法进行新的写入,任何写入都将失败。如果由于某种原因无法完成写入,则认为该副本失败。

    如果 CL

    在阅读时会发生类似的事情。将向两个副本查询数据,但由于其中一个已关闭,因此不会满足一致性级别并且请求将失败。

    【讨论】:

    • 回到:在你的情况下 Qurorum 相当于 ALL (Quurorm = 1/2 * RF + 1 == 2 == ALL) 在我的情况下,节点实际上并没有关闭,它是在线但无法接受更多数据。你是说在存储限制的情况下无法写入节点 1 就等于节点宕机了?
    • 对于写入是的。尽管由于压缩,您很可能会在磁盘已满之前很久就遇到问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 2011-08-31
    相关资源
    最近更新 更多