我已经搜索了此问题的先前版本,但似乎没有一个适合我的情况。我有一个运行2.0.x的现有Cassandra集群。我已经分配了新的虚拟机,因此我不想升级现有的Cassandra节点 - 而是希望迁移到a)新虚拟机和b)更新版本的Cassandra。
我知道就地升级,我会升级到最新的2.0.x,然后升级到最新的2.1.x. AFAIK,这里没有SSTable不一致。如果我通过添加新节点来实现此路由,我假设我会按照数据存储区指令添加新节点/退役旧节点吗?
鉴于上述情况,是否可以从2.0.x移至3.0.x?我知道SSTable格式不同;但是,如果我添加新节点(而不是在磁盘上重新使用SSTable),这有关系吗?
在我看来,#2必须工作 - 否则,它意味着任何需要SSTable升级的升级都需要所有节点同时脱机;否则,在某个时刻会在同一个集群中运行混合的2.x.x和3.0.x版本。
我完全错了吗?有没有人有这方面的经验?
答案 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,它会更好。你需要遵循一些步骤 -
在进行迁移时,您需要始终小心数据。对于数据备份和还原,您可以采用两种方式 -
.cql
文件并将所有表格复制到.csv
,然后在安装新版本的cassandra后,从.cql
获取架构并复制每个.csv
文件中的所有表格。如果您完全相信如何完成迁移,那么您可以编写一个bash脚本来完成备份和还原步骤。