2016-06-07 38 views
0

所以我搞砸了,意外升級了我們的Cassandra 2盒到Cassandra 3.數據完好無損,但我需要將它恢復到Cassandra 2以兼容其他工具。我在這裏閱讀How to downgrade Cassandra 3.0.0 -> 2.x?的帖子,如果這是需要的(不是那麼多的數據),我不得不手動將數據浮動。降級到卡桑德拉2

升級使用apt-get dist-upgrade偶然做,但沒有被完成之後,有評論詢問使用nodetool,它不運行,除非它是apt-get process的一部分。我知道關於管理卡桑德拉的約0。

我已經建立了一個新的卡桑德拉2服務器的下列版本:

[cqlsh 4.1.1 | Cassandra 2.0.17 | CQL spec 3.1.1 | Thrift protocol 19.39.0] 

卡桑德拉3服務器上的版本:

[cqlsh 5.0.1 | Cassandra 3.0.6 | CQL spec 3.4.0 | Native protocol v4] 

我用COPY命令導出所有的數據轉換爲CSV文件,並使用鍵空間上的DESC使其顯示所有表格及其各自的標題和類型。

如果我嘗試使用.cql文件我從DESC命令創建重建密鑰空間和表格,它失敗:

cqlsh -u cassandra -p cassandra -f "mykeyspace.cql" 
mykeyspace.cql:22:Bad Request: Unknown property 'crc_check_chance' 
mykeyspace.cql:40:Bad Request: Unknown property 'crc_check_chance' 
mykeyspace.cql:57:Bad Request: Unknown property 'crc_check_chance' 
... 

這似乎是創建密鑰空間,我可以在cqlsh瀏覽它,但它沒有任何表格,所以我無法從CSV導入數據。

我想也許crc_check_chance是在3.x中引入的一個新東西,所以我嘗試刪除它並在刪除密鑰空間後重新運行.cql文件,但它仍然失敗,只是在其他一些選項上。

我能做些什麼來將這些數據重新存入卡桑德拉2?

編輯:下面是來自出口,我從我的(目前的)有一個表卡桑德拉3實例:

CREATE TABLE mykeyspace.users (
    username text PRIMARY KEY, 
    first_name text, 
    last_name text, 
    roles set<text> 
) WITH bloom_filter_fp_chance = 0.01 
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'} 
    AND comment = '' 
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'} 
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'} 
    AND crc_check_chance = 1.0 
    AND dclocal_read_repair_chance = 0.1 
    AND default_time_to_live = 0 
    AND gc_grace_seconds = 864000 
    AND max_index_interval = 2048 
    AND memtable_flush_period_in_ms = 0 
    AND min_index_interval = 128 
    AND read_repair_chance = 0.0 
    AND speculative_retry = '99PERCENTILE'; 

這種失敗,但如果我刪除以下領域,似乎建表:

AND crc_check_chance = 1.0 
    AND min_index_interval = 128 
    AND max_index_interval = 2048 
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'} 

即使在創建表,數據無法從CSV導入,這可能是我沒有正確地使用命令:

cqlsh> USE mykeyspace; 
cqlsh:mykeyspace> COPY users FROM '/home/user/cassandra/users.csv'; 
Bad Request: line 1:118 no viable alternative at input ')' 
Aborting import at record #0 (line 1). Previously-inserted values still present. 
+0

您是否已經運行nodetool upgradesstables? – fromanator

+0

不明確。儘管如此,我也不知道是否包含apt-get升級順序。 – Andrew

回答

1

所以它聽起來像是意外升級了apt-get upgrade,它不會自動運行nodetool upgradesstables(這是一個手動步驟,請參閱upgrade guide#9,它是在通過APT更新後運行的)。

所以,你應該能夠做到以下幾點:

  1. 需要注意:首先備份您的羣集數據繼續(以防萬一)
  2. 找到要降級到apt-cache showpkg cassandra這卡桑德拉版本之前
  3. 降級您的二進制文件的舊版本sudo apt-get install cassandra=<desired-cassandra-version>
  4. 驗證Cassandra是舊版本,它的工作原理
  5. 告訴APT引腳你r包版本,以避免未來災難apt-mark hold cassandra
+0

我試過了,它看起來像apt做了安裝,但cassandra無法啓動,我無法在節點上使用cqlsh。 – Andrew

+0

我相信APT在升級過程中會覆蓋你的配置文件[來自debian upgrade分區](http://docs.datastax.com/en/latest-upgrade/upgrade/cassandra/upgradeDebC_t.html#task_ds_rvs_qzr_ck) 。所以我會仔細檢查你的配置文件是否設置爲你所期望的。 – fromanator

+0

我認爲這是無法解決的問題。也許?我在日誌中收到以下錯誤信息,與Cassandra的全新安裝接近,而沒有注意到我關心的數據:'CassandraDaemon.java:638 - 檢測到無法讀取的sstables/var/lib/cassandra/data/mykeyspace ... '如果我重新格式化日誌以使其更具可讀性,那麼所有表格都會混淆並最終完成'請檢查NEWS.txt並確保您已通過所有必需的中間版本進行升級'。我不認爲我可以運行升級,因爲它不能與破損的表連接嗎? – Andrew