降级到Cassandra 2

时间:2016-06-07 12:47:39

标签: database cassandra debian

所以我搞砸了,不小心将我们的Cassandra 2盒子升级到了Cassandra 3.数据完好无损,但我需要把它恢复到Cassandra 2以与其他工具兼容。我在这里阅读了帖子How to downgrade Cassandra 3.0.0 -> 2.x?,我可以手动浮动数据,如果它需要的话(它不是那么多的数据)。

使用apt-get dist-upgrade意外地完成了升级,但之后没有做任何事情,有关于使用nodetool的评论,除非它是其中的一部分,否则它无法运行apt-get process。我知道关于管理卡桑德拉的事情只有0个。

我已经使用以下版本构建了一个新的Cassandra 2服务器:

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

Cassandra 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文件,但它仍然失败,只是在其他选项上。

如何将此数据恢复到Cassandra 2?

编辑:这是我从(当前)Cassandra 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.

1 个答案:

答案 0 :(得分:1)

所以听起来它是由apt-get upgrade意外升级的,它不会自动运行nodetool upgradesstables(这是一个手动步骤,请参阅通过APT更新后运行的upgrade guide#9)

所以你应该能够做到以下几点:

  1. 必需注意:首先备份您的群集数据,然后再继续(以防万一)
  2. 找出要降级到apt-cache showpkg cassandra
  3. 的Cassandra版本
  4. 将二进制文件降级为旧版sudo apt-get install cassandra=<desired-cassandra-version>
  5. 验证Cassandra是旧版本并且可以正常使用
  6. 告诉APT固定您的软件包版本,以避免将来发生apt-mark hold cassandra
  7. 灾难