Redis数据迁移方式

生产环境可能涉及到单台或者redis集群的迁移,比较幸运的是redis的提供了很多种数据迁移的方式,并且都非常简单。具体迁移的方式大家可以参考其他博客。我这里重点讨论生产环境迁移的需求和解决方案。

方案一 生产环境迁移方案

生产环境要求一般保证

  1. 数据不能丢失
  2. 目标集群和源集群的redis服务不能停止
  3. 数据要实时同步

基于以上三点要求,我觉得唯一可以满足的方式就是通过集群的同步机制。

  1. 增加一台新的服务器,将其作为集群的slave节点,这个服务器的数据可以和源数据库实时同步。
  2. 以这台服务器为主节点建立集群或者哨兵。这个集群的数据和源redis集群完全一致。
  3. 业务部署是更换ip为新的集群
  4. 确定业务没有问题后,切断新旧集群的同步。

这种方式可以比较可靠的完成数据迁移

方案二: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过来,在新的数据库下启动即可。

适用场景: 目标数据库可以重启,源数据库最好也可以关闭。

具体操作大家可以参考其他人的博客