【发布时间】:2019-12-06 20:44:51
【问题描述】:
我们有一个 3 节点 Cassandra 集群,我们创建了一个复制因子为 1 的密钥空间。在我们将密钥空间的复制因子更改为 2(并对该密钥空间执行 nodetool 修复)后,我看到它共享一个具有所有三个节点的 Merkle 树。
我的问题是,为什么它会与 3 个节点共享,而不仅仅是与 2 个节点共享?
【问题讨论】:
标签: cassandra
我们有一个 3 节点 Cassandra 集群,我们创建了一个复制因子为 1 的密钥空间。在我们将密钥空间的复制因子更改为 2(并对该密钥空间执行 nodetool 修复)后,我看到它共享一个具有所有三个节点的 Merkle 树。
我的问题是,为什么它会与 3 个节点共享,而不仅仅是与 2 个节点共享?
【问题讨论】:
标签: cassandra
触发令牌重新分配时,必须联系所有节点。这是必要的,因为所有节点必须分担相同数量的令牌范围责任。为了实现这一点,令牌范围责任将根据每个节点而改变;尤其是对于这么小的集群。
举例来说,您有一个 RF 为 1 的 3 节点集群。这意味着每个节点负责总令牌的 33.33%(-2^63 到 2^63 -1)。
通过将 RF 从 1 增加到 2,同时保持节点数量不变,您实际上是加倍集群将存储的数据量。因此,每个节点现在负责 66.67% 的数据。
如果您将 RF 进一步增加到 3,那么每个节点将负责 100% 的数据,有效地将所有数据存储在每个节点上。
【讨论】:
它与所有其他节点通信的原因是,一些行将从节点 1 到节点 2,另一些从节点 1 到节点 3,一些从节点 2 到节点 1,等等。每一行都可能被重新分配,并且它们开始/结束的位置包括数据中心中的整个节点。每行都重新计算到它所属的位置。那有意义吗?
【讨论】: