关于cassandra vnode的理解-marsyoung.,vnode-marsyoung
上面的图中,是没有虚拟节点的,下面的图中,是有虚拟节点的。 图一中的A,B,C,D,E,F每个字母可以理解为一个数据集合,node 1,node2 等等则代表节点。 数据是如何放入这些node的呢,每个数据有对应的partition key,根据这个key值会计算出一个token,多个key值根据hash算法得到的token是同一个,假设这个Key值的集合是A,那么用node 1来对应这个token,那么集合A的数据就应该存到node1中,node和token是一对一的。 具体是:如果根据key值计算出的token值 大于 node1所对应的token值,小于node2所对应的token值,那么它就应该放在Node2中。同时,这个数据会被复制到顺时针的两个节点中,那么就是Node3和Node4,那么这个数据对应的就是图一中的B。
好吧,这个环其实是一个数据范围环,或者叫一致性hash环。这个环是怎么形成的呢?是由一致性hash来的。规定一个node对应了一个token,而这个token是根据hash算法算出来的,那么这个token对应的就是一定的哈希值范围,同理一个node对应的也就是一定的哈希值范围。每个哈希值假设是一个点,那么哈希值范围就是一条线,多个哈希值范围按照值的大小顺序排列,并且把代表最大值和最小值的点合并就组成环了。 这个环的作用是干啥呢? 首先,每个node指定一个token后,则对应环上的一段,所以node在环上的位置就固定了。所以第一个作用就是指定位置。 然后,就是给node上面分配数据了,假设没有备份,那么图一中A的位置就是Node1的位置,B就是Node2的位置。一次类推。 那么对应的数据A来了就放Node1 ,B来了就放Node2.以此类推。 而实际上数据还是要备份的,怎么备份呢,假设A来了,那么放到Node1之后,同时在这个环中找接下来的两个Node,每个放一份。图一中,每个数据都是备份3份。
在cassandra1.2以前,每个node只对应一个token. 这个token决定了node在环中的位置和它的那部分根据hash值算出来的数据。 之后,cassandra允许每个node有多个token. 那么有个多个token之后,vnode就出现了。其实是个虚拟的概念,实际上物理层还是一个node。换句话说,原来一个token对应一个node,现在一个node要对应多个token,并且还是按照一致性哈希去分配数据,那么每个token对应的则是一个vnode.
在cassandra1.2以前,每个node只对应一个token. 这个token决定了node在环中的位置和它的那部分根据hash值算出来的数据。 之后,cassandra允许每个node有多个token. 那么有个多个token之后,vnode就出现了。其实是个虚拟的概念,实际上物理层还是一个node。换句话说,原来一个token对应一个node,现在一个node要对应多个token,并且还是按照一致性哈希去分配数据,那么每个token对应的则是一个vnode.
在cassandra1.2以前,每个node只对应一个token. 这个token决定了node在环中的位置和它的那部分根据hash值算出来的数据。 之后,cassandra允许每个node有多个token. 那么有个多个token之后,vnode就出现了。其实是个虚拟的概念,实际上物理层还是一个node。换句话说,原来一个token对应一个node,现在一个node要对应多个token,并且还是按照一致性哈希去分配数据,那么每个token对应的则是一个vnode.
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。