我有一个Riak集群(3个节点,64个分区,n_val = 3),但我发现对于某些对象,它们的托管分区/ vnode不会分布在3个节点上。在某些情况下,其中2个在1个节点上,第3个在第二个节点上。这与我的理解(此处链接:http://docs.basho.com/riak/kv/2.1.4/learn/concepts/clusters/)相反,数据以分区位于不同服务器上的方式分布在分区上。在Riak如何工作方面,请问我在这里找不到什么?感谢...
答案 0 :(得分:2)
当在特定存储桶/密钥上存储值时,Riak会对存储桶/密钥对进行哈希处理以获得160位值,以确定应将其存储在何处。整个哈希空间被均匀地划分为由哈希空间中的索引标识的分区,这些分区被分配给物理节点。对于n_val = 3,该值存储在接下来的3个更高编号的分区中。
将节点加入群集时,Riak会尝试将分区分配给节点,以便将任何3个连续分区中只有一个分配给同一物理节点。
由于提升到160次幂的唯一素数因子是2,所以分区数也是2的幂。
哈希空间被视为一个环,因此分区0紧跟在编号最高的分区之后。
没有可能配置为3个节点分配2个分区的功率而不违反“任何3个连续分区中的1个”规则。群集计划应包含类似于“并非所有副本将位于不同节点上”的消息,以通知您在设置群集时发生的情况。
答案 1 :(得分:0)
答案就在链接中了!
节点 尝试 按周围的时间间隔声明其分区,以便成员节点之间存在均匀分布,并且没有节点负责多个副本一把钥匙