Перенос данных Riak при изменении размера кольца

Это тривиально? Я буду использовать Bitcask и резервные копии файлов (файлов на каждом узле).

Допустим, мой начальный размер кольца равен 256 с 16 узлами. Теперь, если мне нужно расширить кольцо до 1024, могу ли я настроить 16 новых экземпляров с размером кольца 1024, скопировать файлы резервных копий для старого кластера в эти 16 новых экземпляров и запустить Riak? Сможет ли Riak получить эти старые данные?

Я думаю, что нет, поскольку идентификаторы разделов и их сопоставление с отдельными узлами также могут измениться после изменения размера кольца. Но какой еще есть способ? Будет ли работать riak-backup в этом случае (при изменении размера кольца)?


Я просто хочу знать, что мой выбор достаточно рассчитан на будущее. Очевидно, что в какой-то момент, когда требования резко изменятся или количество пользователей резко возрастет, может потребоваться изменение всей архитектуры. Но я надеюсь, что в какой-то момент смогу внести такие изменения (в размер кольца) - естественно, с НЕКОТОРЫМИ усилиями, но - без того, чтобы это было невозможно.


person Dev Kanchen    schedule 04.02.2013    source источник


Ответы (2)


Миграция кластеров в другой размер кольца затруднена при резервном копировании файлов на основе узлов (это означает, что если вы просто создадите резервную копию каталогов /data на каждом узле, как это рекомендуется в Резервное копирование Riak). Потому что, как вы подозревали, файлы внутренних данных зависят от сопоставления узлов и разделов с заданным размером кольца.

Что делать вместо этого?

Вы должны использовать «логические» резервные копии всего кластера, используя один из этих двух инструментов:

  1. резервная копия riak-admin и восстановить (что действительно работает с кластерами разного размера кольца), или
  2. Migrator данных Riak

Использование любого из них в основном сбрасывает содержимое всего кластера в одно место (очевидно, будьте осторожны, чтобы не закончиться место на диске). Которые затем можно перенести и восстановить в новый кластер с другим размером кольца.

На что следует обратить внимание:

  • Делайте резервные копии только нерабочих кластеров. Это означает, что либо отключите кластер, либо, по крайней мере, убедитесь, что в старом кластере не происходит новых операций записи во время резервного копирования. В противном случае, если вы запустите резервное копирование, но новые записи все еще поступают, нет гарантии, что они попадут в резервную копию набора данных.

  • Перед выполнением резервного копирования/восстановления обязательно перенесите настройки app.config и пользовательского сегмента в новый кластер.

Надеюсь, это поможет. Таким образом, это не тривиально (это означает, что это займет некоторое время и потребует много места на диске, но это верно, когда вы передаете большие объемы данных), но это также и не очень сложно.

person Dmitri Zagidulin    schedule 26.02.2013
comment
Правильно, поэтому ответ, похоже, заключается в настройке кластера реплик и использовании его как в качестве опции горячей замены, так и в не слишком частом резервном копировании из него в файл. Дорого (в плане экземпляров) но другого логичного варианта не вижу. Спасибо и за подробности! - person Dev Kanchen; 26.02.2013
comment
Как заставить работать кластер-реплику? Есть ли способ, кроме непомерно дорогой репликации riak-enterprise? - person John Eikenberry; 29.04.2013

Я знаю, что это старый вопрос, но с Riak 2.x теперь можно динамически изменять размер кольца, не выключая кластер:

riak-admin cluster resize-ring <new_size>

riak-admin cluster plan

riak-admin cluster commit

Примечание. Размер кольца Riak всегда должен быть целым числом 2n, например. 16, 32, 64 и т.д.

http://docs.basho.com/riak/latest/ops/advanced/ring-resizing/

person Felix Scheffer    schedule 12.12.2014