Кассандра Keyspace Восстановление - PullRequest
0 голосов
/ 19 сентября 2018

Я сделал резервную копию моего пространства ключей в Кассандре, используя эту ссылку cassandra-backup.sh

Для восстановления я написал скрипт, который копирует содержимое из папок резервных копий, который содержит снимки ивставьте в соответствующий каталог в / var / lib / cassandra / data / mykeypsace /, но когда я вижу содержимое таблиц для mykeyspace, ничего не восстанавливается.Пример, резервная папка: путь / mykeyspace / tableOne / снимок / все содержимое в var / lib / cassandra / data / mykeyspace / tableOne / all-contents

Процесс восстановления, который я выполняю:

  1. Сбросьте пространство ключей
  2. Восстановление схемы для mykeyspace (файл .cql)
  3. Остановка службы cassandra
  4. Запуск сценария восстановления (функция копирования и вставки)
  5. восстановление nodetool
  6. Запуск службы cassandra

Я что-то упустил?

Другие подробности: cqlsh 5.0.1 |Кассандра 3.11.3 |Ubuntu 16.04

1 Ответ

0 голосов
/ 21 сентября 2018

Ненавижу быть убийцей, но процесс резервного копирования не так прост, как копирование sstables.Вам необходимо отслеживать, какие узлы фактически генерировали конкретный SSTable (или снимок, содержащий его).

Вам необходимо:

Резервное копирование

  1. Создать снимок для каждого узла в кластере
  2. Создать файлкоторый хранит, какие токены принадлежат какому узлу (nodetool ring или nodetool info -T)
  3. Резервное копирование схемы (вы уже делаете это)

Восстановление:

  1. Создайте новый кластер с тем же числом узлов, что и кластер, для которого вы хотите восстановить
  2. Для каждого узла в новом кластере настройте initial_token в cassandra.yaml длятокены, полученные на шаге 2 на этапе резервного копирования. (на каждом узле)Пример этого: initial_token: 1, 2
  3. Убедитесь, что каталог данных Cassandra пуст rm /var/lib/cassandra/data (на каждом узле)
  4. Запустите все узлы в кластере
  5. Создайтесхема, которую вы зарезервировали.
  6. Скопируйте sstables из последнего снимка в каталог данных Cassandra (на каждом узле)
  7. Запустите nodetool refresh, чтобы Cassandra загрузила вновь скопированные данные.(на каждом узле)

Быстрый пример с токенами (это может сбивать с толку): допустим, кластер имеет 3 узла, а каждый узел имеет 2 виртуальных токена, поэтому диапазон составляет 1-6.Определенные токены распределены по определенным узлам, самый простой способ убедиться в этом - использовать:

$ nodetool ring

Datacenter: datacenter1
==========
Address        Rack        Status State   Load            Owns                Token                                       
                                                                              6                         
127.0.0.1      rack1       Up     Normal  156.55 MiB      33.33%              1                       
127.0.0.1      rack1       Up     Normal  156.55 MiB      33.33%              2                       
127.0.0.2      rack1       Up     Normal  156.54 MiB      33.33%              3
127.0.0.2      rack1       Up     Normal  156.54 MiB      33.33%              4
127.0.0.3      rack1       Up     Normal  156.55 MiB      33.33%              5
127.0.0.3      rack1       Up     Normal  156.55 MiB      33.33%              6 

При восстановлении из моментального снимка мне потребуется установить следующий initial_token для каждого узла:

# node 127.0.0.1's cassandra.yaml
initial_token: 1,2 

# node 127.0.0.2's cassandra.yaml
initial_token: 3,4 

# node 127.0.0.3's cassandra.yaml 
initial_token: 5,6 

Обычно это автоматизировано, поскольку для виртуальных токенов по умолчанию установлено значение 256.

...