Как перенести данные из кластера Cassandra размера N в другой кластер размера N +/- M - PullRequest
7 голосов
/ 21 июля 2011

Я пытаюсь выяснить, как перенести данные из одного кластера кассандры в другой кластер кассандры с другим размером кольца ... скажем, из кластера из 5 узлов в кластер из 7 узлов.

Iначал смотреть на sstable2json, так как он создает файл json для SSTable на этом конкретном узле кассандры.Я думал сделать это для семейства столбцов на каждом узле в кольце.Таким образом, в кольце из 5 узлов это даст мне 5 файлов JSON, один файл для данных, хранящихся в семействе столбцов, которое находится на каждом узле.

Затем я бы слил файлы json в один файл и использовал json2sstable для импорта в новый кластер размером, скажем, 7. Я надеялся, что затем cassandra будет равномерно реплицировать / сбалансировать данныеузлы в кольце, но я только что прочитал, что SSTable являются неизменяемыми после записи.Поэтому, если бы я сделал то, что только что упомянул, я бы получил кольцо со всеми данными в моем семействе столбцов на одном узле.

Так что кто-нибудь может помочь мне разобраться в процессе миграции данных из одного кластерав другой кластер с другим размером кольца?

Ответы [ 4 ]

9 голосов
/ 22 июля 2011

Лучше: используйте bin / sstableloader на sstables из старого кольца для потоковой передачи на новое.

Обычно sstableloader используется в такой последовательности:

  1. Createsstables локально с использованием SSTableWriter
  2. Используйте sstableloader для потоковой передачи данных в sstables на нужные узлы (путь bin-sstableloader к каталогу, полному sstables).Предполагается, что имя каталога является пространством ключей, что будет иметь место, если вы укажете его на существующий каталог данных Cassandra.

Поскольку вы хотите передавать данные из существующего кластера A вВ новом кластере B вы можете сразу перейти к запуску sstableloader для данных на каждом узле кластера A.

Подробнее об использовании sstableloader в в этом сообщении в блоге .

0 голосов
/ 24 сентября 2014

Вы можете сделать следующие шаги: 1. Соедините 7 узлов в кластеры по 5 узлов и настройте каждый узел со своим собственным токеном кольца. В настоящее время у вас может быть кластер с 12 узлами. 2. Удалите 5 узлов из нового кластера в шаге 1. 3. Установите Token Ring для каждого узла после перемещения 5 узлов самостоятельно. 4. Восстановление кластера из 7 узлов.

0 голосов
/ 23 июля 2011

Вам не нужно использовать sstable2json.Если у вас есть место, вы можете:

  1. получить все sstables от всех узлов старого кольца
  2. собрать их все вместе на каждом из новых серверов (переименовывая любой, которыйимеют одинаковые имена)
  3. запустить очистку nodetool на каждом узле в новом кольце, и они отбросят данные, которые им не принадлежат.
0 голосов
/ 22 июля 2011

Рискну сказать, что это не такая большая проблема, как может показаться.

  1. Создайте новое кольцо и определите жетоны для каждого узла, как указано в http://wiki.apache.org/cassandra/Operations#Token_selection
  2. Импорт данных в новое кольцо.
  3. Кольцо будет уравновешиваться на основе заданных вами токенов http://wiki.apache.org/cassandra/Operations#Import_.2BAC8_export
...