You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将现有Cassandra节点数据同步至新节点以无损失停用旧节点?

单节点Cassandra 3.11.4零停机迁移全量数据同步方案

问题分析

你使用replace_address_first_boot参数启动新节点但未完成全量同步,核心原因是该参数用于替换故障节点,而你的场景是正常单节点迁移,应采用「集群扩展→同步→缩容」的零停机流程,而非直接替换。

修复&正确迁移步骤

1. 修正新旧节点配置一致性

确保新节点cassandra.yaml与旧节点以下核心配置完全一致:

  • cluster_name(集群名称)
  • partitioner(分区器,默认org.apache.cassandra.dht.Murmur3Partitioner)
  • endpoint_snitch(端点探测器,如SimpleSnitch)
  • num_tokens(令牌数量,默认256)

新节点需单独调整的配置:

  • listen_address/broadcast_address:新服务器IP
  • rpc_address/broadcast_rpc_address:新服务器IP
  • seeds:设置为旧节点IP(新节点需从旧节点拉取集群元数据与数据)

2. 清理新节点无效数据(针对当前已启动失败的情况)

停止新节点:

./nodetool stopdaemon

删除新节点所有数据目录(避免残留无效数据影响同步):

rm -rf <数据目录路径>/* <commitlog目录路径>/* <saved_caches目录路径>/*

3. 启动新节点并加入集群

不要使用replace_address_first_boot参数,直接启动新节点:

./cassandra

查看新节点logs/system.log,确认日志中出现「New node joined cluster」类信息,说明节点成功加入。

4. 监控全量同步进度

  • 查看集群节点状态:
nodetool status

等待新节点状态变为UN(Up/Normal),且两节点Load值逐渐趋近。

  • 查看同步进度:
nodetool netstats

当「Pending range streams」数值变为0,代表全量数据同步完成。

5. 切换应用连接并移除旧节点

  • 修改应用的Cassandra连接IP为新节点IP,验证业务正常运行。
  • 在旧节点上执行优雅下线命令:
nodetool decommission

等待旧节点完成数据清理并退出集群,再次执行nodetool status确认旧节点已被移除。

关键注意事项

  • 迁移全程保持旧节点运行,直到新节点同步完成、应用切换验证通过,避免数据丢失。
  • 确保新旧节点Cassandra版本严格一致(3.11.4),版本差异会导致同步失败。
  • 检查防火墙规则,确保新旧节点间7000(Gossip通信)、9042(CQL客户端)端口互通。

内容的提问来源于stack exchange,提问作者Alfred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 21:07:24