项目推荐: https://gitee.com/log4j/pig
问题
由于生产环境的各种原因,我们需要对现有服务器进行迁移,包括线上正在运行的 redis 集群环境 如何去做?
涉及到数据源变动,原有数据如何平滑迁移到新实例,从而可以实现无缝迁移?
方案汇总
基于 redis 自身的RDB/AOF 备份机制
![f0d1085b8a09196b39e227a85fb89415.png](https://img-blog.csdnimg.cn/img_convert/f0d1085b8a09196b39e227a85fb89415.png)
- 执行 savebgsave 触发数据持久化 RDB文件
- 拷贝redis备份文件(dump.rdb)到目标机器
- 重启目标实例重新load RDB 文件
- 关于 save/bgsave 的区别
命令 save bgsave IO阻塞 同步 异步 复杂度 O(n) O(n) 缺点 阻塞客户端 需要fork,消耗内存
基于 redis-dump导入导出 json备份
https://github.com/delano/redis-dump
![b0b58f2b2ed1e09c6336f7527cda46d5.png](https://img-blog.csdnimg.cn/img_convert/b0b58f2b2ed1e09c6336f7527cda46d5.png)
基于 redis-shake 实现 redis-cluster 迁移
https://github.com/alibaba/RedisShake
![f49efe356fdac14e9023f21251ca45a4.png](https://img-blog.csdnimg.cn/img_convert/f49efe356fdac14e9023f21251ca45a4.png)
- 基于 Docker 创建两个集群
- 配置 redis-shake.conf
- 执行全量、增量同步
![79603ca22a3e10e8e95c7a9767e2d1ea.gif](https://img-blog.csdnimg.cn/img_convert/79603ca22a3e10e8e95c7a9767e2d1ea.gif)
- restful监控指标
![23fd46f5ff5021e88ec3231728d15d44.png](https://img-blog.csdnimg.cn/img_convert/23fd46f5ff5021e88ec3231728d15d44.png)