Перенос данных из одного кластера кассандры в другой - PullRequest
0 голосов
/ 20 марта 2020

Привет! Я хочу перенести данные из моего кластера кассандры в другой кластер кассандры. Я видел много постов, предлагающих различные методы, но они не очень понятны или имеют ограничения. Видны следующие методы:

  1. Использование команд COPY TO и COPY FROM: Прост в использовании, но, похоже, имеет ограничение на количество строк, которые он может копировать.
  2. Использование SSTABLELOADER: В большинстве статей предлагается использовать sstableloader для перемещения данных из одного кластера в другой. Но не получили четких подробностей о шагах по созданию sstables (возможно ли использовать какую-либо команду nodetool или требуется создать приложение java? Они созданы для узла или для кластера? Если созданы, как перемещаться их из одного кластера в другой?) или создание снимков , что утомительно, поскольку они создаются для каждого узла и должны быть перенесены в другой кластер. Также видели ответы, предлагающие использовать параллельный s sh для создания снимка для всего кластера, но также не получили никакого примера для этого.

Любая помощь будет принята.

Ответы [ 2 ]

1 голос
/ 20 марта 2020

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

Чтобы получить токены для исходного узла, вы можете запустить nodetool info -T | grep Token | awk '{print $3}' | tr '\n' , | sed 's/,$/\n/'. Затем вы можете скопировать разделенный запятыми список токенов из вывода и вставить его в параметр initial_token в cassandra.yaml целевого узла. После запуска узла проверьте его токены, используя nodetool info -T, чтобы убедиться, что он имеет правильные токены. Повторите эти шаги для каждого узла в целевом кластере.

После того, как все ваши целевые узлы настроены с точно такими же токенами, D C и стойками, что и исходный кластер, сделайте снимок нужных таблиц в исходном кластере и скопируйте снимки в каталоги данных соответствующего узла на целевом кластере. DataStax OpsCenter может автоматизировать процесс резервного копирования и восстановления данных и будет использовать прямое копирование для кластеров с одинаковой топологией. Похоже, что Медуза может сделать это тоже, хотя я не использовал этот инструмент раньше.

0 голосов
/ 20 марта 2020

Это действительно вопрос, который требует больше информации, чтобы дать окончательный ответ. Например, нужно ли хранить метаданные, такие как WriteTime и TTL, в данных или нет? Имеет ли конечный кластер одинаковую топологию (количество узлов, распределение токенов и т. Д. c.).

В основном доступны следующие параметры:

  1. Использовать sstableloader - инструмент, поставляемый с самой Cassandra, который используется для восстановления из резервных копий и т. Д. c. Для выполнения переноса данных необходимо создать снимок таблицы для загрузки (используя nodetool snapshot) и запустить sstableloader для этого снимка. Основным преимуществом является то, что он будет хранить метаданные (TTL / WriteTime). Основным недостатком является то, что вам нужно выполнять создание снимка / загрузки на всех узлах исходного кластера, и вам нужно иметь точно такую ​​же схему и разделитель в целевом кластере;
  2. Вы можете использовать инструмент резервного копирования / восстановления, например, medusa , который в основном автоматизирует получение снимка и загрузку данных;
  3. Вы можете использовать Apache Spark для копирования данных из одной таблицы в другую, используя Spark Cassandra Соединитель , например, как описано в этом блоге - просто прочитайте таблицу для одного кластера и запишите в таблицу в другом кластере. Хорошо работает для простых операций копирования, и у вас есть возможность выполнить преобразование данных, если это необходимо, но становится более сложным, если вам нужно сохранить метаданные. Плюс для этого требуется Spark;
  4. Использование DataStax Bulk Loader (DSBulk) для экспорта данных в файлы на диске и загрузки в другой кластер. В отличие от команды cqlsh COPY, она сильно оптимизирована для загрузки / выгрузки больших объемов данных. Он работает с Cassandra 2.1+ и большинством версий DSE (кроме древних).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...