Erlang riak_核心vnode分布

Erlang riak_核心vnode分布,erlang,riak,Erlang,Riak,我在2节点集群上安装了riak_core应用程序。应用程序的模板生成如下 当我查看跨2个节点的VNode分布时: {ok, Ring} = riak_core_ring_manager:get_my_ring(), riak_core_ring:chash(ring). ,我得到这个: {64, [{0, 'node1@127.0.0.1'}, {22835963083295358096932575511191922182123945984, 'node1@127.0.0.1'},

我在2节点集群上安装了riak_core应用程序。应用程序的模板生成如下

当我查看跨2个节点的VNode分布时:

{ok, Ring} = riak_core_ring_manager:get_my_ring(), 
riak_core_ring:chash(ring).
,我得到这个:

{64,
 [{0, 'node1@127.0.0.1'},
  {22835963083295358096932575511191922182123945984, 'node1@127.0.0.1'},
  {45671926166590716193865151022383844364247891968, 'node2@127.0.0.1'},
  {68507889249886074290797726533575766546371837952, 'node2@127.0.0.1'},
  {91343852333181432387730302044767688728495783936, 'node1@127.0.0.1'},
  {114179815416476790484662877555959610910619729920, 'node1@127.0.0.1'},
  {137015778499772148581595453067151533092743675904, 'node2@127.0.0.1'},
  {159851741583067506678528028578343455274867621888, 'node2@127.0.0.1'},
  {182687704666362864775460604089535377456991567872, 'node1@127.0.0.1'},
  {205523667749658222872393179600727299639115513856, 'node1@127.0.0.1'},
  {228359630832953580969325755111919221821239459840, 'node2@127.0.0.1'}, 
...............<the rest of vnodes>.......................
]
}
{64,
[{0, 'node1@127.0.0.1'},
{22835963083295358096932575511191922182123945984, 'node1@127.0.0.1'},
{45671926166590716193865151022383844364247891968, 'node2@127.0.0.1'},
{68507889249886074290797726533575766546371837952, 'node2@127.0.0.1'},
{91343852333181432387730302044767688728495783936, 'node1@127.0.0.1'},
{114179815416476790484662877555959610910619729920, 'node1@127.0.0.1'},
{137015778499772148581595453067151533092743675904, 'node2@127.0.0.1'},
{159851741583067506678528028578343455274867621888, 'node2@127.0.0.1'},
{182687704666362864775460604089535377456991567872, 'node1@127.0.0.1'},
{205523667749658222872393179600727299639115513856, 'node1@127.0.0.1'},
{228359630832953580969325755111919221821239459840, 'node2@127.0.0.1'}, 
......................................
]
}
所以vnode成对进行,这样两个相邻的分区就属于同一个物理节点。从文档中,我希望相邻的分区属于不同的物理节点。如果有人能详细说明以上内容是否是一个bug或功能,或者是我这边的错误配置,我将不胜感激

问候,,
Boris

Riak_core将默认为4(at)的目标值。这是模块使用的预列表大小

索赔算法将尝试确保在任何
target\n\u val
连续vnode链中,没有2个节点位于同一节点上


如果您在app.config中将target_n_val设置为2,则不会将相邻的VNode放在同一节点上,这应该会做得更好。

我还通过设置以下内容获得了所有相邻VNode驻留在不同物理节点上的分布:

{wants_claim_fun, {riak_core_claim, wants_claim_v3}},
{choose_claim_fun, {riak_core_claim, choose_claim_v3}}
对于riak_core应用程序


在这种情况下,“target_n_val”似乎不会影响分发。

Riak文档强烈建议。是的,但我不确定该建议是否适用于所有Riak_核心应用程序。我不打算使用riak KV,但只使用riak_core进行具体的配电管理。谢谢!成功了。我仍然不完全理解:为什么riak_core会以这样一种方式分发Vnode,分区不会以自然的方式驻留在节点上(或者至少是以多个riak书籍和文档中显示的方式)?当从1节点设置到2节点设置时,从一个节点到另一个节点进行切换所需的工作量似乎是相同的。当您运行
riak admin cluster plan
让您知道索赔算法无法确保没有节点时,您应该收到
警告:并非所有副本都将位于不同的节点上已在预处理列表中复制。