如何将Cassandra快照恢复至新集群?多表Keyspace跨服务器恢复方法
Cassandra 快照恢复至新服务器/新集群操作指南
前提条件
- 已通过
nodetool snapshot完成原集群中XYZ keyspace的快照备份,快照文件完整可用 - 新环境(服务器/集群)的Cassandra版本与原集群完全一致,避免数据格式不兼容
一、恢复至单台新服务器
- 初始化新服务器环境
- 安装对应版本的Cassandra,配置
cassandra.yaml(如数据目录data_file_directories、集群名称等),启动Cassandra服务。
- 安装对应版本的Cassandra,配置
- 创建匹配的Keyspace与表结构
- 用
cqlsh连接新服务器,创建与原集群结构完全一致的XYZ keyspace(单节点场景建议使用SimpleStrategy,副本数设为1),并创建所有100张表的结构(可从原集群导出CQL语句:cqlsh -e "DESCRIBE KEYSPACE xyz;" > xks_schema.cql,再在新服务器执行该文件)。
- 用
- 复制快照文件到对应目录
- 原集群中,每个表的快照路径为:
/var/lib/cassandra/data/xyz/<table_name>-<uuid>/snapshots/<your_snapshot_name>/ - 将每个表快照目录下的所有文件(
*.db、*.txt、*.stats等),复制到新服务器对应表的数据目录:/var/lib/cassandra/data/xyz/<table_name>-<new_uuid>/ - 修改文件权限为Cassandra用户所有:
chown -R cassandra:cassandra /var/lib/cassandra/data/xyz/
- 原集群中,每个表的快照路径为:
- 刷新表数据
- 在新服务器执行:
nodetool refresh xyz(一次性刷新整个keyspace的所有表),或逐个表刷新:nodetool refresh xyz <table_name>
- 在新服务器执行:
- 验证恢复结果
- 用
cqlsh执行查询语句,确认各表数据完整。
- 用
二、恢复至新集群
- 初始化新集群环境
- 完成新集群的节点部署、配置(确保集群名称与原集群一致,或按需修改),启动所有节点并确认集群状态正常(
nodetool status显示所有节点为UN状态)。
- 完成新集群的节点部署、配置(确保集群名称与原集群一致,或按需修改),启动所有节点并确认集群状态正常(
- 创建匹配的Keyspace与表结构
- 在集群任意节点用
cqlsh创建XYZ keyspace,复制策略与副本数需适配新集群拓扑(如3节点集群用SimpleStrategy,副本数设为3;多数据中心场景用NetworkTopologyStrategy),并创建所有表的结构(同单服务器步骤,导出原集群schema后执行)。
- 在集群任意节点用
- 分布式复制快照文件
- Cassandra数据按token范围分布,需将原集群每个节点上的快照数据,复制到新集群中对应token范围的节点:
- 用
nodetool status分别查看原集群与新集群的节点token范围,匹配对应关系 - 将原节点上属于某token范围的XYZ keyspace表快照,复制到新集群对应token节点的表数据目录下
- 若不确定token对应关系,可将所有表的快照文件复制到新集群的所有节点(效率略低,但操作简单)
- 用
- 复制完成后修改文件权限:
chown -R cassandra:cassandra /var/lib/cassandra/data/xyz/
- Cassandra数据按token范围分布,需将原集群每个节点上的快照数据,复制到新集群中对应token范围的节点:
- 刷新集群所有节点的数据
- 在新集群的每个节点上执行:
nodetool refresh xyz
- 在新集群的每个节点上执行:
- 修复集群数据一致性
- 执行全量修复确保数据在集群节点间同步:
nodetool repair -full xyz
- 执行全量修复确保数据在集群节点间同步:
- 验证恢复结果
- 在集群多个节点用
cqlsh查询数据,确认各节点数据一致且完整。
- 在集群多个节点用
关键注意事项
- 版本一致性:原集群与新环境的Cassandra大版本、小版本必须完全匹配,否则会因数据格式差异导致恢复失败
- Schema一致性:新环境的Keyspace与表结构(包括列类型、主键、索引、TTL设置等)必须与原集群完全一致
- 快照完整性:确保原快照是在集群稳定状态下创建的,建议创建快照前先执行
nodetool flush将内存数据刷入磁盘 - 权限问题:复制文件后务必修改权限为Cassandra用户所有,否则进程无法读取数据
内容的提问来源于stack exchange,提问作者Akshay Roy
相关产品推荐
相关产品推荐

