Cassandra vnodes副本

时间:2018-10-27 13:10:09

标签: cassandra

设置上下文: Cassandra当前实现了vnode。默认为256,可在cassandra.yaml文件中进行调整 据我了解,Vnode是令牌范围/哈希范围。例如。 [x ... y],其中y是vnode的令牌号。Cassandra中的每个物理节点都被分配了随机的256个令牌,并且这些令牌中的每个都是哈希/令牌范围的边界值。范围是2 ^ -63到2 ^ 63-1(murmur3具有分区程序的哈希值范围可能会生成)。到目前为止,很好。

问题: 1.令牌范围(vnode)是否为固定范围。设置后,此令牌范围将被复制到其他Cassandra节点,以满足复制因素,例如令牌范围(vnode)是一起出现的基本数据块(令牌)。仅在引导群集中新节点的情况下,此令牌范围(vnode)可能会破裂以分配给其他节点。

  1. 基于最后一个命题(例如,最后一个命题是正确的)。 然后,vnode必须仅包含属于给定键空间的令牌。 因为每个键空间(列族/表的容器)都有定义的复制策略和复制因子。而且,Cassandra集群中键空间的复制因子很可能会发生变化。 考虑一个例子。 “ system_schema”键空间的RF为1,而我用RF 3创建了键空间“ test_ks”。如果一行system_schema键空间的令牌标记为2(例如),而我test_ks的行标记令牌为5(例如)。 这两个令牌不能放置在相同的令牌范围内(vnode)。如果vnode是令牌范围的一致块,则说令牌2和5属于令牌号为10的vnode。因此,必须将vnode 10放置在3个不同的物理节点上,以满足test_ks的RF = 3,但是我们不必要放置令牌在3个不同的节点上有2个,其RF假定为1。

这个主张正确吗,vnode仅专用于给定的键空间? 可以归结为一个物理节点上的256个令牌。...当前有20个(例如)vnode属于“系统”键空间,有80个vnode(例如)属于test_ks。

  1. 再次基于以上命题,这意味着每个节点都应具有集群中当前可用的键空间级vnode的信息。 这样,当对密钥空间进行新写入时,协调器节点将为该密钥空间定位集群中的所有vnode,并为新行分配一个令牌号,该令牌号在那些密钥空间的令牌范围内。既然如此,我可以知道整个集群/或给定节点中当前有多少个vnode属于一个键空间。

如果我错了,请纠正我。 我一直在关注以下博客和视频,以了解这一概念:

https://www.scribd.com/document/253239514/Virtual-Nodes-Strategies-for-Apache-Cassandra

https://www.youtube.com/watch?v=GddZ3pXiDys&t=11s

预先感谢

1 个答案:

答案 0 :(得分:1)

没有固定的令牌范围,令牌只是随机生成的。这是实施vnode的原因之一-想法是,如果有更多令牌,则生成的令牌范围更有可能在节点之间更均匀地分布。

最近在3.0中改进了令牌生成,从而使Cassandra可以更智能地放置新令牌(请参见CASSANDRA-7032)。您还可以手动配置令牌(请参阅initial_token),尽管在计划扩展集群时,要使事情保持平衡可能会很棘手,除非您计划将节点数加倍。

集群中的令牌总数是集群中的节点数乘以每个节点的vnode数。

关于副本的放置,分区的第一个副本放置在拥有该分区令牌的节点中。附加的 n 副本顺序放置在同一数据中心中环中的下一个 n 节点上。令牌和键空间之间没有关系。

当新的写入操作进入协调器节点时,协调器节点通过散列分区键来确定哪个节点拥有该分区。请注意,为获得更好的性能,实际上可以由驱动程序完成,而不是使用TokenAwarePolicy。协调器将写操作发送到拥有该分区的节点,如果需要复制数据,则协调器节点还将副本复制到令牌空间中的下两个节点中。

例如,假设我们有3个节点,每个节点都有一个令牌:node1: 10node2: 20node3: 30。如果我们将分区键哈希为22的记录写入具有RF3的键空间,则第一个副本将转到node2,第二个副本将转到node3,第三个副本将转到node1。请注意,每个副本都同样有效-除了“第一”副本恰好存储在“第一”副本节点上之外,没有什么特别的。

Vnode不会更改此过程,它们只是通过允许每个节点具有多个令牌来拆分每个节点的令牌范围。例如,如果我们的集群现在每个节点有2个vnode,则它看起来可能像这样:node1: 10, 25node2: 20, 3node3: 30, 21。现在,我们将散列到22的写入内容转到node3(因为它拥有21-24的范围),而副本则转到node1node2。 / p>