Кассандра 3.11 SSTableLoader механика - PullRequest
0 голосов
/ 11 октября 2018

Я использовал утилиту SSTableLoader для массовой передачи данных между двумя различными кластерами Cassandra, и мне было интересно, сталкивался ли кто-либо еще с такими же проблемами.Исходный кластер содержит данные, пункт назначения - нет.

Я прочитал страницу dasastax с подробностями об утилите, но все же у меня есть несколько вопросов о том, как она работает, без ответа.

Я используюутилита на живых узлах исходного кластера, и команды имеют следующий формат:

sstableloader -d target.host.ip -v -f /etc/cassandra/cassandra.yaml /cassandra/data/keyspace1/table1-uuid

Оба кластера настроены с 256 vnode каждый с 6 узлами в каждом кластере.Схема RF = 3 в обеих средах, и все таблицы структурированы одинаково.

Итак, мои вопросы следующие:

1) Утилита извлекает информацию о кластере источника из файла cassandra.yaml.вы указываете, но вы все равно должны указать абсолютный путь к SSTables.Таким образом, выполнение SSTableLoader из одного узла дает мне всю таблицу в месте назначения после ее завершения?Кажется, что это трудно проверить, поскольку диапазоны токенов в кластере назначения различны.

2) Информация о налоге на данные говорит:

Чтобы получить максимальную пропускную способность от загрузки SSTable, вы можете использоватьнесколько экземпляров sstableloader для потоковой передачи на нескольких машинах.Не существует жесткого ограничения на количество SSTable, которые sstableloader может запускать одновременно, поэтому вы можете добавлять дополнительные загрузчики, пока не увидите никаких улучшений.

Означает ли это, что для одной таблицы ябудет запускать несколько экземпляров SSTableLoader на нескольких компьютерах-источниках?Или это просто означает, что я могу использовать SSTableLoader для нескольких разных таблиц на нескольких машинах одновременно.Я пытаюсь понять, является ли увеличение пропускной способности, о котором они упоминают, для одной таблицы или только для нескольких таблиц в полете.

3) Какая модификация синтаксиса необходима для запуска вместо снимков?Я сделал снимок и проверил, выполнив ту же команду, но дальше в каталог моментальных снимков таблицы, и он не анализировал правильно, говоря, что «снимок» - недопустимое пространство ключей.

В любом случае, спасибо, надеюсь, что я былдостаточно ясно с моими вопросами.

1 Ответ

0 голосов
/ 11 октября 2018

1) Если ваш RF = 3 и в вашем кластере было 3 узла, то каждый узел содержит ALL данных.Тем не менее, могут быть небольшие изменения из-за обновлений, которые еще не распространяются на все реплики.Если число узлов в вашем кластере больше, чем RF (для вашего случая 6 узлов, RF = 3), то каждый узел содержит комбинацию 50% данных (разные диапазоны токенов).В любом случае вам нужно запустить sstableloader во всех пространствах ключей + таблицах от каждого из исходных узлов до узлов назначения нового кластера (при условии отношения 1: 1).

2) Да, вы можете запустить несколько sstableloadersв одной и той же таблице / пространстве ключей от каждого из исходных узлов, чтобы он соответствовал целевому узлу параллельно.Но это также означает, что вы можете сделать это для разных пространств ключей / таблиц, если в конечном итоге вы выполнили это со всех исходных узлов для всех пространств ключей / таблиц до соответствующих им целевых узлов (при условии отношения 1: 1).

3) Восстановление из резервной копии (моментального снимка) - это другая процедура, которая не требует использования sstableloader.Подробнее об этом можно прочитать здесь .

Также есть возможность использовать nodetool refresh для загрузки sstables из всех исходных узлов в новые узлы назначения, но это следует использовать только тогда, когдаnum_nodes = RF.Подробнее об этом здесь

...