【问题标题】:Cassandra (replication factor: 2, nodes: 3) and lightweight transactionsCassandra(复制因子:2,节点:3)和轻量级事务
【发布时间】:2017-07-30 09:04:20
【问题描述】:

我们有一个运行 3 个节点和复制因子 2 的 cassandra 集群 -> 也许我们应该从一开始就选择 3,但事实并非如此。

因此,我们的法定人数为 = 2/2 + 1 = 2

假设我们失去了一个节点 - 所以现在只有两个 cassandra 节点在线。

如果我们将一致性级别设置为“ONE”然后读取,我们仍然有可能从集群中读取 -> 所以这不是问题。

我不明白的是以下内容。

我们仍然有两个节点在运行,那么为什么不能在我们的键空间中进行串行(轻量级事务)插入?我们有两个节点,所以在尝试插入时是否应该获得 2 个仲裁?

是不是因为其中一行已经放在丢失的节点上?

【问题讨论】:

    标签: database cassandra


    【解决方案1】:

    当您尝试插入数据时,数据将根据令牌值(基于配置的分区器)存储并以循环方式复制。

    例如如果您在 3 节点集群 Node1(拥有令牌 A)、Node2(拥有令牌 B)和 Node3(拥有令牌 C)中的复制因子为 2 的键空间中插入数据 X。假设数据 X 被计算为令牌 B,然后 Cassandra 开始从 Node2 和 Node3 插入数据(直到它完成副本)。假设如果数据 X 被计算为令牌 C,那么 Cassandra 开始从 Node3 和 Node1 插入数据。

    所以设置一致性级别 2 意味着数据必须写入 2 个节点。 在您的情况下,即使您在 Node1(令牌 A)和 Node2(令牌 B)上有 2 个节点,在 Node3 (令牌 C)上有一个节点,如果数据被计算并选择为令牌 B,那么 Cassandra 会尝试插入 Node2 和Node3 并且你得到一致性错误,因为它不能插入到 Node3 中。

    所以要插入,您必须将复制增加到 3 或将一致性减少到 1。

    要了解有关一致性的更多信息,请参阅此文档https://docs.datastax.com/en/cassandra/2.1/cassandra/dml/dml_config_consistency_c.html

    【讨论】:

    • 感谢您的回答
    【解决方案2】:

    轻量级事务需要 QUORUM 一致性级别,如果不可用节点是受影响密钥的副本,则无法达到该级别。这里重要的是可用副本的数量,而不是集群中的节点数量。

    【讨论】:

    • “轻量级事务需要一个 QUORUM 一致性级别”——你确定吗?我不认为这是准确的
    猜你喜欢
    • 2017-06-13
    • 2018-05-08
    • 2022-01-08
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 2021-10-17
    • 2016-10-06
    • 2019-01-12
    相关资源
    最近更新 更多