cassandra 升级是否需要 运行 nodetool upgradesstables 用于集群保存 TTLed 数据

Does cassandra upgrade require to run nodetool upgradesstables for cluster holding TTLed data

我运行将 3 节点 apache cassandra 集群作为 docker 容器保存时间序列数据,TTL 为 45 天。

我打算将当前的 cassandra 版本 2.2.5 升级到 cassandra 3.11.4 版本。为升级确定了以下步骤 -

  1. 备份现有数据
  2. 刷新其中一个cassandra节点

    bin/nodetool -h cassandra1 -u ca_itoa -pw ca_itoa drain

  3. 停止cassandra1节点

  4. 启动新的cassandra 3.11.4容器

  5. 升级 SSTable

    bin/nodetool -u ca_itoa -pw ca_itoa 升级表

  6. 检查节点状态。对其余节点重复该过程

我对升级过程有几个问题 -

  1. 步骤是否正确?
  2. 是否强制执行运行 upgradesstables 命令。这很费时间,我想看看我是否可以避免。数据已设置 TTL。 cassandra 会继续以新的 SSTable 格式写入,而旧的 SSTable 数据会在到期时被清理吗?假设在 45 天后,所有 SSTable 都将采用新的闪亮格式。

是的,当您从 2.2.x 升级到 3.11.4 时,您需要在升级 cassandra 后在每个节点上 运行 nodetool sstableupgrade。 sstable 文件格式和ext 也随之改变。您可以在后台 运行 此过程,它不会产生任何问题。请参考以下链接了解更多详情https://blog.thethings.io/upgrading-apache-cassandra-cluster/

一些额外的想法:

对于第 6 步,您实际上不必立即运行 upgradesstables。事实上,如果您要升级生产系统,最好在应用程序团队确认他们可以正常连接之前不升级。请记住,适用于 2.2 的旧版本驱动程序可能不适用于 3.11.4。

为此,我会等到整个集群 运行ning 在新版本 before 运行ning upgradesstables on每个节点。

Is it manodatory to run upgradesstables command?

由于每个 Cassandra 版本都能够读取自己的 SSTable 格式以及之前的主要版本,我想这不是 强制性的。但这绝对是您应该想要做的事情。尤其是升级到 3.x.

Cassandra 3 对存储引擎进行了 重大 升级,从而大大减少了磁盘占用空间。我升级的一个集群的磁盘需求减少了 90%

此外,您在读取可能分布在旧 SSTable 文件和新文件中的记录时会产生额外的延迟。跨多个文件读取记录已经够糟糕了。但是现在您将迫使 Cassandra 读取和整理两种格式的结果。

所以虽然我不会说它是 "mandatory,",但我肯定会说它符合 "good idea."