我正在运行3节点apache cassandra集群作为docker容器,其中保存了具有45天TTL的时间序列数据。
我打算将当前的Cassandra版本2.2.5升级到cassandra 3.11.4版本。确定了要升级的以下步骤-
刷新其中一个cassandra节点
bin / nodetool -h cassandra1 -u ca_itoa -pw ca_itoa排水
停止cassandra1节点
启动新的cassandra 3.11.4容器
升级SSTable
bin / nodetool -u ca_itoa -pw ca_itoa upgradestables
检查节点状态。对其余节点重复该过程
关于升级过程,我有几个问题-
答案 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读取和整理两种格式的结果。
因此,尽管我不会说这是“强制性的”,但我肯定会说这符合“好主意”。