решение для резервного копирования riak для одного контейнера - PullRequest
6 голосов
/ 28 марта 2011

Что вы посоветуете для решений, которые позволяют создавать резервные копии [потоковой передачи или моментального снимка] отдельного блока riak в файл?

Ответы [ 3 ]

3 голосов
/ 05 февраля 2014

Резервное копирование только одного контейнера будет трудной операцией в Riak.

Все решения сводятся к следующим двум шагам:

  1. Перечислите все объекты в ведре.Это сложная часть, поскольку нигде в кластере Riak нет «манифеста» или списка содержимого ни одного сегмента.

  2. Выполните GET для каждого из этих объектов изсписок выше, и запишите его в файл резервной копии.Эта часть, как правило, проста, хотя для максимальной производительности вы хотите убедиться, что вы выполняете эти GET параллельно, многопоточным образом и используете какой-то пул соединений.

КакЧто касается перечисления всех объектов, у вас есть один из трех вариантов.

Одним из них является выполнение операции «Ключи списка потоковой передачи» в сегменте по HTTP (например, /buckets/bucket/keys?keys=stream) или по буферам протокола - подробности см. В http://docs.basho.com/riak/latest/dev/references/http/list-keys/ и http://docs.basho.com/riak/latest/dev/references/protocol-buffers/list-keys/.Ни при каких обстоятельствах не следует выполнять обычную операцию List Keys без потоковой передачи.(Это приведет к зависанию всего вашего кластера и, в конечном итоге, либо приведет к истечению времени ожидания, либо к сбою, когда количество ключей станет достаточно большим.)

Два - выполнить запрос вторичного индекса (2i), чтобы получить этот список объектов.См. http://docs.basho.com/riak/latest/dev/using/2i/ для обсуждения и предостережений.

И три из них будут, если вы используете Riak Search и можете извлечь все объекты с помощью одного поискового запроса с разбивкой по страницам.(Однако Riak Search имеет ограничение на количество запросов в 10 000 результатов, поэтому этот подход далеко не идеален).

В качестве примера автономного приложения, которое может создавать резервные копии одного сегмента, взгляните на Riak Data Migrator , экспериментальное приложение Java, использующее подход ключей потокового списка в сочетании с эффективными параллельными GET.

2 голосов
/ 31 марта 2011

Функция contrib Basho имеет решение erlang для резервного копирования одного сегмента. Это пользовательская функция, но она должна помочь.

http://contrib.basho.com/bucket_exporter.html

0 голосов
/ 31 марта 2011

Насколько я знаю, в Riak нет автоматизированного решения для резервного копирования одной корзины.Вам придется использовать инструмент командной строки riak-admin для резервного копирования одного физического узла.Вы можете написать что-нибудь, чтобы получить все ключи в одном сегменте и использовать низкие значения r, если хотите, чтобы это было быстро, но не безопасно (r = 1).

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

...