【问题标题】:Cassandra upgrade from 2.0.x to 2.1.x or 3.0.xCassandra 从 2.0.x 升级到 2.1.x 或 3.0.x
【发布时间】:2023-03-30 00:12:02
【问题描述】:

我已经搜索过这个问题的以前版本,但似乎没有一个适合我的情况。我有一个运行 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.x.x 和 3.0.x 版本。

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 另外,您应该在升级前运行nodetool drain。它将刷新内存表。
    【解决方案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. 恢复数据

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-06-24
      • 2017-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 2018-09-16
      • 1970-01-01
      相关资源
      最近更新 更多