Riak 不以循环方式跨实例存储数据
Riak not storing data in a round-robin manner across instances
我有一个 Riak 集群(3 个节点,64 个分区,n_val = 3)但我发现对于某些对象,它们的托管分区/vnode 没有分布在 3 个节点上。在某些情况下,其中 2 个在 1 个节点上,第三个在第二个节点上。这与我的理解(link 此处:http://docs.basho.com/riak/kv/2.1.4/learn/concepts/clusters/)相反,数据以分区位于不同服务器上的方式分布在多个分区中。关于 Riak 的工作原理,我是否遗漏了什么?谢谢...
答案已经在 link 中了!
节点尝试围绕环以一定间隔声明它们的分区,以便在成员节点之间均匀分布并且没有节点负责一个键的多个副本
当在特定 bucket/key 存储一个值时,Riak 对 bucket/key 对进行哈希处理以获得一个 160 位的值,以确定它应该存储在哪里。整个散列space被平均划分为分区,由散列space中的索引标识,分配给物理节点。对于 n_val=3,该值存储在接下来的 3 个更高编号的分区中。
在将节点加入集群时,Riak 会尝试将分区分配给节点,这样任何 3 个连续分区中只有一个分配给同一物理节点。
由于2的160次方的唯一质因数是2,所以分区数也是2的次方
散列 space 被视为一个环,因此分区 0 紧跟在编号最高的分区之后。
不可能在不违反 'only 1 of any 3 consecutive partitions ' 规则的情况下将 2 个分区的幂分配给 3 个节点。集群计划应该包含类似于 "not all replicas will be on distinct nodes" 的消息,让您知道在您设置集群时发生的情况。
我有一个 Riak 集群(3 个节点,64 个分区,n_val = 3)但我发现对于某些对象,它们的托管分区/vnode 没有分布在 3 个节点上。在某些情况下,其中 2 个在 1 个节点上,第三个在第二个节点上。这与我的理解(link 此处:http://docs.basho.com/riak/kv/2.1.4/learn/concepts/clusters/)相反,数据以分区位于不同服务器上的方式分布在多个分区中。关于 Riak 的工作原理,我是否遗漏了什么?谢谢...
答案已经在 link 中了!
节点尝试围绕环以一定间隔声明它们的分区,以便在成员节点之间均匀分布并且没有节点负责一个键的多个副本
当在特定 bucket/key 存储一个值时,Riak 对 bucket/key 对进行哈希处理以获得一个 160 位的值,以确定它应该存储在哪里。整个散列space被平均划分为分区,由散列space中的索引标识,分配给物理节点。对于 n_val=3,该值存储在接下来的 3 个更高编号的分区中。
在将节点加入集群时,Riak 会尝试将分区分配给节点,这样任何 3 个连续分区中只有一个分配给同一物理节点。
由于2的160次方的唯一质因数是2,所以分区数也是2的次方
散列 space 被视为一个环,因此分区 0 紧跟在编号最高的分区之后。
不可能在不违反 'only 1 of any 3 consecutive partitions ' 规则的情况下将 2 个分区的幂分配给 3 个节点。集群计划应该包含类似于 "not all replicas will be on distinct nodes" 的消息,让您知道在您设置集群时发生的情况。