1

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

  1. 我知道就地升级,我会升级到最新的 2.0.x,然后升级到最新的 2.1.x。AFAIK,这里没有 SSTable 不一致。如果我通过添加新节点走这条路线,我假设我会按照 datastax 说明添加新节点/停用旧节点?

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

在我看来,#2 必须起作用——否则,这意味着任何需要 SSTable 升级的升级都需要同时使所有节点脱机;否则,有时会在同一集群中运行混合的 2.xx 和 3.0.x 版本。

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

4

2 回答 2

3

不用担心迁移。您可以简单地将 Cassandra 2.0.X 集群迁移到 Cassandra 3.0.X。但是,如果您将集群 Cassandra 2.0.X 迁移到最新的 Cassandra 2.XX 然后是 Cassandra 3.0.X,那就更好了。您需要遵循一些步骤-

  1. 备份数据
  2. 卸载当前版本
  3. 安装你要升级的版本
  4. 恢复数据

在进行迁移时,您需要始终小心您的数据。对于数据备份和恢复,您可以遵循两种方式 -

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

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

于 2016-10-01T07:30:13.890 回答
3

是的,可以将数据迁移到不同的环境(使用sstableloader更新 Cassandra 的新虚拟机,但您需要 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;...不属实;一次升级一个节点将创建一个混合集群,其中包含您提到的两个版本的节点,这不是最佳的,但可以让您避免生产中的任何停机时间。(请注意,此操作的影响将取决于应用程序中使用的一致性级别。)

于 2016-10-01T01:05:04.137 回答