Redis数据迁移方式
生产环境可能涉及到单台或者redis集群的迁移,比较幸运的是redis的提供了很多种数据迁移的方式,并且都非常简单。具体迁移的方式大家可以参考其他博客。我这里重点讨论生产环境迁移的需求和解决方案。
方案一 生产环境迁移方案
生产环境要求一般保证
- 数据不能丢失
- 目标集群和源集群的redis服务不能停止
- 数据要实时同步
基于以上三点要求,我觉得唯一可以满足的方式就是通过集群的同步机制。
- 增加一台新的服务器,将其作为集群的slave节点,这个服务器的数据可以和源数据库实时同步。
- 以这台服务器为主节点建立集群或者哨兵。这个集群的数据和源redis集群完全一致。
- 业务部署是更换ip为新的集群
- 确定业务没有问题后,切断新旧集群的同步。
这种方式可以比较可靠的完成数据迁移
方案二:aof迁移-不停机
这种方式优点在于可以不停机,在redis活跃状态也可以迁移。缺点是数据并不是实时更新的。在源数据库copy数据到目标数据库完成导入期间,源数据库可能存在更新数据没有同步。
适用场景:希望可以在线迁移redis,同时可以接受数据不实时更新
step1 源数据库aof导出
# 生成aof到数据目录
redis-cli -h 172.20.0.1 -a password config set appendonly yes
# 查看数据目录位置
config get dir
可以在目录查看生成的aof文件,即所有数据的操作记录
# 关闭aof功能(可选)
redis-cli -h 172.20.0.1 -a password config set appendonly no
step2 目标数据库操作
# 清空目标数据库数据
redis-cli -h 172.19.27.146 -a CqI3ACjr88Y5J8YD flushall
# 将step1中生成的appendonly.aof文件copy到目标服务器的data目录
参考命令(用自己喜欢的方式):
scp ./* root@172.19.27.147:/etc/redis/
# 目标数据库数据导入
redis-cli -h 172.20.0.2 -a password --pipe < appendonly.aof
说明
上面命令其实都可以直接登录后,直接操作命令部分
redis-cli -h 172.20.0.2 -a password作为共同部分可以不敲
方案三rdb方式迁移
这种方式比较简单粗暴,直接将数据库的rdb文件copy过来,在新的数据库下启动即可。
适用场景: 目标数据库可以重启,源数据库最好也可以关闭。
具体操作大家可以参考其他人的博客