2017-03-03 119 views
1

我在尝试将单节点Cassandra集群从1.1.5升级到2.0.x.将Cassandra 1.2.9升级到2.0.x

我的生产服务器在Linux上运行。我将数据文件夹拖到我的Windows盒子中,保留system keyspace以及我感兴趣的一个特定的键盘空间,并在获得Cassandra之后放下其余的部分。

我升级和测试:

  • 1.1.5 - > 1.2.0
  • 1.2.0 - > 1.2.8
  • 1.2.8 - > 1.2.9

冉:

  • nodetool upgradesstables
  • describe schema
  • select * from table limit 100

一切看起来好与1.x版。

当试图升级到2.0.7,我碰到一个问题(我看到建议的升级路径是1.2.9 - > 2.0.7):

INFO 16:43:01,758 Opening C:\path\mykeyspace-mytable-ic-655 (97902117 bytes) 
ERROR 16:43:12,443 Exception encountered during startup 
java.lang.RuntimeException: Incompatible SSTable found. Current version jb is unable to read file: C:\path\mykeyspace\mytable\mykeyspace-mytable.mytable_location_idx-he-647. Please run upgradesstables. 
     at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:409) 
     at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:391) 
     at org.apache.cassandra.db.index.AbstractSimplePerColumnSecondaryIndex.init(AbstractSimplePerColumnSecondaryIndex.java:52) 
     at org.apache.cassandra.db.index.SecondaryIndexManager.addIndexedColumn(SecondaryIndexManager.java:292) 
     at org.apache.cassandra.db.ColumnFamilyStore.<init>(ColumnFamilyStore.java:277) 
     at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:415) 
     at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:386) 
     at org.apache.cassandra.db.Keyspace.initCf(Keyspace.java:309) 
     at org.apache.cassandra.db.Keyspace.<init>(Keyspace.java:266) 
     at org.apache.cassandra.db.Keyspace.open(Keyspace.java:110) 
     at org.apache.cassandra.db.Keyspace.open(Keyspace.java:88) 
     at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:290) 
     at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:480) 
     at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:569) 

运行从upgradesstables 1.2.9/bin,启动后1.2.9/bin/cassandra。 任何想法有什么不对?

回答

0

问题在于我只是部分将生产群集迁移到本地环境。我已将整个system密钥空间文件和仅一些data文件复制为我的一个密钥空间。

我通过重做一切固定的问题:

  • 设置1.1.5本地
  • 使用cqlsh连接到它,抛弃了所有的其他keyspaces和表我没有本地可用
  • 迁移(不知道哪些人做了这个伎俩,假设我做了全部):1.1.5 - > 1.2.0 - > 1.2.8 - > 1.2.9 - > 2.0.0 - > 2.0.1 - > 2.0.7 。
  • 可能删除了Cassandra在启动时抱怨的任何不匹配的索引文件(不知道在做最后一次神奇的工作升级时是否遇到任何错误,但这让我在以前的尝试中通过版本前进)。我的猜测是卡桑德拉看着他们,但upgradesstables偶尔留下一些落后。
3

mytable_location_idx-he-6471.1.5的SSTable(he是版本,h是1.1和eh的第五版本)。再次运行upgradestables并验证所有sstables被迁移。在升级到2.0之前,sstable的版本应该从i开始,并且您希望它在ic之前。

+1

哇,像老板一样规定版本代码! – Aaron