Требуется ли обновление cassandra для запуска таблиц обновления nodetool для кластера, содержащего данные TTLed

#cassandra #datastax #cassandra-2.0 #cassandra-3.0

#cassandra #datastax #cassandra-2.0 #cassandra-3.0

Вопрос:

Я использую 3-узловой кластер apache cassandra в качестве контейнера docker, содержащего данные временных рядов с 45-дневным TTL.

Я планирую обновить текущую версию cassandra 2.2.5 до выпуска cassandra 3.11.4. Для обновления определены следующие шаги —

  1. Резервное копирование существующих данных
  2. Сбросить один из узлов cassandra

    bin / nodetool -h cassandra1 -u ca_itoa -pw утечка ca_itoa

  3. Остановите узел cassandra1

  4. Запустите новый контейнер cassandra 3.11.4

  5. Обновите SSTable

    bin/ nodetool -u ca_itoa -pw таблицы обновления ca_itoa

  6. Проверьте состояние узла. Повторите процесс для остальных узлов

У меня есть несколько вопросов о процессе обновления —

  1. Правильны ли шаги?
  2. Необходимо ли запускать команду upgradesstables. Это отнимает много времени, и я хочу посмотреть, смогу ли я избежать. Для данных установлен TTL. Продолжит ли cassandra запись в новом формате SSTable, в то время как старые данные SSTable будут очищены по истечении срока действия? Предполагается, что через 45 дней все SSTable будут в новом блестящем формате.

Ответ №1:

Просто некоторые дополнительные мысли:

Для шага # 6 на самом деле вам не обязательно запускать upgradesstables сразу. На самом деле, если вы обновляете производственную систему, вероятно, лучше этого не делать, пока команда приложений не убедится, что они могут нормально подключиться. Помните, что более старые версии драйвера, которые работают в 2.2, могут не работать с 3.11.4.

С этой целью я бы подождал, пока весь кластер не будет запущен в новой версии, прежде чем upgradesstables запускать, на каждом узле.

Необходимо ли запускать команду upgradesstables?

Поскольку каждая версия Cassandra способна считывать свой собственный формат SSTable, а также предыдущую основную версию, я думаю, это не обязательно. Но это определенно то, что вы должны захотеть сделать. Особенно при обновлении до 3.x.

Cassandra 3 содержит значительное обновление механизма хранения, что приводит к значительно меньшему объему диска. В одном кластере, который я обновил, потребности в диске сократились на 90%.

Кроме того, вы подвергнетесь дополнительной задержке при чтении записей, которые могут быть распределены по старым файлам SSTable, а также по новым. Чтение записей в нескольких файлах и так достаточно плохо. Но теперь вы бы заставили Cassandra читать и сопоставлять результаты из двух форматов.

Поэтому, хотя я бы не сказал, что это «обязательно», я бы определенно сказал, что это квалифицируется как «хорошая идея».

Ответ №2:

Да, вам необходимо запустить nodetool sstableupgrade на каждом узле после обновления cassandra, поскольку вы обновляетесь с формата файла 2.2.x до 3.11.4. sstable, и ext также изменится. Вы можете запустить этот процесс в фоновом режиме, и это не создаст никаких проблем. пожалуйста, обратитесь к ссылкам ниже для получения более подробной информацииhttps://blog.thethings.io/upgrading-apache-cassandra-cluster /

Комментарии:

1. Спасибо. Не могли бы вы, пожалуйста, помочь мне разобраться в предположениях TTL, которые я сделал в своем запросе номер 2

2. Новые данные будут в новом формате. Как вы упомянули, 45 дней не меньше, поэтому вам следует обновить свои sstables.

3. Я изучил процесс обновления, упомянутый в документах DataStax — [ docs.datastax.com/en/upgrade/doc/upgrade/datastax_enterprise /… . Шаг № 11 отмечен как необязательный. Это меня смутило. `Необязательно: Для обеспечения оптимальной производительности обновите SSTables на каждом узле теперь, когда обновление завершено.’

4. @ Mac, Приведенная выше процедура предназначена для «Обновления с Apache Cassandra до DataStax Enterprise», о котором вы упомянули. docs.datastax.com/en/upgrade/doc/upgrade/datastax_enterprise / … и вы выполняете обновление Apache cassandra 2.2.5 до cassandra 3.11.4.