我正在运行一个使用cassandra 0.6的应用程序。现在我想将它迁移到cassandra 2.1版本。
我做了以下事情。
- 下载tarball并安装
- 根据我的配置更改了我的群集名称
- 将数据文件目录、保存的缓存、提交日志指向以前由旧版本存储的数据
在我的数据文件目录中,我有几个带有键空间的文件夹,比如A、B、C、D、system、system_traces,这些文件夹中的数据是通过节俭api添加的。
A、 B、C、D文件夹有子文件夹,如
/.../cassandra/data/A/Standard1-1-Data.db
/.../cassandra/data/A/Standard1-1-Filter.db
/.../cassandra/data/A/Standard1-1-Index.db
分别与B、C、D相同的文件。
现在,当我启动我的cassandra 2.1并从命令行运行cqlsh并连接到cassandra实例时。我键入命令
描述关键空间;
我得到的输出是system和system_traces。
为什么会发生这种情况?A、B、C、D密钥空间去了哪里??为什么我的数据没有被检索到?我的迁移正确吗??
如果错误,我如何检索这些文件中的数据?如何访问它们??
无法直接从Cassandra 0.6升级到2.1。如果你阅读了升级指南,你应该能够制定出升级计划:
- DataStax升级指南
- Cassandra 1.2升级先决条件
特别是,这些信息的花边新闻意义重大:
Cassandra 2.1与Cassandra 1.x SSTables不兼容。第一将节点升级到Cassandra 2.0.7或更高版本,启动集群,升级SSTables,停止集群,然后升级到Cassandra2.1.
而且。。。
Cassandra 2.0与网络或SSTable版本不兼容1.2.9以上。如果您的Cassandra版本早于1.2.9如果要执行滚动重新启动,请首先升级整个集群到1.2.9,然后到Cassandra 2.0。
而且。。。
Cassandra 0.6及更高版本的数据文件与Cassandra兼容1.2
基本上,你需要升级0.6到1.2.9,然后升级1.2.9到2.0.7,然后你应该可以升级到2.1。你可能还需要做一点研究,看看你是否可以从0.6直接升级到1.2.9(我不太记得了,但我认为你可能必须升级到最新的1.1.x,然后才能转到1.2.9)
对于您所做的每一次升级,您都必须遵循我上面提到的DataStax升级指南中列出的步骤:
-
停止节点。
-
备份您的配置文件。取决于如何安装产品时,这些文件可能会被默认文件覆盖值。备份配置后,根据您的当前安装类型。
-
安装新版本的Cassandra。Debian或Ubuntu RHEL或CentOS Tarball
-
配置新产品。使用您制作的备份对您的配置文件,合并您所做的任何修改以前制作到新的配置文件中版本配置选项经常更改,所以一定要加倍检查版本限制以了解其他步骤和更改关于配置。
-
启动节点。
-
如果您从主要版本(例如,从1.2到2.0)或主要点版本(例如,从Cassandra 2.0到2.1),升级每个节点上的sstables。
$ nodetool upgradesstables
(#6是您似乎跳过的更重要的步骤之一)
- 检查日志警告、错误和异常。在群集中的每个节点上重复此操作
您没有指定正在运行的cassandra 0.6.X的哪个版本,即使在0.6补丁版本中,NEWS.txt.中也有升级说明
至少,您需要通过每个major.minor-cassandra版本的最新补丁级别进行升级。Cassandra升级说明、gotchas和详细步骤始终记录在NEWS.txt:中
https://github.com/apache/cassandra/blob/cassandra-2.1/NEWS.txt
您跳过了很多步骤。:-)