我知道我们可以使用Cassandra的虚拟节点工具,这样我们就可以防止将令牌(开始令牌)分配给集群的不同节点的额外开销。我们使用num_tokens,它的默认值是256。这些虚拟节点在分区方面有何不同?Cassandra是否为特定节点设置/分配令牌范围(最大和最小令牌)?
zdwk9cvp1#
什么是虚拟节点?在Cassandra 1.2之前,每个节点都被分配到一个特定的令牌范围。现在,每个节点都可以支持多个非连续的令牌范围。节点不是负责一个大范围的令牌,而是负责许多较小的范围。以这种方式,一个物理节点实质上托管许多较小的“虚拟”节点。这些虚拟节点在分区方面有何不同?看看这个博客中的图片:Virtual nodes in Cassandra 1.2。
在每个物理节点上具有许多较小的令牌范围(节点)允许更均匀地分布数据。当您将物理节点添加到群集时,这一点变得很明显,因为不再需要重新平衡(手动重新分配令牌范围)。正如Virtual Node documentation声明的那样,新节点“承担来自集群中其他节点的偶数部分数据的责任”。Cassandra是否为特定节点设置/分配令牌范围(最大和最小令牌)?是的,Cassandra预先确定每个虚拟节点的大小。但是,您可以控制分配给每个物理节点的虚拟节点数。假设您的物理节点都配置为默认的256个虚拟节点。如果您添加了一台比当前节点拥有更多资源的新机器,并且希望该机器处理更多负载,则可以将其配置为允许384个虚拟节点。同样,具有较少资源的机器可以被配置为支持较少数量的虚拟节点。
编辑20230628
我不明白vnode和partitioner之间的关系(让我们以murmur 3为例)。使用Murmur 3算法来计算VNode的令牌范围。分区键一旦创建就必须落在某个vnode上?是的如何确保此vnode在磁盘上有足够的空间?我们没有,但VNodes并没有改变这一点。像往常一样,DBA和Dev团队需要合作,预先适当地调整预期的计算资源使用量。但是,随着更多,更小的范围,生成的令牌应该更均匀地分布。如果太多分区键将落在同一个vnode上怎么办?然后将另一个节点添加到群集。节点添加操作将平分当前节点的令牌范围并将它们重新分配给其他节点。这与我们不使用VNodes的情况没有什么不同,尽管使用 * VNodes时出现问题的可能性要低得多。令牌创建算法与分区算法不同?是的!令牌分区算法是Murmur 3或MD5(RandomPartitioner)之一。Murmur 3令牌的创建比RandomPartitioner更快,因为在Java中交付的MD5哈希做了很多我们不需要的其他事情。
1条答案
按热度按时间zdwk9cvp1#
什么是虚拟节点?
在Cassandra 1.2之前,每个节点都被分配到一个特定的令牌范围。现在,每个节点都可以支持多个非连续的令牌范围。节点不是负责一个大范围的令牌,而是负责许多较小的范围。以这种方式,一个物理节点实质上托管许多较小的“虚拟”节点。
这些虚拟节点在分区方面有何不同?
看看这个博客中的图片:Virtual nodes in Cassandra 1.2。
在每个物理节点上具有许多较小的令牌范围(节点)允许更均匀地分布数据。当您将物理节点添加到群集时,这一点变得很明显,因为不再需要重新平衡(手动重新分配令牌范围)。正如Virtual Node documentation声明的那样,新节点“承担来自集群中其他节点的偶数部分数据的责任”。
Cassandra是否为特定节点设置/分配令牌范围(最大和最小令牌)?
是的,Cassandra预先确定每个虚拟节点的大小。但是,您可以控制分配给每个物理节点的虚拟节点数。假设您的物理节点都配置为默认的256个虚拟节点。如果您添加了一台比当前节点拥有更多资源的新机器,并且希望该机器处理更多负载,则可以将其配置为允许384个虚拟节点。同样,具有较少资源的机器可以被配置为支持较少数量的虚拟节点。
编辑20230628
我不明白vnode和partitioner之间的关系(让我们以murmur 3为例)。
使用Murmur 3算法来计算VNode的令牌范围。
分区键一旦创建就必须落在某个vnode上?
是的
如何确保此vnode在磁盘上有足够的空间?
我们没有,但VNodes并没有改变这一点。像往常一样,DBA和Dev团队需要合作,预先适当地调整预期的计算资源使用量。但是,随着更多,更小的范围,生成的令牌应该更均匀地分布。
如果太多分区键将落在同一个vnode上怎么办?
然后将另一个节点添加到群集。节点添加操作将平分当前节点的令牌范围并将它们重新分配给其他节点。这与我们不使用VNodes的情况没有什么不同,尽管使用 * VNodes时出现问题的可能性要低得多。
令牌创建算法与分区算法不同?
是的!令牌分区算法是Murmur 3或MD5(RandomPartitioner)之一。Murmur 3令牌的创建比RandomPartitioner更快,因为在Java中交付的MD5哈希做了很多我们不需要的其他事情。