2015-02-21 3 views
1

У меня есть установка с приложением riak_core на кластере с двумя узлами. Шаблон для приложения был создан следующим https://github.com/rzezeski/try-try-try/tree/master/2011/riak-core-first-multinoderiak_core vnode distribution

Когда я смотрю на распределении vnodes через 2 узлов:

{ok, Ring} = riak_core_ring_manager:get_my_ring(), 
riak_core_ring:chash(ring). 

, я получаю это:

{64, 
[{0, '[email protected]'}, 
    {22835963083295358096932575511191922182123945984, '[email protected]'}, 
    {45671926166590716193865151022383844364247891968, '[email protected]'}, 
    {68507889249886074290797726533575766546371837952, '[email protected]'}, 
    {91343852333181432387730302044767688728495783936, '[email protected]'}, 
    {114179815416476790484662877555959610910619729920, '[email protected]'}, 
    {137015778499772148581595453067151533092743675904, '[email protected]'}, 
    {159851741583067506678528028578343455274867621888, '[email protected]'}, 
    {182687704666362864775460604089535377456991567872, '[email protected]'}, 
    {205523667749658222872393179600727299639115513856, '[email protected]'}, 
    {228359630832953580969325755111919221821239459840, '[email protected]'}, 
...............<the rest of vnodes>....................... 
] 
} 

Так vnodes идет в пары, так что 2 смежных раздела принадлежат одному и тому же физическому узлу. Из документации я ожидал бы, что смежные разделы будут принадлежать различным физическим узлам. Я был бы признателен, если бы кто-нибудь мог уточнить, является ли выше ошибка или функция, или, может быть, неправильная конфигурация с моей стороны.

С уважением, Борис

+0

Документация Riak настоятельно предлагает [минимум 5 узлов] (http://basho.com/why-your-riak-cluster-should-have-at-least-five-nodes/). –

+0

Да, но я не был уверен, применима ли эта рекомендация ко всем приложениям riak_core в целом. Я не планирую использовать riak KV, но только riak_core для конкретного управления распределением. –

ответ

2

Riak_core по умолчанию будет target_n_val 4 (в https://github.com/basho/riak_core/blob/riak_core-0.14.2/ebin/riak_core.app#L73). Это размер preflist, используемый модулем riak_core_claim.

Алгоритм претензии будет пытаться гарантировать, что в любой цепочке из target_n_val последовательных vnodes, которые не имеют 2, находятся на одном узле.

Если вы установили target_n_val в 2 в свой app.config, он должен лучше справиться с тем, чтобы не размещать соседние vnodes на одном узле.

+0

Спасибо! Это сработало. Я все еще не совсем понимаю: зачем riak_core распространять vnodes таким образом, чтобы разделы не находились на узлах естественным образом (или, по крайней мере, так, как это показано в нескольких книгах и документации Riak)? Объем работы, выполняемой для пересылки эстафетной передачи из одного узла в другой при переходе от установки с 1 узлом к ​​2 узлам, кажется одинаковым. –

+0

Вы должны были получить «ПРЕДУПРЕЖДЕНИЕ: не все реплики будут на разных узлах», когда вы запускаете «план кластера riak-admin», чтобы вы знали, что алгоритм заявки не смог обеспечить, чтобы ни один узел не дублировался в префиксе. – Joe

0

Я также получил распределение, где все смежные vnodes находятся на разных физических узлах, установив:

{wants_claim_fun, {riak_core_claim, wants_claim_v3}}, 
{choose_claim_fun, {riak_core_claim, choose_claim_v3}} 

для riak_core приложения.

'target_n_val', по-видимому, не влияет на распределение в этом случае.