У меня есть кластер Riak (из 3 узлов с 64 разделами и n_val = 3), но я обнаружил, что для некоторых объектов их хостинговые разделы/vnodes не распространяются через 3 узла. В некоторых случаях 2 из них находятся на 1 узле, а третий - на втором узле. Это противоречит моему пониманию (ссылка здесь: http://docs.basho.com/riak/kv/2.1.4/learn/concepts/clusters/), что данные распределяются по разделам таким образом, что разделы находятся на разных серверах. Есть ли что-то, что мне не хватает здесь, пожалуйста, как работает Riak? Спасибо ...Riak не хранит данные циклически по всем экземплярам
ответ
При хранении значение в определенном ведре/ключе, Riak хэширует пару ковша/ключа, чтобы получить 160-битное значение, чтобы определить, где он должен храниться. Все хэш-пространство равномерно разделено на разделы, обозначенные индексом в хэш-пространстве, которые назначаются физическим узлам. Для n_val = 3 значение сохраняется в следующих 3 более высоких пронумерованных разделах.
При присоединении узлов к кластеру Riak пытается назначить разделы узлам таким образом, чтобы одному и тому же физическому узлу был назначен только один из трех последовательных разделов.
Поскольку единственный главный фактор 2 повышал до 160-я мощности равен 2, то количество разделов также сила 2.
Хэша пространство трактуется как кольцо, так что разбиение-непосредственно следует с наибольшим номером раздел.
Невозможно настроить назначение 2-х разделов на 3 узла без нарушения правила «только 1 из 3-х последовательных разделов». План кластера должен включать сообщение, похожее на «не все реплики будут на разных узлах», чтобы вы знали, что это происходит во время настройки кластера.
Ответ был там по ссылке уже!
Узлы попытка требовать их перегородки с интервалами вокруг кольца таким образом, что существует равномерное распределение среди узлов-членов, и что ни один узел не несет ответственность за более чем одной реплики ключа
Большое спасибо @Joe за подробное объяснение ... делает так много смысла сейчас! Еще раз спасибо! – vikram17000