能否将Cassandra 1.2快照导入4.x集群?集群升级方案咨询
Cassandra 1.2.x(3节点无vnodes)升级至4.x并扩容操作指南
先明确:不能直接快照迁移到4.x新集群
1.2到4.x跨了好几个大版本,底层存储格式、协议、元数据结构差异极大,直接把老集群的快照拿到4.x集群恢复,大概率会出现数据损坏、节点无法启动的问题,必须按版本阶梯升级,或者结合过渡集群做数据迁移。
推荐方案:滚动升级+逐步扩容(风险最低)
第一步:先升级到2.0.x(第一个过渡版本)
- 准备工作:
- 给所有节点做全量备份:执行
nodetool snapshot保存数据,同时备份cassandra.yaml、cqlshrc等配置文件 - 确认集群状态正常:用
nodetool status检查所有节点都是UN状态 - 条件允许的话暂停业务写入,降低升级风险
- 给所有节点做全量备份:执行
- 逐个节点滚动升级:
- 停止目标节点的Cassandra服务:
service cassandra stop - 卸载1.2.x版本,安装2.0.x的最新补丁版(比如2.0.17,避免使用过旧的小版本)
- 复制备份的配置文件,调整适配2.0.x的参数(保持
listen_address、seeds不变,暂不开启vnodes) - 启动节点:
service cassandra start,等待节点重新加入集群(nodetool status显示为UN) - 完成一个节点后再操作下一个,禁止同时升级多个节点
- 停止目标节点的Cassandra服务:
第二步:从2.0.x升级到2.1.x
- 操作流程和上一步基本一致:
- 安装2.1.x的最新稳定版(比如2.1.22)
- 节点启动后必须执行
nodetool upgradesstables,将SSTable格式转换为2.1兼容版本 - 确认集群状态无异常后,再继续升级下一个节点
第三步:从2.1.x升级到2.2.x
- 依旧采用滚动升级方式:
- 安装2.2.x的最新版(比如2.2.19)
- 启动节点后执行
nodetool upgradesstables -a,强制全量转换SSTable格式 - 检查系统日志,确保无报错后再推进下一个节点
第四步:从2.2.x升级到3.x(关键步骤,同步开启vnodes+扩容)
- 这一步可以同时完成vnodes开启和节点扩容:
- 先升级现有3个节点到3.x最新稳定版(比如3.11.14):
- 每个节点升级时,修改
cassandra.yaml,将num_tokens设置为256(开启vnodes),seeds保持原有配置不变 - 启动节点后执行
nodetool upgradesstables完成格式转换
- 每个节点升级时,修改
- 添加新节点扩容:
- 新节点安装与现有集群一致的3.x版本
- 配置
cassandra.yaml:设置num_tokens:256,seeds填写现有集群的种子节点IP,集群名称、snitch等配置必须与老节点完全一致 - 启动新节点,等待数据同步完成(
nodetool status显示为UN),可选执行nodetool cleanup清理不属于该节点的数据 - 重复操作添加需要的节点数量
- 先升级现有3个节点到3.x最新稳定版(比如3.11.14):
第五步:从3.x升级到4.x(最终版本)
- 先确认3.x集群状态完全正常,所有节点均完成SSTable升级:
- 逐个节点滚动升级:
- 停止节点服务,卸载3.x版本,安装4.x最新稳定版(比如4.1.3)
- 迁移配置文件:对比4.x的
cassandra.yaml模板,更新原有配置(注意4.x部分配置项有变更,如JVM参数、commitlog同步设置等) - 启动节点,等待其加入集群,执行
nodetool upgradesstables转换为4.x兼容的SSTable格式 - 对所有节点(包括新增的扩容节点)重复上述操作
- 逐个节点滚动升级:
备选方案:用sstableloader迁移数据(适合重建集群场景)
如果不想逐步跨版本升级,也可以采用过渡集群的方式:
- 搭建一个3.x版本的过渡集群(开启vnodes)
- 在老1.2.x集群执行
nodetool snapshot,导出SSTable文件 - 使用
sstableloader工具将SSTable导入到3.x过渡集群,验证数据完整性 - 将3.x过渡集群升级到4.x,同时添加新节点完成扩容
- 最后切换业务流量到4.x集群,下线老集群
注意事项
- 每个版本升级完成后,必须等待集群完全稳定(所有节点
UN状态、日志无报错)再推进下一步,切勿操之过急 - 升级前务必做全量备份,出现问题时可快速回滚
- 4.x版本要求使用JDK11或JDK17,升级前需确保所有节点的JDK版本符合要求
- 扩容的新节点,硬件配置、网络环境尽量与老节点保持一致,避免出现性能瓶颈
内容的提问来源于stack exchange,提问作者Zen
相关产品推荐
相关产品推荐

