Cassandra数据存储磁盘更换咨询:保留数据替换原有磁盘
单节点Cassandra更换磁盘并保留数据的可行方案
作为常年折腾Cassandra运维的老鸟,给你一套经过实战验证的步骤,确保数据不丢、服务能正常起来:
一、准备阶段:把风险降到最低
- 先做快照备份:哪怕是单节点,备份也是底线操作。执行命令:
快照会存在原有数据目录的nodetool snapshot -t pre_disk_swapdata/keyspace/table/snapshots/pre_disk_swap下,后续出问题可以用这个恢复。 - 处理新磁盘:
- 把新磁盘挂载到服务器,比如挂载到
/mnt/new_cassandra - 格式化磁盘(根据你的文件系统选,比如ext4):
mkfs.ext4 /dev/xxx(xxx是新磁盘设备名,别搞错!) - 设置永久挂载(编辑
/etc/fstab,添加一行/dev/xxx /mnt/new_cassandra ext4 defaults 0 0,然后执行mount -a验证) - 把新目录权限改成Cassandra用户所属:
chown -R cassandra:cassandra /mnt/new_cassandra
- 把新磁盘挂载到服务器,比如挂载到
二、核心迁移操作
- 停止Cassandra服务:
一定要等服务完全停稳,别着急下一步,可以用sudo systemctl stop cassandraps aux | grep cassandra确认没有相关进程。 - 复制原有数据到新磁盘:
用rsync比cp更靠谱,能校验数据完整性,还支持断点续传:
这里注意源路径末尾的rsync -avz /var/lib/cassandra/ /mnt/new_cassandra//,意思是复制目录里的内容,而不是把整个目录复制进去。 - 修改Cassandra配置文件:
找到cassandra.yaml(通常在/etc/cassandra/下),修改以下几个关键路径:
另外检查data_file_directories: - /mnt/new_cassandra/data commitlog_directory: /mnt/new_cassandra/commitlog saved_caches_directory: /mnt/new_cassandra/saved_cachescassandra-env.sh里有没有配置自定义的堆dump、日志路径,如果有也要同步改成新磁盘的路径,避免启动报错。
三、验证与收尾
- 启动Cassandra服务:
启动后看日志sudo systemctl start cassandratail -f /var/log/cassandra/system.log,确认没有权限错误、路径找不到的报错。 - 验证数据与状态:
- 用
nodetool status看节点状态是不是UN(正常) - 用
nodetool info查看Data Directory是不是已经变成新磁盘的路径 - 登录
cqlsh,随便查几个核心表的数据,比如SELECT COUNT(*) FROM your_keyspace.your_table;,确认数据和之前一致
- 用
- 清理旧磁盘(可选):
确认一切正常后,可以卸载旧磁盘,删除旧数据目录的内容(或者保留一段时间再删,留个后手)。
额外提醒
- 单节点操作必然会有服务 downtime,尽量选业务低峰期执行
- 如果迁移过程中rsync中断,直接重新执行命令即可,它会自动跳过已复制的内容
- 新磁盘的IO性能最好和旧盘相当或更好,不然可能影响Cassandra的读写性能
内容的提问来源于stack exchange,提问作者iMajna
相关产品推荐
相关产品推荐

