从 3.0 降级到 2.1.7 后无法看到 C* 2.1.7 中的所有键空间

Unable to see all keyspaces in C* 2.1.7 after I downgraded from 3.0 to 2.1.7

我一直在使用 Cassandra 2.1.7,出于某种原因我升级到 3.0.12,后来意识到一些依赖的应用程序不能与 3.0.12 一起使用,我降级并使用 C* 2.1.7 作为我以前在用。但现在我无法在 C* 中看到键空间。 (仅供参考:两个 C*yaml 文件中的数据目录相同)

我需要做任何改变吗?

感谢您的帮助。

当您从 2.x 升级到 3.x 时,您必须在 nodetool 中使用 运行 upgradesstables 命令。我想这就是你所做的。现在,当您降级回 2.x 时,Cassandra 无法读取更新的 SSTable 格式。不幸的是,没有 downgradesstables 命令,所以你唯一的选择是从你第一次 运行ning 2.x.

的地方恢复备份

如果您没有进行备份,那么不用担心,因为 C* 3.0 在升级后不会删除旧的数据库,它只会更新 sstable 相关的 CFS 并添加更多的 CFS 以实现兼容性.

以下是我为保留数据所做的工作: 由于 3.0 对 DB 名称的命名约定完全不同,因此我们需要仔细区分 db 和两者(Older vs newer)。

对于 2.X,Cassandra 数据库名称对每个 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* 守护程序中的每条日志语句,发现系统密钥空间下的 sstable_actiivity 文件不是实际文件,因为它的大小文件非常少。

/data/system/sstable_activity-5a1ff267ace03f128563cfae6103c65e/system-sstable_activity-ka-145

所以我试图从快照中找到系统(keyspace目录即/data/system/)下最旧的文件,并用上面的文件替换它。 我对系统密钥空间下的 "schema_keyspaces" table 重复了同样的操作。

现在我再次重启 cassandra 守护进程,幸运的是我可以在 运行 “DESC KEYSPACES” 之后获得键空间列表 但是当我为我的键空间执行“DESC TABLES” 时,我没有看到 table 的列表,因为它没有加载,因为 [=40= 找不到文件].

现在,我一直对 "system" 键空间下的所有其他 table 重复相同的过程。如下:

schema_keyspaces
schema_columnfamilies
local
schema_columns
schema_triggers
schema_usertypes

重新启动 Cassandra 后,我能够检索到我的应用程序预期的日期。