2014-01-15 2 views
1

У меня был производственный кластер из 20 узлов с 3 репликациями, и я хочу скопировать часть данных i.e, ~ 600 ГБ (с 3 репликациями) в тестовую среду с только 1 репликацией.копировать данные из cassandra в cassandra

Я знаю, что мы можем использовать sstableloader, но нужно ли скопировать все 600 ГБ по сети в другой кластер?

Это их способ перемещения только одной копии данных в другой кластер?

Каков наилучший способ сделать это?

ответ

2

Я предполагаю, что вы используете RandomPartitioner. То, что вы делаете, зависит от количества узлов в тестовой среде.

В случае SimpleStrategy:

A. Если вы используете 20 узлов в тестовой среде:

  1. Присвоить же маркер для каждого узла в тестовой среде;
  2. Использовать моментальный снимок nodetool на всех узлах одновременно;
  3. Скопируйте данные из каталогов моментальных снимков из вашего производственного узла с тем же токеном на тестовый узел с тем же токеном;
  4. Чтобы изменить коэффициент репликации на 1, просто обновите пространство с новыми настройками репликации, как здесь: http://wiki.apache.org/cassandra/Operations#Replication
  5. Запустить очистку на каждом узле.

B. Если вы используете меньшее количество узлов, чем производство:

  1. Равномерно назначить маркеры на новые узлы, чтобы получить сбалансированное кольцо;
  2. Использовать моментальный снимок nodetool на всех узлах одновременно;
  3. Вам нужно будет скопировать все данные со всех узлов в каждом узле тестовой среды;
  4. Если вы используете LevelCompaction, убедитесь, что вы удалили metadata.json из каталога даты семейства столбцов, используя это уплотнение перед запуском узла. Это позволяет LevelCompaction компактно и правильно группировать эти метки в новой настройке.
  5. То же, что и выше;
  6. То же, что и 5;

Вы можете пропустить моментальный снимок и скопировать каталоги данных прямо, если вам не нужна согласованность данных в определенный момент времени в восстановленной версии для тестирования.

вещи, чтобы рассмотреть:

Этот процесс эффекты дисковых операций ввода/вывода резко. Если вы делаете это в реальном кластере, используйте моментальный снимок, чтобы по крайней мере заблокировать состояние в определенный момент времени и постепенно копировать.

В случае NetworkTopologyStrategy:

Вы можете повторить процесс выше, но только скопировать из комбинации узлов, которые находятся в одной стойке и образуют 100% данных.Если вы абсолютно заботитесь о возможной пропущенной записи в узлы на других стойках, которые не были репликацией на узлы в этой стойке, вам придется скопировать все из всех узлов, как указано выше.

Идеальное решение:

Если вы собираетесь делать это каждый день для тестирования, как я могу сделать для своей компании, вы хотите, чтобы сделать некоторые автоматизации вокруг него. Лучшая автоматизация для резервного копирования и восстановления по-моему - это Priam Netflix https://github.com/Netflix/Priam

У меня есть резервные копии продукции, хранящиеся в S3. Код вызывает новые машины в тесте, назначает один и тот же токен для одной зоны, и я устанавливаю время моментального снимка примара в диапазон от резервной копии последнего дня, тогда тестовые узлы будут автоматически получать данные из резервных копий s3.

Надеюсь, что мой ответ помог вам.

+0

Спасибо, arya. но мы используем murmur3partitioner и не вводим токенов. мы используем SimpleStrategy и CF с размерным уплотнением. У меня было всего 3 узла в тестовом кластере. Как я могу скопировать 20 данных узлов в 3 узла. Нужно ли распределять данные на 3 узла? – Rock

Смежные вопросы