Cassandra从2.0.x升级到2.1.x或3.0.x

时间:2016-09-30 16:43:03

标签: cassandra cassandra-2.0 cassandra-2.1 cassandra-3.0 database-update

我已经搜索了此问题的先前版本,但似乎没有一个适合我的情况。我有一个运行2.0.x的现有Cassandra集群。我已经分配了新的虚拟机,因此我不想升级现有的Cassandra节点 - 而是希望迁移到a)新虚拟机和b)更新版本的Cassandra。

  1. 我知道就地升级,我会升级到最新的2.0.x,然后升级到最新的2.1.x. AFAIK,这里没有SSTable不一致。如果我通过添加新节点来实现此路由,我假设我会按照数据存储区指令添加新节点/退役旧节点吗?

  2. 鉴于上述情况,是否可以从2.0.x移至3.0.x?我知道SSTable格式不同;但是,如果我添加新节点(而不是在磁盘上重新使用SSTable),这有关系吗?

  3. 在我看来,#2必须工作 - 否则,它意味着任何需要SSTable升级的升级都需要所有节点同时脱机;否则,在某个时刻会在同一个集群中运行混合的2.x.x和3.0.x版本。

    我完全错了吗?有没有人有这方面的经验?

2 个答案:

答案 0 :(得分:3)

是的,可以将数据迁移到其他环境(使用sstableloader更新后的Cassandra的新vm,但是您需要C * 3.0.5及更高版本,因为该版本已添加支持从以前的版本上传sstables。

完成该过程后,建议执行nodetool upgradesstables以确保数据不兼容,并nodetool cleanup

关于你的评论... it implies that any upgrade requiring SSTable upgrades would require all nodes to be taken offline simultaneously;...不是真的;一次升级一个节点将创建一个混合集群,其中包含您提到的两个版本的节点,这不是最佳选择,但可以避免生产中的任何停机时间。 (请注意,此操作的影响取决于应用程序中使用的一致性级别。)

答案 1 :(得分:2)

不要担心迁移。您只需将Cassandra 2.0.X群集迁移到Cassandra 3.0.X即可。但是如果你将集群Cassandra 2.0.X迁移到最新的Cassandra 2.X.X然后Cassandra 3.0.X,它会更好。你需要遵循一些步骤 -

  1. 备份数据
  2. 卸载现有版本
  3. 安装要升级的版本
  4. 恢复数据
  5. 在进行迁移时,您需要始终小心数据。对于数据备份和还原,您可以采用两种方式 -

    1. 创建sstables的快照,然后在安装新版本的cassandra之后,将文件放到数据位置并运行sstableloader。
    2. 将您的架构备份到.cql文件并将所有表格复制到.csv,然后在安装新版本的cassandra后,从.cql获取架构并复制每个.csv文件中的所有表格。
    3. 如果您完全相信如何完成迁移,那么您可以编写一个bash脚本来完成备份和还原步骤。