我对cassandra在向集群添加新节点时如何确保一致性感到有点困惑。我知道cassandra将进行范围移动,并将数据流式传输到新添加的节点。问题是,cassandra是否也将辅助副本的数据流式传输到新添加的节点。
例如,我们在集群中有4个节点,RF=3 (A,B,C,D) A(x=1,y=2),B(x=1,y=3),C(x=1),D(y=2)。分区键"x“将由A,B,C持有,而分区键"y”将由D,A,B持有。如果我在A和B之间添加一个新节点A‘,我认为它将流式传输来自A的分区"x“。但是它是否也将流式传输来自B或D的分区"y”?
如果它流分区"y",cassandra会选择从哪个节点流?来自official document的。它将从主副本D进行流式传输。如果是这种情况,当D具有陈旧数据时(在添加新节点之前可以,因为A和B以及满足仲裁的最新数据),在流式传输之后,可以从D和A‘查询出陈旧数据。我说的对吗?
发布于 2016-12-22 04:19:15
Cassandra将从放弃令牌所有权的节点流式传输信息
也就是说,在您的示例中: RF=3 (A,B,C,D) A(x=1,y=2),B(x=1,y=3),C(x=1),D(y=2)。如果E加在A之间,B和A将放弃拥有X给E,B将放弃拥有y。然后A将把它的X的值发送给E,B将它的Y的值发送给E-所以最终的结果是A(y=2),E(X=1,y=3),B(x=1),C(x=1),D(y=2)。
请注意,添加后,节点A有一个陈旧的X副本,B有一个陈旧的Y副本,他们应该运行'nodetool cleanup‘来清除它。
发布于 2016-12-21 15:44:27
你可能是对的。建议在添加新节点之前运行nodetool修复,这样集群中不会出现不一致。
https://stackoverflow.com/questions/41255811
复制相似问题