我们有一个运行 3 个节点且复制因子为 2 的 cassandra 集群 -> 也许我们应该从一开始就选择 3,但事实并非如此。
因此,我们的法定人数 = 2/2 + 1 = 2
假设我们丢失了一个节点 - 所以现在只有两个 cassandra 节点在线。
如果我们将一致性级别设置为“ONE”,然后读取 ->,我们仍然可以从集群中读取数据,所以这不是问题。
我不明白的是以下内容。
我们仍然有两个节点正在运行,那么为什么不能在我们的键空间中进行串行(轻量级事务)插入呢?我们有两个节点,所以在尝试插入时是否应该能够获得 2 的法定人数?
是因为其中一行已经放在丢失的节点上吗?
当您尝试插入数据时,数据将根据令牌值(基于配置的分区器)存储并以循环方式复制。
例如如果您在 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 https://docs.datastax.com/en/cassandra/2.1/cassandra/dml/dml_config_consistency_c.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)