#replication #riak
#репликация #riak
Вопрос:
Я обеспокоен этим примечанием в документации Riak:
N = 3 просто означает, что в кластере будут храниться три копии каждой части данных. То есть три разных раздела / vnodes будут получать копии данных. Нет никаких гарантий, что три реплики будут отправлены на три отдельных физических узла; однако встроенные функции для определения того, куда отправляются реплики, пытаются распределить данные равномерно.
https://docs.basho.com/riak/kv/2.1.3/learn/concepts/replication/#so-what-does-n-3-really-mean
У меня есть кластер из 6 физических серверов с N = 3. Я хочу быть на 100% уверен, что полная потеря некоторого количества узлов (1 или 2) не приведет к потере каких-либо данных. Насколько я понимаю приведенное выше предостережение, Riak не может этого гарантировать. Похоже, что есть некоторая (по общему признанию, низкая) часть моих данных, у которых все 3 копии могут храниться на одном физическом сервере.
На практике это означает, что для достаточно большого набора данных я гарантированно полностью потеряю записи, если у меня произойдет катастрофический сбой на одном узле (гремлины съедят / размагнитят диск или что-то в этом роде).
Существует ли конфигурация Riak, которая позволяет избежать этой проблемы?
К сожалению, сбивающая с толку реальность: я использую старую версию Riak (1.4.12).
Комментарии:
1. Riak пытается предупредить вас, если не получилось разместить все предварительные списки на 3 физических машинах. При запуске
riak-admin cluster plan
после добавления всех ваших узлов вы получитеWARNING: Not all replicas will be on distinct nodes
, что на одном узле будет 2 копии.
Ответ №1:
Не существует конфигурации, которая исключает минимальную вероятность того, что раздел может иметь 2 или более копий на одном физическом узле (хотя наличие более 5 узлов в вашем кластере делает крайне маловероятным, что один узел имеет более 2 копий раздела). С вашим кластером из 6 узлов крайне маловероятно, что у вас будет 3 копии раздела на одном физическом узле.
Инструмент командной строки riak-admin может помочь вам изучить ваши разделы / vnodes. Выполняется riak-admin vnode-status
(http://docs.basho.com/riak/kv/2.1.4/using/admin/riak-admin/#vnode-status ) например, на каждом узле будет выводиться статус всех vnodes, запущенных на локальном узле, на котором выполняется команда. Если вы запустите его на каждом узле в своем кластере, вы подтвердите, распределены ли ваши данные удовлетворительным образом.
Комментарии:
1. Спасибо за ответ. Я надеюсь, что вы можете немного рассказать о том, как я могу использовать вывод vnode-status, чтобы успокоиться. Я думаю, что мне не хватает шага в рассуждениях. Что я вижу из vnode-status, так это то, какие vnode находятся на каком физическом экземпляре, и некоторые подробности о количестве ключей, которыми они управляют, и где эти данные хранятся на диске. Вооружившись этой информацией, как мне ответить на мой основной вопрос: сколько ключей хранится на одном физическом узле. Другими словами, как мне посмотреть на vnodes на каждом хосте и сказать «Ок, ни у одного физического хоста нет всех 3 vnodes для данной записи».
2. Возможно, более новые версии после 1.4.12 имеют другой результат? Я вижу что-то в этом роде: VNode: 68507889249886074290797726533575766546371837952 Серверная часть: riak_kv_bitcask_backend Статус: [{key_count, 934027}, {status, [{«/var/ lib /riak/bitcask/68507889249886074290797726533575766546371837952/ 347.bitcask.data», 0,0,7122146},
3. Если вы запустите vnode-status для всех узлов, вы должны обнаружить, что значение после «VNode:» должно существовать в трех местах (надеюсь, на трех разных узлах), если ваш nval = 3. Если размер вашего кольца = 64, у вас должно быть 192 общих значения VNode после запуска vnode-status на всех 6 узлах.
4. Это странно. Я запускал
riak-admin vnode-status
на каждом сервере и помещал выходные данные в 6 файлов локально. Когда я просматриваю их, «VNode: » встречается ровно 64 раза с уникальными значениями каждый раз. После минутного ужаса я смог подтвердить, что у меня есть значение N, равное 3 для моих производственных сегментов. Можете ли вы подумать о том, что я могу делать неправильно?