Невозможно добавить узлы в существующий кластер Cassandra
У нас есть кластер кассандры из 6 узлов на EC2, мы должны удвоить его емкость до 12 узлов. Таким образом, чтобы добавить еще 6 узлов, я выполнил следующие шаги.
1 Вычислили токены для 12 узлов и настроили новые узлы соответственно.
2 При правильной настройке запускаются новые узлы, чтобы новые узлы разделяли существующие диапазоны токенов.
- В начале все новые узлы показывали текущую потоковую передачу.
- В состоянии вызова все узлы находились в состоянии "Соединение"
- Через 12 часов 2 узла завершили потоковую передачу и пришли в нормальное состояние.
- Но на оставшихся 4 узлах после потоковой передачи некоторого количества данных они не показывают никакого прогресса, похоже, что они застряли
Мы установили Cassandra-0.8.2 и имеем около 500 ГБ данных на каждом из существующих узлов и храним данные на томе EBS.
Как я могу решить эту проблему и получить сбалансированный кластер из 12 узлов?
Могу ли я перезапустить узлы?
Если я почистил каталог данных застрявших узлов Cassandra и перезапустил новую установку, это приведет к потере данных?
3 ответа
Не будет потери данных, если вы используете коэффициент репликации 2 или выше.
В версии 0.8.2 Cassandra есть несколько известных проблем - пожалуйста, обновите до 0.8.8 на всех исходных узлах, а также на новых появившихся узлах, а затем начните процедуру для узлов, которые не завершились.
Также помните, что хранение данных на томах EBS - плохая идея:
http://www.mail-archive.com/user@cassandra.apache.org/msg11022.html
Хотя это не даст прямого ответа на ваш вопрос, надеюсь, оно направит вас в правильном направлении:
Есть довольно активный #cassandra
IRC канал включен freenode.org
,
Так вот ответ, почему некоторые из наших узлов застряли.
1) Мы обновили cassandra-0.7.2 до cassandra0.8.2
2) И мы загружаем sstables утилитой sstable-loader
3) Но некоторые данные для некоторых семейств столбцов напрямую вставляются из задания hadoop. И данные этих семейств столбцов показывают какую-то другую версию, так как мы не обновили API Cassandra в Hadoop.
4) Из-за несоответствия версий Кассандра выдает "исключение несоответствия версий" и прекращает потоковую передачу.
5) Таким образом, решение для этого состоит в том, чтобы использовать "nodetool scrub keyspace columnfamily". Я использовал это, и моя проблема решена
Таким образом, главное здесь, если вы обновляете емкость кластера cassandra, вы должны выполнить scruit nodetool