方案1: 生产环境迁移方案–服务不能停止
生产环境要求一般保证:
- 数据不能丢失
- 目标集群和源集群的redis服务不能停止
- 数据要实时同步
基于以上三点要求,我觉得唯一可以满足的方式就是通过集群的同步机制
。
增加一台
新的redis服务器,将其作为集群的slave节点
,这个服务器的数据可以和源数据库实时同步
。
以这台新增的服务器
为主节点
建立集群
或者哨兵
。这个集群的数据和源redis集群完全一致。
业务部署时更换ip
为新redis集群
。
确定业务没有问题后,切断新旧集群的同步。
这种方式可以比较可靠的完成数据迁移。
方案2:aof迁移-不停机,但数据不实时更新
这种方式优点在于可以不停机,在redis活跃状态也可以迁移。缺点是数据并不是实时更新的
。在源数据库copy数据到目标数据库完成导入期间,源数据库可能存在更新数据没有同步。
适用场景:希望可以在线迁移redis,同时可以接受数据不实时更新
# 登录redis1
redis-cli -h 172.20.0.1 -a password
源数据库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
aof还原
# 登录redis2
redis-cli -h 172.20.0.2 -a password
# 清空目标数据库数据
redis-cli -h 172.20.0.2 -a CqI3ACjr88Y5J8YD flushall
将step1中生成的appendonly.aof
文件copy到目标服务器的data目录
# 使用scp命令拷贝到目标服务器的data目录
scp ./* root@172.20.0.2:/etc/redis/
目标数据库数据导入
# 目标数据库数据导入
redis-cli -h 172.20.0.2 -a password --pipe < appendonly.aof
方案3:rdb方式迁移
这种方式比较简单粗暴,直接将数据库的rdb文件copy过来,在新的数据库下启动即可。
适用场景: 目标数据库可以重启,源数据库最好也可以关闭。
# 方法1:保存数据
redis-cli SAVE
# 方法2:保存文件
redis-cli --rdb /path/to/dump.rdb
将 dump.rdb
文件复制到目标 Redis 实例
所在的服务器。
# 复制到目标服务器
scp /path/to/dump.rdb user@target_server:/path/to/destination/
导入数据:将 dump.rdb 文件放置到目标 Redis 实例的数据目录,并重启 Redis。
# 方法1: 将 dump.rdb 文件放置到目标 Redis 实例的数据目录
mv /path/to/destination/dump.rdb /var/lib/redis/
# 方法2:
cat /path/to/destination/dump.rdb | redis-cli -h target_redis_host -p target_redis_port --pipe
# 重启 Redis服务
systemctl restart redis
方法4:使用redis-dump
# 安装redis-dump
pip install redis-dump
# 备份为json数据
redis-dump > backup.json
# 还原json数据
redis-load < backup.json