迁移背景:原阿里云账号下ECS服务器和云数据库快过期了,客户选择不续费,自行购买新账户,想把生产上的项目和数据全部由A阿里云账户迁移到B阿里云账户。迁移的过程是取用户访问较少的时间段挂维护页,进行停机迁移。项目的迁移比较简单,保持环境一致,将配置改为迁移完数据后的数据库地址。这里讲讲阿里云Redis迁移的过程。
阿里云文档里对于Redis迁移的选择描述的很清楚:
一.DTS数据迁移:
这是阿里云提供的最稳妥的迁移方式,能使用DTS还是使用DTS迁移。
(1)用公网ip自建数据库
没有选择的原因还是因为我们自己的公网ip下的redis拿来做测试库了
(2)ECS上的自建数据库
没有选择是因为相当于要导入两次,首先在云redis里的备份与恢复选项下下载RDB文件,再去一个ECS服务器里安装一个Redis,再将RDB文件导入进去。然后再用DTS传输。。。我觉得导入两次风险更高,有少导入的选项我会优先选择导入一次的操作
二.官方提供本身提供的RDB/AOF数据文件导入
如果是Redis安装在自己的服务器上,可以进入服务器,将数据文件放在Redis目录下进行恢复操作。但是云Redis的话暂时不知道怎么进入安装Redis的主机,如果有清楚的小伙伴可以告知一下
三.使用redis-shake迁移RDB文件内的数据
redis-shake是阿里云自研的开源工具,支持对Redis数据进行解析(decode)、恢复(restore)、备份(dump)、同步(sync/rump)。
没有使用同步的原因是因为要求同一个阿里云账号下的不同云redis才能进行同步。
备份已经在阿里云redis控制台备份好了,直接下载RDB文件就行了。
已有RDB文件所以只需要利用redis-shake进行恢复操作就可以了。
(1)在github上下载最新的redis-shake并上传到ECS上,解压后修改redis-shake.conf(配置文件所有属性都有中文备注作用,很详细,好评)
(2)因为我们的项目使用的是redis上的db0,所以配置了filter.db.whitelist,其他人请根据项目实际情况进行配置
source.rdb.input = rdb文件路径
target.address = 目的Redis的连接地址:端口号
target.password_raw = 目的Redis的连接密码
# how to solve when destination restore has the same key.
# rewrite: overwrite.
# none: panic directly.
# ignore: skip this key. not used in rump mode.
# used in `restore`, `sync` and `rump`.
# 当源目的有重复key,是否进行覆写
# rewrite表示源端覆盖目的端。
# none表示一旦发生进程直接退出。
# ignore表示保留目的端key,忽略源端的同步key。该值在rump模式下没有用。
key_exists = ignore
# 指定的db被通过,比如0;5;10将会使db0, db5, db10通过, 其他的被过滤
filter.db.whitelist = 0
(3)./redis-shake.linux -conf=redis-shake.conf -type=restore(请注意:官网的命令应该是之前版本的操作语句,没有及时更新,如果按阿里云文档里的./redis-shake -type=restore -conf=redis-shake.conf 操作方式是无法启动的,请记得加上.linux进行操作)
最后附恢复完成后的截图
最后可以用redis-full-check来校验迁移后的数据