Невозможно изменить количество токенов от 1 до 256

Я использую Cassandra 2.0, и кластер настроен на 3 узла. Состояние Nodetool и кольцо, показывающее все три узла. Я указал токены для всех узлов.

Я выполнил следующие шаги, чтобы изменить конфигурацию в одном узле:

1) sudo service cassandra stop
2) обновлен cassandra.yaml (для обновления thrift_framed_transport_size_in_mb)
3) sudo srevice cassandra start

Конкретный не запущен успешно, и system.log показывает следующее исключение:

org.apache.cassandra.exceptions.ConfigurationException: невозможно изменить количество токенов с 1 на 256

Каков наилучший механизм для перезапуска узла без потери существующих данных в узле или кластере?


person Ramana    schedule 30.03.2015    source источник
comment
Вы изменили значение конфигурации num_tokens на 256, чтобы включить vnodes?   -  person Stefan Podkowinski    schedule 30.03.2015
comment
Нет. Было только 256. По умолчанию это значение равно 256 в cassandra.yaml.   -  person Ramana    schedule 30.03.2015
comment
Пожалуйста, вставьте свой cassandra.yaml   -  person Stefan Podkowinski    schedule 30.03.2015
comment
да. Похоже, я сначала установил начальный токен, а позже подумал о включении vnode, установив для num_tokens значение 256 и прокомментировав initial_token. По сути, пытаясь преобразовать обычный узел во vnode.   -  person Ramana    schedule 11.05.2015


Ответы (2)


Переключение с Non-Vnodes на Vnodes было немного сложным предложением для C*, и механизм для предыдущего выполнения этого переключения (перетасовки) немного известен своей нестабильностью.

Самый простой путь вперед — запустить новые узлы (в новом центре обработки данных) с включенными vnodes и перенести данные на эти узлы с помощью восстановления.

person RussS    schedule 30.03.2015
comment
Как человек, который запускал cassandra-shuffle и позже спрашивал WTF?, я полностью согласен. - person Aaron; 30.03.2015
comment
На самом деле я не перехожу с Non-Vnodes на Vnodes. У меня все еще есть начальный набор токенов. Почему я получаю сообщение об ошибке «Невозможно изменить количество токенов с 1 на 256» при перезапуске? - person Ramana; 31.03.2015
comment
Те же инструкции применяются для переключения с любых n токенов (1 токен по существу идентичен не-vnode) на другие m токенов. К сожалению, это очень сложная и дорогая операция, и самым безопасным вариантом будет перенос нового центра обработки данных. Как только узел присоединился к кольцу и были назначены токены, это в основном окончательно. - person RussS; 31.03.2015

Я также получал эту ошибку, когда пытался изменить количество токенов с 1 на 256. Чтобы решить эту проблему, я попробовал следующее:

Сценарий: у меня есть кластер cassandra с 4 узлами DSE (4.6.1). Допустим, их полные доменные имена: d0.cass.org, d1.cass.org, d2.cass.org, d3.cass.org. Здесь узлы d0.cass.org и d1.cass.org являются начальными поставщиками. Моя цель — включить узлы, изменив атрибут num_token в файле cassandra.yaml.

Порядок действий для каждого узла (по одному):

  • Запустите списание nodetool на одном узле: nodetool decommission
  • Убейте процесс cassandra на выведенном из эксплуатации узле. Найдите идентификатор процесса для dse cassandra, используя ps ax | grep dse и kill <pid>
  • После успешного вывода узла из эксплуатации перейдите к одному из оставшихся узлов и проверьте состояние кластера cassandra с помощью nodetool status. Выведенный из эксплуатации узел не должен отображаться в списке.
  • Перейдите к одному из активных seed_providers и введите nodetool rebuild
  • На выведенном из эксплуатации узле откройте файл cassandra.yaml и раскомментируйте num_tokens: 256. Сохраните и закройте файл. Если этот узел изначально был сид-провайдером, убедитесь, что его IP-адрес удален из начальных списков из файла cassandra.yaml. Если этого не сделать, устаревшая информация о топологии кластера будет мешать новой топологии, предоставляемой новым начальным узлом. При успешном старте его можно снова добавить в список раздач.
  • Перезапустите оставшийся кластер либо с помощью соответствующей опции в opscenter, либо вручную остановив cassandra на каждой ноде и запустив ее снова.
  • Наконец, запустите на нем cassandra с помощью команды dse cassandra.

Это должно работать.

person New Coder    schedule 05.11.2015