Включение vNodes в Cassandra 1.2.8

У меня есть кластер из 4 узлов, и я обновил все узлы со старой версии до Cassandra 1.2.8. Общий объем данных, присутствующих в кластере, составляет 8 ГБ. Теперь мне нужно включить vNodes на всех 4 узлах кластера без простоев. Как я могу это сделать?


person anuja Mandlecha    schedule 30.09.2013    source источник


Ответы (3)


TL;DR;

Нет вам нужно перезапустить серверы после редактирования конфигурации

Проблема в том, что включение vnodes означает, что большая часть данных перераспределяется случайным образом (в документации говорится, что подобно классическому «перемещению nodetool»).

person Lyuben Todorov    schedule 30.09.2013

Как сказал Нихил, вам нужно увеличить num_tokens и перезапустить каждый узел. Это можно сделать сразу, без простоев.

Однако увеличение num_tokens не приводит к перераспределению каких-либо данных, поэтому на самом деле вы не используете vnodes. Вы должны перераспределить его вручную с помощью перетасовки (объяснено в ссылке, размещенной Любеном, что часто приводит к проблемам), путем вывода из эксплуатации каждого узла и начальной загрузки (что временно оставит ваш кластер крайне несбалансированным с одним узлом, владеющим всеми данными), или путем временное дублирование вашего оборудования, как при создании нового центра обработки данных. Последний — единственный известный мне надежный метод, но он требует дополнительного оборудования.

person Richard    schedule 30.09.2013

В conf/cassandra.yaml вам нужно будет закомментировать параметр initial_token и включить параметр num_tokens (по-моему, по умолчанию 256). Сделайте это для каждого узла. Затем вам придется перезапустить службу cassandra на каждом узле. И дождитесь перераспределения данных по всему кластеру. 8 ГБ не должны занимать слишком много времени (при условии, что все ваши узлы находятся в одном кластере), а запросы на чтение по-прежнему будут работать, хотя вы можете наблюдать снижение производительности до завершения перераспределения данных.

РЕДАКТИРОВАТЬ: Вот потенциальная стратегия для переноса ваших данных:

  • Вывести из эксплуатации два узла кластера. Токен-пространство должно быть распределено 50-50 между двумя другими узлами.
  • На двух выведенных из эксплуатации узлах удалите существующие данные и перезапустите демон Cassandra с другим именем кластера и включенными параметрами num_token.
  • Перенесите 8 ГБ данных из старого кластера в новый кластер. Для этого вы можете написать быстрый скрипт на python. Поскольку объем данных достаточно мал, это не должно занять слишком много времени.
  • После переноса данных в новый кластер выведите из эксплуатации два старых узла из старого кластера. Удалите данные и перезапустите на них Cassandra с новым именем кластера и параметром num_tokens. Они будут загружаться, и данные будут передаваться с двух существующих узлов в новом кластере. Предпочтительно загружать только один узел за раз.

С помощью этих шагов вы никогда не столкнетесь с ситуацией, когда ваш сервис полностью отключен. Некоторое время вы будете работать с уменьшенной емкостью, но опять же, поскольку 8 ГБ — это небольшой объем данных, вы сможете достичь этого достаточно быстро.

person Nikhil    schedule 30.09.2013
comment
Увеличение num_tokens не приводит к перераспределению данных. - person Richard; 30.09.2013
comment
@ Ричард Ты прав. Виноват. - person Nikhil; 01.10.2013