我是Cassandra的新手,我对节点和vnodes的概念感到困惑。
这是我读过的内容:Cassandra中元素的层次结构是: 集群 - 数据中心 - 机架式服务器节点 该节点被描述为服务器内的数据存储层,服务器是包含Cassandra软件的实际物理机器。
根据我的理解,在我看来,在某些情况下,vnode与节点不同/更有效。
但是我将它们置于此层次结构中时遇到了问题。
vnode只是上述层次结构中的另一种节点。 要么 是在引入vnode的概念之后,上面层次结构中称为服务器的元素现在称为节点,上面层次结构中称为节点的元素现在称为vnode!
答案 0 :(得分:3)
在物理节点之后,您可以将vnodes视为您所描述的层次结构中的下一步。
当您调整群集大小并使数据分发更加灵活时,Vnodes可以帮助您基于令牌重新分配数据。
来自datastax网站的一个很好的解释:https://www.datastax.com/dev/blog/virtual-nodes-in-cassandra-1-2
编辑:在旧版本的Cassandra中,令牌被分割为每个服务器都有一个令牌(范围)的方式,并且它基于复制因子在物理机器之间复制。 vnodes体系结构(也用于riak)实现了“节点”层的虚拟化,将环分成大量令牌范围(vnode),每个物理节点(cassandra服务)上运行了多个vnode。请查看提供的链接,对示例有非常好的解释。答案 1 :(得分:2)
在Cassandra 1.2之前,每个节点都分配了一个令牌。因此,添加/替换节点意味着对cassandra.yaml中的initial_token属性进行了一些手动计算,并且还有重要的数据在集群中移动。
Cassandra的1.2版本也引入了虚拟节点的概念 简称为vnodes。而不是将单个令牌分配给 节点,令牌范围被分解为多个较小的范围。每 然后为物理节点分配多个令牌。默认情况下,每个节点 将分配256个这些令牌,这意味着它包含256个 虚拟节点。默认情况下,自2.0以来已启用虚拟节点。
来自Cassandra,权威指南,Jeff Carpenter& Eben Hewitt。
Vnode很好,因为您可以通过调整cassandra.yaml文件中的num_tokens属性来调整每个Cassandra实例(节点)上的vnode数量,具体取决于计算机功能。
vnodes的令牌分配由org.apache.cassandra.dht.tokenallocator.ReplicationAwareTokenAllocator类计算。