Cassandra群集上的数据分区和复制

时间:2018-08-10 19:45:46

标签: database cassandra nosql cassandra-3.0

我有一个3节点的Cassandra集群,RF = 3。现在,当我执行nodetool status时,集群中每个节点的拥有权为100%。

但是当集群中有5个节点时,RF = 3。 拥有率为60%(如下图所示)。

现在,根据我的理解,分区程序将计算与第一个副本节点相对应的哈希,并且还将根据其他节点上的RF复制数据。 现在我们有一个5节点群集,RF是3。

3个节点是否应平均拥有所有数据(100%),因为分区程序将按照参与策略指向一个节点,然后将相同的数据复制到等于RF-1的其余节点上?就像数据是均匀分布在所有节点(5)上一样,即使RF为3。

enter image description here

编辑1

根据我的理解,每个节点拥有约60%(拥有)的原因是因为RF为3。这意味着每行将有3个副本。这意味着将有300%的数据。现在,群集中有5个节点,分区程序将使用默认的随机哈希算法,该算法将在群集中的所有节点之间平均分配数据。

但是现在的问题是,即使RF为3,我们也检查了集群中的所有节点,并且所有节点都包含所有数据。

Edit2

@Aaron我按照注释中的指示进行了操作。我创建了一个具有3个节点的新集群。

enter image description here

我创建了一个键空间“测试”,并将类设置为simplestrategy,将RF设置为2。

enter image description here

然后我创建了一个具有分区键(id,name)的表“ emp”。

enter image description here

现在,我在第一个节点中插入了一行。

根据您的解释,它应该位于2个节点中,RF = 2。

但是当我登录到所有3个节点时,我可以看到在所有节点中都复制了该行。

我认为,由于密钥空间已在所有节点中复制,因此数据也正在复制。

2 个答案:

答案 0 :(得分:2)

存在的实际数据不会(完全)影响所有权百分比。您可以将新节点添加到单个节点群集(RF = 1)中,它会立即说每个节点的50%。

所有权百分比纯粹是节点负责的令牌范围的百分比。添加节点后,将重新计算令牌范围,但是直到流事件发生,数据才真正移动。同样,直到cleanup才真正从其原始节点删除数据。

例如,如果您有一个3节点群集,且RF为3,则每个节点将为100%。添加一个节点(RF = 3),所有权百分比下降到大约75%。添加第5个节点(同样,使RF = 3),每个节点的所有权正确地下降到大约3/5或60%。同样,RF为3时,每个节点都负责一组主要,次要和三次令牌范围。

  

默认的随机哈希算法,它将在群集中的所有节点之间平均分配数据。

实际上,带有Murmur3分区程序的分布式哈希将均匀分布令牌范围, 不是 数据。这是一个重要的区别。如果您将所有数据都写入一个分区,那么我保证您不会获得均匀的数据分配。

答案 1 :(得分:1)

添加到其他节点时,不会自动清除复制到其他节点的数据-将新节点添加到集群后,需要在“旧”节点上调用nodetool cleanup。这将删除已移至其他节点的范围。