我们有一个运行3个节点并且复制因子为2的cassandra集群 - >也许我们应该从一开始就选择3,但事实并非如此。
因此我们的法定人数= 2/2 + 1 = 2
假设我们丢失了一个节点 - 所以现在只有两个cassandra节点在线。
如果我们将一致性级别设置为" ONE"我们仍然可以从群集中读取数据。然后阅读 - >所以这不是问题。
我不明白的是以下内容。
我们仍然有两个节点在运行,为什么不能在我们的密钥空间中插入一个串行(轻量级事务)?我们有两个节点,所以在尝试插入时不应该得到2的法定人数?
是因为其中一行已经放在丢失的节点上了吗?
答案 0 :(得分:4)
当您尝试插入数据时,数据将根据令牌值(基于配置的分区程序)进行存储并以循环方式进行复制。
例如如果要在3节点集群Node1(拥有令牌A),Node2(拥有令牌B)和Node3(拥有令牌C)的复制因子为2的密钥空间中插入数据X.假设数据X是否计算到令牌B,那么Cassandra开始从Node2和Node3插入数据(直到它完成副本)。假设数据X是否计算到令牌C,那么Cassandra开始从Node3和Node1插入数据。
因此,将一致性级别设置为2意味着必须将数据写入2个节点。 在你的情况下,即使你有2个节点向上Node1(令牌A)和Node2(令牌B)和一个节点向下Node3(令牌C),如果数据被计算并选择为令牌B,那么Cassandra尝试插入Node2和Node3和你得到一致性错误,因为它无法插入Node3。
因此,要插入,必须将复制增加到3或将一致性降低到1。
要了解有关一致性的更多信息,请参阅此文档https://docs.datastax.com/en/cassandra/2.1/cassandra/dml/dml_config_consistency_c.html
答案 1 :(得分:2)
轻量级事务需要QUORUM一致性级别,如果不可用节点是受影响密钥的副本,则无法达到该级别。这里的相关内容是可用副本的数量,而不是群集中的节点数量。