新节点加入时的cassandra数据重新分配

时间:2015-03-03 15:49:42

标签: cassandra cassandra-2.0

我是Cassandra的初学者。我想了解当新节点加入现有集群时如何分配(重新)分发数据。

让我们假设,在10个节点的集群中有100个行密钥。另外,为简单起见,我们假设使用散列函数将行均匀分布到10个节点,即节点N1具有从1到10的行键,节点N2具有行键11到20,依此类推。

现在,如果新节点N11加入群集,如何在11个节点上继续保持相同散列函数的数据分发?原因是哈希函数的范围早先限于10个节点。添加新节点后,需要更改散列函数的范围。

考虑到上述情况,如何查找旧记录(当只有10个节点时)成功?

1 个答案:

答案 0 :(得分:3)

在Cassandra 1.2之前,向集群添加节点意味着拆分令牌范围。例如,哈希函数产生的值介于1和100之间:

  • 之前:1-10,11-20,21-30,31-40,41-50,51-60,61-70,71-80,81-90,91-100
  • 之后:1-5, 6-10 ,11-20,21-30,31-40,41-50,51-60,61-70,71-80,81- 90,91-100

第一个节点将其令牌范围的一部分提供给新节点(以粗体显示)。

每个节点都维护所有节点的映射,并知道哪个节点处理哪些令牌范围(包括副本)。当从群集中添加/删除节点时,其他节点会通过互相闲聊来获知更改。

Since Cassandra 1.2, with the addition of virtual nodes,群集的每个节点都将其令牌范围的一部分提供给新节点。因此,每个节点或多或少地保持相同的令牌范围宽度和相同的负载。