Cassandra升级是否需要对保存TTLed数据的集群运行nodetool upgradestables

时间:2019-03-22 16:57:30

标签: apache cassandra datastax cassandra-2.0 cassandra-3.0

我正在运行3节点apache cassandra集群作为docker容器,其中保存了具有45天TTL的时间序列数据。

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

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

    bin / nodetool -h cassandra1 -u ca_itoa -pw ca_itoa排水

  3. 停止cassandra1节点

  4. 启动新的cassandra 3.11.4容器

  5. 升级SSTable

    bin / nodetool -u ca_itoa -pw ca_itoa upgradestables

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

关于升级过程,我有几个问题-

  1. 步骤是否正确?
  2. 是否必须运行upgradesstables命令。这很耗时,我想看看是否可以避免。数据已设置TTL。 Cassandra是否将继续以新的SSTable格式写入,而旧的SS​​Table数据将在到期时被清除?假设在45天后,所有SSTable都将采用新的闪亮格式。

2 个答案:

答案 0 :(得分:2)

是的,当您从2.2.x升级到3.11.4时,需要在cassandra升级后在每个节点上运行nodetool sstableupgrade。 sstable文件格式和ext也会更改。您可以在后台运行此过程,不会造成任何问题。请参阅以下链接以获取更多详细信息https://blog.thethings.io/upgrading-apache-cassandra-cluster/

答案 1 :(得分:0)

还有一些其他想法:

对于第6步,您实际上不必立即运行upgradesstables。实际上,如果要升级生产系统,最好不要等到应用程序团队验证他们可以正常连接后再进行升级。请记住,在2.2中可以使用的较旧版本的驱动程序可能无法在3.11.4中使用。

为此,我将等到整个群集在新版本上运行,然后在每个节点上运行upgradesstables。。

  

运行upgradesstables命令是否强制?

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

Cassandra 3包含对存储引擎的重要升级,因此磁盘占用空间小得多。我升级的一个集群的磁盘需求减少了 90%

此外,在读取可能分散在旧的SSTable文件以及新的SSTable文件中的记录时,您将招致额外的延迟。读取多个文件中的记录是很糟糕的。但是现在您将不得不强制Cassandra读取和整理两种格式的结果。

因此,尽管我不会说这是“强制性的”,但我肯定会说这符合“好主意”。