2016-06-07 40 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