2017-03-03 124 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