1

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

  1. 我知道就地升级,我会升级到最新的2.0.x,然后升级到最新的2.1.x. AFAIK,这里没有SSTable不一致。如果我通过添加新节点进入该路线,我假设我会遵循datastax指令来添加新节点/退役旧节点?

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

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

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

回答

3

是的,可以将数据迁移到不同的环境(使用更新后的Cassandra的新vm使用sstableloader,但需要C * 3.0.5及以上版本,因为该版本添加了对上一版本上载sstable的支持。

一旦这个过程完成后,建议执行nodetool upgradesstables,以保证有在数据没有不兼容,并且nodetool cleanup

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

+0

另外,你应该在升级之前运行'nodetool drain'。它将刷新memtables。 – questionare

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. 当你在做迁移恢复数据

的版本,你需要总是小心你的数据。对于数据备份和恢复,你可以遵循两个ways-

  1. 创建你sstables的快照,然后安装卡桑德拉的新版本中,文件放置到数据位置和运行sstableloader后。
  2. 备份您的架构的一个.cql文件,复制所有表.csv,然后在安装卡桑德拉的新版本之后,源您的架构从.cql和复制从每一个.csv文件中的所有表。

如果您完全相信您将如何完成迁移,那么您可以编写一个bash脚本来完成备份和恢复步骤。