【问题标题】:cassandra data redistribution when new nodes join新节点加入时的 cassandra 数据重新分配
【发布时间】:2015-03-04 03:23:44
【问题描述】:

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

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

现在,如果一个新节点 N11 加入集群,如何在保持相同哈希函数的 11 个节点上继续数据分布?原因是哈希函数的范围早先被限制在 10 个节点。并且在添加新节点后,需要改变哈希函数的范围。

考虑到上述情况,如何查找旧记录(仅存在 10 个节点时)会成功?

【问题讨论】:

    标签: cassandra cassandra-2.0


    【解决方案1】:

    在 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,集群的每个节点都将其令牌范围的一部分提供给新节点。因此,每个节点或多或少都保持相同的令牌范围宽度和相同的负载。

    【讨论】:

    • 我猜在您的示例中您执行了 2 次操作 - 添加一个初始标记为 8 的新节点,并将先前第二个节点的标记从 11 移动到 14。也许为了清楚起见,您不需要添加第二次操作,使其像 1-5、6-10、11-20 等。
    • 新物理节点是否仅从一个物理节点获取虚拟节点?它不会从所有现有的物理节点中获得几乎相等数量的虚拟节点吗?我的意思是,在我的示例中,新物理节点将从现有物理节点中各获得 1 个虚拟节点。
    猜你喜欢
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    相关资源
    最近更新 更多