出于某些测试目的,我想在我的测试cassandra集群中打破数据的一致性,包括两个数据中心。
我假设如果我使用等于LOCAL_QUORUM
或LOCAL_ONE
的一致性等级,我将实现此目的。我们假设我有一个属于node11
的cassandra节点DC1
:
cqlsh node11
CONSISTENCY LOCAL_QUORUM;
INSERT INTO test.test (...) VALUES (...) ;
但事实上,数据出现在所有节点中。即使是一致性级别node22
,我也可以从属于DC2
的{{1}}中读取它。我已仔细检查过:LOCAL_*
向我显示了两个数据中心,nodetool
当然属于node11
,而DC1
属于node22
。
我的密钥空间DC2
配置如下:
test
我分别在每个DC中有两个节点。
我的问题:
在我看来,我错误地理解了这些一致性水平的想法。事实上,它们不会阻止将数据写入不同的DC,而只是要求在当前数据中心中显示至少的数据。这是正确的理解吗?
更重要的是:当我在一个群集中的两个数据中心存储不同的数据时,是否可以执行此类技巧并实现这种“破坏”的一致性?
(目前我认为实现这一目标的唯一方法是打破环并且不允许来自一个DC的节点知道来自另一个DC的节点的任何信息,但我不喜欢这个解决方案)。
答案 0 :(得分:3)
即使在低一致性级别,写入仍然会发送给所有人 书面密钥的复制品,甚至是其他数据中心的复制品。该 一致性级别仅确定需要多少副本 回应说他们收到了写信。
https://docs.datastax.com/en/archived/cassandra/2.0/cassandra/dml/dml_config_consistency_c.html
答案 1 :(得分:0)
此建议仅用于测试场景以破坏2个DC之间的数据一致性。 (没有尝试但基于我的理解应该工作)
您可以重复这些步骤并在DC2中使用不同的值插入数据,从而保持DC1不变,因此相同的数据在DC1和DC2中具有不同的值。