Я предполагаю, что вы используете RandomPartitioner. То, что вы делаете, зависит от количества узлов в тестовой среде.
В случае SimpleStrategy:
A. Если вы используете 20 узлов в тестовой среде:
- Присвоить же маркер для каждого узла в тестовой среде;
- Использовать моментальный снимок nodetool на всех узлах одновременно;
- Скопируйте данные из каталогов моментальных снимков из вашего производственного узла с тем же токеном на тестовый узел с тем же токеном;
- Чтобы изменить коэффициент репликации на 1, просто обновите пространство с новыми настройками репликации, как здесь: http://wiki.apache.org/cassandra/Operations#Replication
- Запустить очистку на каждом узле.
B. Если вы используете меньшее количество узлов, чем производство:
- Равномерно назначить маркеры на новые узлы, чтобы получить сбалансированное кольцо;
- Использовать моментальный снимок nodetool на всех узлах одновременно;
- Вам нужно будет скопировать все данные со всех узлов в каждом узле тестовой среды;
- Если вы используете LevelCompaction, убедитесь, что вы удалили metadata.json из каталога даты семейства столбцов, используя это уплотнение перед запуском узла. Это позволяет LevelCompaction компактно и правильно группировать эти метки в новой настройке.
- То же, что и выше;
- То же, что и 5;
Вы можете пропустить моментальный снимок и скопировать каталоги данных прямо, если вам не нужна согласованность данных в определенный момент времени в восстановленной версии для тестирования.
вещи, чтобы рассмотреть:
Этот процесс эффекты дисковых операций ввода/вывода резко. Если вы делаете это в реальном кластере, используйте моментальный снимок, чтобы по крайней мере заблокировать состояние в определенный момент времени и постепенно копировать.
В случае NetworkTopologyStrategy:
Вы можете повторить процесс выше, но только скопировать из комбинации узлов, которые находятся в одной стойке и образуют 100% данных.Если вы абсолютно заботитесь о возможной пропущенной записи в узлы на других стойках, которые не были репликацией на узлы в этой стойке, вам придется скопировать все из всех узлов, как указано выше.
Идеальное решение:
Если вы собираетесь делать это каждый день для тестирования, как я могу сделать для своей компании, вы хотите, чтобы сделать некоторые автоматизации вокруг него. Лучшая автоматизация для резервного копирования и восстановления по-моему - это Priam Netflix https://github.com/Netflix/Priam
У меня есть резервные копии продукции, хранящиеся в S3. Код вызывает новые машины в тесте, назначает один и тот же токен для одной зоны, и я устанавливаю время моментального снимка примара в диапазон от резервной копии последнего дня, тогда тестовые узлы будут автоматически получать данные из резервных копий s3.
Надеюсь, что мой ответ помог вам.
Спасибо, arya. но мы используем murmur3partitioner и не вводим токенов. мы используем SimpleStrategy и CF с размерным уплотнением. У меня было всего 3 узла в тестовом кластере. Как я могу скопировать 20 данных узлов в 3 узла. Нужно ли распределять данные на 3 узла? – Rock