Невозможно увидеть все пространства ключей в C* 2.1.7 после того, как я понизил с 3.0 до 2.1.7
Я использовал Cassandra 2.1.7 и по какой-то причине я обновился до 3.0.12 и позже понял, что некоторые зависимые приложения не будут работать с 3.0.12, и я снизил версию и использовал C* 2.1.7, как я использовал раньше. Но сейчас я не могу видеть Keyspaces в C*. (Только к вашему сведению: каталог данных одинаков в обоих файлах C*yaml)
Должен ли я внести какие-либо изменения?
Ценю твою помощь.
2 ответа
Если вы НЕ выполняли резервное копирование, то не о чем беспокоиться, так как C* 3.0 не удалит старые базы данных после обновления, он просто обновляет CFS, связанный с sstable, и добавляет еще несколько CFS для совместимости.
Вот что я сделал, чтобы сохранить данные: поскольку в версии 3.0 совершенно разные соглашения об именах для имен БД, мы должны тщательно отличать БД от обоих (Старее против новее).
Для 2.X имен Cassandra dbname имеют следующее соглашение для каждого ks:
keyspace-ColumnFamilyName-ka-ID-Data.db
keyspace-ColumnFamilyName-ka-ID-Digest.sha1
keyspace-ColumnFamilyName-ka-ID-Filter.db
keyspace-ColumnFamilyName-ka-ID-Index.db
keyspace-ColumnFamilyName-ka-ID-Statistics.db
keyspace-ColumnFamilyName-ka-ID-Summary.db
keyspace-ColumnFamilyName-ka-ID-TOC.txt
keyspace: keyspace name
ColumnFimilyname : Name of the CF under keyspace
ka: C* Internal(Haven't explored much on this)
ID: It is incremental value I see different sets of these having different id.(looks like it is an increasing factor when it takes snapshot, not sure though)
And the last parameter is db name
Поэтому, когда я начинаю с 2.1.7, я прочитал все лог-операторы в C* daemon и обнаружил, что файл sstable_actictivity в системном пространстве ключей не является действительным, так как размер этого файла очень меньше.
/data/system/sstable_activity-5a1ff267ace03f128563cfae6103c65e/system-sstable_activity-ka-145
Поэтому я попытался найти самый старый файл в системе (каталог пространства ключей, т.е. /data/system/) из снимков и заменить его на приведенный выше файл. И то же самое я повторил для таблицы "schema_keyspaces" в системном пространстве ключей.
Теперь я снова перезапускаю демон cassandra, к счастью, я смог получить список пространств клавиш после запуска "DESC KEYSPACES", но я не вижу списка таблиц, когда я выполняю "DESC TABLES" для моего пространства ключей, так как он не загружался, потому что файлы не были найдено с помощью sstable_activity.
Теперь я продолжал повторять один и тот же процесс для всех других таблиц в "системном" пространстве клавиш. которые как ниже:
schema_keyspaces
schema_columnfamilies
local
schema_columns
schema_triggers
schema_usertypes
После перезапуска Cassandra я смог получить дату, которую я ожидал для своего приложения.
При обновлении с 2.x до 3.x вы должны запустить команду upgradedesstables в nodetool. Я полагаю, это то, что вы сделали. Теперь, когда вы вернулись к версии 2.x, Кассандре не удалось прочитать более новый формат SSTable. К сожалению, нет команды downgradesstables, поэтому единственный вариант - восстановить резервную копию с того места, где вы впервые запустили 2.x.