设置上下文: Cassandra当前实现了vnode。默认为256,可在cassandra.yaml文件中进行调整 据我了解,Vnode是令牌范围/哈希范围。例如。 [x ... y],其中y是vnode的令牌号。Cassandra中的每个物理节点都被分配了随机的256个令牌,并且这些令牌中的每个都是哈希/令牌范围的边界值。范围是2 ^ -63到2 ^ 63-1(murmur3具有分区程序的哈希值范围可能会生成)。到目前为止,很好。
问题: 1.令牌范围(vnode)是否为固定范围。设置后,此令牌范围将被复制到其他Cassandra节点,以满足复制因素,例如令牌范围(vnode)是一起出现的基本数据块(令牌)。仅在引导群集中新节点的情况下,此令牌范围(vnode)可能会破裂以分配给其他节点。
这个主张正确吗,vnode仅专用于给定的键空间? 可以归结为一个物理节点上的256个令牌。...当前有20个(例如)vnode属于“系统”键空间,有80个vnode(例如)属于test_ks。
如果我错了,请纠正我。 我一直在关注以下博客和视频,以了解这一概念:
https://www.scribd.com/document/253239514/Virtual-Nodes-Strategies-for-Apache-Cassandra
https://www.youtube.com/watch?v=GddZ3pXiDys&t=11s
预先感谢
答案 0 :(得分:1)
没有固定的令牌范围,令牌只是随机生成的。这是实施vnode的原因之一-想法是,如果有更多令牌,则生成的令牌范围更有可能在节点之间更均匀地分布。
最近在3.0中改进了令牌生成,从而使Cassandra可以更智能地放置新令牌(请参见CASSANDRA-7032)。您还可以手动配置令牌(请参阅initial_token),尽管在计划扩展集群时,要使事情保持平衡可能会很棘手,除非您计划将节点数加倍。
集群中的令牌总数是集群中的节点数乘以每个节点的vnode数。
关于副本的放置,分区的第一个副本放置在拥有该分区令牌的节点中。附加的 n 副本顺序放置在同一数据中心中环中的下一个 n 节点上。令牌和键空间之间没有关系。
当新的写入操作进入协调器节点时,协调器节点通过散列分区键来确定哪个节点拥有该分区。请注意,为获得更好的性能,实际上可以由驱动程序完成,而不是使用TokenAwarePolicy。协调器将写操作发送到拥有该分区的节点,如果需要复制数据,则协调器节点还将副本复制到令牌空间中的下两个节点中。
例如,假设我们有3个节点,每个节点都有一个令牌:node1: 10
,node2: 20
和node3: 30
。如果我们将分区键哈希为22
的记录写入具有RF3的键空间,则第一个副本将转到node2,第二个副本将转到node3,第三个副本将转到node1。请注意,每个副本都同样有效-除了“第一”副本恰好存储在“第一”副本节点上之外,没有什么特别的。
Vnode不会更改此过程,它们只是通过允许每个节点具有多个令牌来拆分每个节点的令牌范围。例如,如果我们的集群现在每个节点有2个vnode,则它看起来可能像这样:node1: 10, 25
,node2: 20, 3
和node3: 30, 21
。现在,我们将散列到22
的写入内容转到node3
(因为它拥有21-24
的范围),而副本则转到node1
和node2
。 / p>